Author: Juliet Kemp
Publication date: December 14, 2016
Translation: A.Panin
Date of transfer: February 1, 2017

The future is impossible to predict... but in the case of programming languages, we can still make some assumptions.

What is it for?

  • You will be able to speak confidently about the future of programming languages ​​at your next interview.
  • You will be able to choose new language programming for later study.
  • You will learn about the mistakes developers of programming languages ​​made in the past.

After considering several programming languages ​​that have been developed over the past 50 years, it's time to touch the crystal ball and try to predict what will happen in the world of programming languages ​​over the next 50 years... or at least the next 20 years. Will the old programming languages ​​used today end their existence? What new programming languages ​​will capture the minds of developers? What serious problems are modern software and programming language developers trying to solve today? And how will the practice of programming affect the changes in the world of programming languages ​​in the future?

When considering the history of the development of programming languages ​​over the past 30-50 years, it is easy to see that there are a number of old programming languages ​​that are still in use today. Fortran, COBOL, C, Ada, and a few other programming languages ​​are still evolving and clearly won't be on the brink of extinction anytime soon, although some are less reliable than others.

Some older programming languages ​​are still used primarily to develop software for legacy systems (especially mainframes), and it is possible that over time this software will be rewritten in more modern programming languages. Due to the fact that these languages ​​are practically not developed, after porting all existing software, they will simply become useless to anyone. However, a more likely development is to use modern hardware (modern mainframes and virtual and cloud machines) to replicate legacy hardware and run existing code; it's much easier, cheaper and safer than rewriting all the code (from a project management point of view).

The C language, on the other hand, is heavily used in modern software development and still underpins much of the software in use today. It's no secret that the Linux kernel was developed using the C programming language. This language is ideal for solving the tasks assigned to it, so it is very difficult to imagine that in the near future any programming language will replace it in the field of software development, closely interacting with hardware devices.

Is it any wonder that Fortran, C, and COBOL code is still successfully used in some areas? By no means!

Middle-aged programming languages ​​such as Java, JavaScript and Python are still actively developed and used. The way these programming languages ​​are used has changed (which will be discussed below), but the programming languages ​​themselves have already gained significant weight and, most likely, will not disappear anywhere within the next 20 years. On the other hand, Perl was ubiquitous 15 years ago, while today it is rarely used; however, today Perl is still used in many software products and allows you to solve various problems. (And, of course, sooner or later there will be a Perl 6 interpreter that could change the world of scripting again.)

Older functional programming languages ​​such as Scala (2001) and Haskell (1990) have recently gained relative popularity. For example, at Facebook and Google, Haskell is used to automate certain workflows; LinkedIn, Twitter, and Tumblr use Scala for similar purposes. This circumstance marked a general increase in interest in functional programming, expressed in the transfer of ideas and features from functional programming languages ​​to general-purpose programming languages ​​(lambda expressions in Java 8 can serve as an example). It is not yet clear whether this will lead to the reign of functional programming languages ​​(as proponents of functional programming believe) or just a short-term popularity of functional programming ideas due to their implementation in more popular languages. It is likely that as developers become familiar with functional programming, the corresponding programming languages ​​will gain popularity in those areas where their use will solve problems in the most optimal way, but at the same time, other languages ​​and programming paradigms will continue to be popular in their niches. In fact, similar trends were observed in the case of other programming languages ​​in other periods of time due to the fact that their certain capabilities allowed them to most optimally solve emerging problems (refer to the "Parallel execution of instructions" section below).

Another approach to developing programming languages ​​is to port new (or not so new) features to existing legacy programming languages. More and more programming languages ​​are being built around the Java Virtual Machine - the most famous of these are Clojure, Groovy, JRuby and Jython, but there are many others. Does this mean that there has been a certain tilt towards creating a single platform for many programming languages? In fact, this is not a bad idea, which could have practical advantages if implemented correctly; it could make it easier to package and install software and allow programmers to work with higher-level programming languages ​​that are best suited to solving problems in their area of ​​interest. At the same time, there is a need to spend resources to maintain an additional virtual machine in working order, but today virtual machines (as well as similar mechanisms) are increasingly being used in the implementation of software products.

A, B, C...D?

The C and C++ languages ​​were developed a long time ago and have already proven their worth, as mentioned above. The D language is being developed by people who have experience in practical C++ programming as its replacement, borrowing good ideas, especially high performance, but at the same time more convenient for developers. It does not support some C++ features, but at the same time it provides a wide range of additional features, including a unit test system, a garbage collector, and various array processing mechanisms. Also, this language supports assembler inserts, clearly illustrating the statement that, like the C / C ++ languages, it allows the programmer, if necessary, to access low-level functions of the central processor. Its developers claim that D is suitable for developing any software, from high-performance server application code to low-performance script replacements.


Parallel execution of instructions

Parallel execution of instructions is probably the most difficult task faced by modern programmers. The need for it arises when it is necessary to carry out many simultaneous calculations with possible interaction. Such operations can be performed using a chip with a single core, and using a central processor with support for program threads, or several central processors/machines. Due to the fact that calculations do not have to be carried out in parallel mode, and in the course of their execution data may be requested (or shared resources may be used), there are many conditions under which the corresponding process will proceed correctly, including certain approaches to data exchange, memory reservation and instruction execution scheduling. Parallel execution of instructions is a particularly important aspect of programming, because as hardware advances, it becomes more and more optimal (and cheaper!) to use many program threads / CPU cores / CPUs at the same time.

To solve the described problem, various solutions and resources exist and are being developed. The Erlang language (which was started back in 1986) has recently gained popularity in cloud high-performance computing environments that require parallel execution of instructions. Erlang has a corresponding built-in mechanism with a set of primitives for creating processes and implementing inter-process communication; these processes form the basic structure of an Erlang program. Erlang also allows you to bypass the problem of working with mutable shared data and blocking access to it by forcing the use of a message sending mechanism without any possibility of using shared data. This means that each process has its own set of state data, with processes changing state based on their behavior or on data from messages received from other processes, rather than data from a shared structure that each process has access to. (When using shared data structures, it is usually necessary to use locks on access to them from individual processes; and if one of the processes holding the lock incorrectly terminates, other processes will not be able to access the shared data structure.) At the same time, Erlang is also functional. a programming language designed with high scalability, availability, and minimal infrastructure downtime in mind. This is due to its origins associated with the telecommunications industry; this industry simply does not allow significant infrastructure downtime. This feature makes the programming language in question an excellent choice for implementing modern network and communication services (Erlang is used in the WhatsApp messenger infrastructure). The Erlang virtual machine performs execution scheduling and load balancing, eliminating the need for the programmer to independently implement the corresponding mechanisms.


Another technology for parallel execution of instructions is the CUDA language (or its free analogue OpenCL), which allows you to use the computing cores (GPUs) of modern graphics cards at a time when they are not used for graphics processing and can perform parallel calculations. This technology makes it possible to successfully solve a number of specific problems and is popular in academic circles. In fact, CUDA allows you to convert data into structures used to represent graphics and use the computing cores of a graphics card to process and analyze them, because these cores are optimized for working with graphics.

Perl 6 and Clojure are also often recommended as tools for solving concurrency problems. The Clojure language (a variant of the Lisp language) was originally intended to "simplify the design and implementation of algorithms related to the parallel execution of instructions" and allows you to generate bytecode for the Java virtual machine. Perl 6 also greatly simplifies the development of such algorithms through the capabilities of a dynamic programming language. However, no one yet knows the exact release date for the stable version of the Perl 6 interpreter (or even the final version of the corresponding standard).

Google's new Go programming language (introduced to the public in 2009) was originally designed to support parallel instruction execution, although the main goal of its developers was to create a programming language with readable code that "would be simple enough for any programmer to fully understand." Go is a statically typed compiled language for systems programming. (This year, developers got the opportunity to use given language for developing applications for mobile devices and smartphones, which once again emphasizes the importance of developing software for mobile platforms.) Go code should be concise and readable, and, like in Swift code (which will be discussed below), in it should use interfaces and type inlining to implement virtual or non-virtual inheritance mechanisms. Flexibility, high development speed and a peculiar simplicity of the programming language in question are its important features.


This is the sandbox mode of the Swift language in OS X, with the code on the left, the results of its execution on the right, and a tooltip with the result of executing a particular instruction right below that instruction. This mode is not available on Linux (perhaps only temporarily), although the Swift language compiler can be downloaded from the swift.org website

big data

The increasing relevance of "big data" is driving the popularity of the R language (a statistical programming language developed in 1997), which is now used by companies such as Google, Facebook and the New York Times. However, this language is not powerful enough to process really large amounts of data and is more suitable for prototyping than working models of software projects. There is still no consensus on the applicability of Matlab (computational programming language), which is actively used in scientific circles to process any amount of data. Recent significant optimizations of the mathematical and statistical libraries of the Python language may well make this language an acceptable tool for solving computational problems. The IPython and NumPy projects (designed to make Python a computational competitor to Matlab) are good for light projects, and the Python developer community provides many other interesting toolkits at your disposal. Of course, the Matlab environment is still actively used in certain areas, although it is quite an expensive closed source software product. Both Matlab and R have packages for parallel execution of instructions.

The Julia language is very similar to the Python language, but it has much better performance. It was designed specifically to solve academic problems related to splitting numbers with support for powerful mechanisms for parallel execution of instructions and networking, as well as interfaces for libraries in Fortran and C. Given the complexity of some academic calculations that last for weeks, the higher performance of the Julia language takes on a special importance (the cost of calculating 1 second instead of 4 does not look like a significant optimization; the cost of calculating another week instead of four weeks obviously looks like it). Julia is very fast and, in theory, more scalable than Python, yet just as easy to learn; but it is also worth remembering that the community of developers of this language is not yet sufficiently developed, so it does not have a large number of libraries and toolkits to compete with Python and R.

Development of web and mobile applications

Another problem of modern programming is the development of web applications and applications for mobile platforms. More and more software is being run by web browsers (ChromeOS being the clearest example of this), making JavaScript and other web development languages ​​especially relevant.

Today, JSON is the most popular data exchange format supported by libraries for all current programming languages, and web services use REST technology, although just 10 years ago XML format and SOAP technology were ubiquitous. The only question left to ask is "After another 10 years, will we consider JSON and REST obsolete technologies?" Web development technologies are still developing rapidly, so this area in any case, will undergo drastic changes in the near future.

The importance of developing applications for mobile platforms determines the relevance of the language Java programming in the near future as the Android platform (using its own version of Java) dominates the smartphone and tablet market. The other big share of this market is, of course, Apple's iOS platform; Based on this, the new Swift language from Apple, which replaced the Objective C language, is one of the most relevant programming languages ​​today.

The Swift language was introduced to the public in mid-2014, it is developing very quickly, and at the current time its compiler code is open under a free license. According to Apple representatives, it is "a language for protocol-oriented programming". In Swift, protocols are pretty much the same as interfaces in other programming languages; however, in Swift, instead of creating classes and subclasses, it is recommended to create protocols, and then - types and structures that will use them. Protocols can be extended with sets of standard behaviors. This makes the Swift language extremely flexible, especially due to the fact that a type can be assigned to many protocols at once without any problems, while multiple inheritance of classes in available languages programming is either not implemented, or as difficult as possible. Protocols can also be used for more than just class types. It is possible to easily extend the capabilities of existing protocols using the extension keyword, so that all protocol features are also available within your extension.

An extremely convenient feature of the technology under consideration is the ability to share the Swift and Objective C languages ​​within one application, which simplifies the transition to using a new language as much as possible. Also, this technology allows the use of an interactive development mode, namely, the "sandbox" mode in the integrated development environment, which allows the developer to easily test code fragments. (This feature is also intended for novice developers learning the language.) That said, there are incentives for developers to move to Swift, namely the large market share of iOS/OS X software and the low barrier to entry. If you are just starting your journey in the Apple universe, you should use Swift instead of Objective C, and if you are an experienced Objective C developer, you will also benefit from learning Swift.

Swift demonstrates several ideas of modern programming - bringing development flexibility and speed to the fore, as well as creating interactive environments for development and automatic code optimization (in such environments, the compiler displays messages describing code optimization techniques).

Internet of Things

The Internet of Things is a new concept that is on everyone's lips, and its development is difficult to predict. Some of the applications of this concept are obviously meaningless (the classic example is the "smart refrigerator"), but at the same time, this concept is relevant, if only because it affects many basic aspects of programming. Most likely, any person familiar with it will not leave the expectation of its cardinal change in the near future, under which languages ​​and, possibly, programming practices will subsequently adapt. Maybe the development of 3D printing will lead to the need for compilers to compile objects, not code? And what will it look like?

Code development: learning and practice

There are far more resources available to novice programmers today than ever before. The Raspberry Pi and Scratch projects allow you to use a variety of methods for teaching programming, including methods for teaching children (this applies mainly to Scratch). The Robots Dash and Dot projects are also designed to introduce children to the basics of programming and then move on to learning more complex programming techniques and algorithms. In this case, the development process is about solving obvious problems with code. A new generation of software developers who have gained knowledge in the process of working on these projects may well take programming languages ​​and the programming process itself on a new track.

The challenges for developers are also starting to change. The shift in focus towards cloud platforms and the simplification of the process of sharing code make it possible for individual teams from all over the world to work on projects, whose members rarely meet each other in real life. Cloud platforms allow you to create applications without knowing the system administrators who are responsible for deploying and managing them, although in the past such tasks could be handled by you. Keep in mind, however, that today it's more relevant to develop applications that run on your servers than to send installation disks to customers to install applications on their systems.

Increasing the degree of automation allows programmers to devote more time to work on important tasks. The presence of libraries, frameworks, APIs and plugins allows in most cases to combine existing software components, rather than developing them from scratch; in addition, the use of these software components allows you to focus on the implementation of the application logic and avoid many errors identified in the process of testing popular libraries and frameworks by a wide range of their users. Obvious in last years The popularity of the Python language is in part due to the expansion of the range of its libraries, which greatly simplifies the reuse of code in new scripts. Problems can arise only in the case of simultaneous use of several competing frameworks; choosing the right framework is not always an easy task, and the presence of many such software components reduces the benefit of using them by reducing the user base of each of them.

IDEs and their various extensions allow code generation, which is especially useful when using programming languages ​​that require large amounts of boilerplate code. An example is the JavaScript language, which has extensions such as CoffeeScript and Less.js that make it easier to develop scripts using complex cascading style sheets.

Automated testing, test-driven development, push-on-green, and other similar practices also allow, when used correctly, to produce more concise and reliable code, reducing the time spent on fixing bugs after applications are deployed. Improvements in version control systems, implementation of hooks for running automated tests, and other such features, of course, distinguish the modern software development process from the corresponding process 10 years ago (and make it simply unrecognizable compared to the corresponding process 30 years ago).

Far future

Is Moore's Law slowing down? Maybe this means that after some time some kind of turning point will occur, similar to the replacement of transistors with integrated circuits (which, in turn, were replaced by vacuum tubes)? Raymond Kurzweil defends this point of view and considers the nanolamp to be the most likely replacement. (He also believes that in the future computing power will grow exponentially, which will eventually lead to the creation of many devices based on the principle of technological singularity, which, in my opinion, is too early to understand.) Reconfigurable hardware is another a popular concept of the future, which is beginning to be implemented on a limited scale today. The release of new hardware usually results in the creation of new software, so without information about how it will work (if it is released at all), it is almost impossible to make assumptions about any future software features.

However, if you look back 40 years, you can easily see that the hardware has changed a lot, and the software has changed with it, but we are still dealing with some of the programming languages ​​that were popular at the time. If we use a rough extrapolation, we can conclude that we will use some of the programming languages ​​that are relevant today for the next 40 years. As programming practices change, so do the programming languages ​​themselves. So, modern language Fortran is slightly different from the original Fortran language, and the Java 8 language version is very far from the Java 1 language version.

The fundamental problem of programming languages ​​is the lack of a universal language that would have all the features that each of the programmers needs, because some of the features may not be compatible with each other. That is why all theories about "the only universal programming language" are untenable from the outset. (At the same time, many programming languages ​​allow you to generate bytecode for one virtual machine, which can subsequently be executed using other compatible virtual machines.) We have always had many programming languages ​​for solving various problems, and we have always been able to use different paradigms depending on the prevailing conditions. . Of greatest interest in this case are gradually emerging new tasks and methods for solving them by modern programmers using new and old programming languages.

Currently, there are a large number of programming languages ​​that are used for software development. C#, PHP, JavaScript are very popular. However, the scope information technologies does not stand still, and new, not very common languages ​​are gaining more and more popularity.

Predicting exactly which languages ​​will eventually take the top spot in the rankings is difficult, but there are several competing technologies that could be actively used in the next few years.

1 Go

Go, known as Golang, was launched in 2009 by three Google developers - Robert Grizmer, Rob Picon and Ken Thompson. This open-source language is faster, more convenient and easier to use than Java and C. It is used by a wide range of organizations, from BBS and SoundCloud to Facebook and UK government agencies. It is also used in the deployment and launch of corporate applications (Docker). Most likely Go is a popular programming language in the future.

"Go is an attempt to combine the ease of programming in interpreted dynamically typed languages ​​with the safety and efficiency of statically typed compiled languages." - said one of the creators of Golang.

2. Swift

Swift, presented at Apple's WWDS conference, is seen as a replacement for Objective C, a language for OSX and IOS. Apple made the language open source in December 2015 under the Apache license. This means that all sources will be editable.


Swift, which bears similarities to modern Python and Ruby, has grown rapidly since its launch, notes RedMonk analyst Stephen Grady.

“Swift adopts safe design patterns and adds modern features to make programming easier and more flexible,” commented Apple.

3. Rust

Another near-future programming language that has been in development for several years and launched at Mozilla. The company describes it as a new programming language that focuses on performance, concurrency, and memory savings.


By building the language from scratch, the Rust developers avoided many of the problems (such as backwards compatibility) that traditional languages ​​face. The technology has aroused the interest of many programmers.

4. Julia


Julia is a high performance dynamic language high level for technical computing. It is focused not only on mathematical calculations. General-purpose programs written in Julia are not inferior in performance to C and C++.

5.Dart

While other languages ​​haven't gotten much attention, Dart has slowly gained more and more recognition since its discovery in 2011 as an alternative to browser-based JavaScript.


Dart is great for developing modern web applications with heavy workloads. This promising programming language will become in demand in the future, analysts say.

Created by the developers of Ericsson two decades ago, a language for telephone exchanges, Erlang is a relatively plain language programming designed for applications that are large, scalable, and highly available.


It has received little attention outside the telecommunications industry since the mid-nineties, but has grown well in recent years. WhatsApp, for example, uses Erlang to process the billions of messages sent through its network every day.

7 Scala

Scala is the functional and object-oriented programming language of the future. The very name Scala testifies to its excellent scalability.


It is used in large, critical, highly loaded Twitter, LinkedIn, Intel systems.

Haskell is an advanced, purely functional "lazy evaluation" programming language. Its first specifications were published in 1990.


Mostly used in academia, but there are some industrial examples, such as projects at AT&T, BAE Systems, Facebook, and even Google.


Clojure, launched in 2009, is a dialect of the Lisp language. It is a general purpose language that emphasizes functional programming. It processes code as data and has a macro system like other Lisps. It is successfully used in industrial enterprises.

10. Lua

Lua was designed to be an extensible mechanism for a variety of tasks. Lua, translated from Portuguese as "moon", is a cross-platform, lightweight, multi-paradigm language designed for embedded systems.


It is a very popular language among gaming companies, used in Angry Birds, World of Warcraft and other games. Even though it was created in 1993, some programmers call it the programming language of the future.

Photo: IBM 704, for which Fortran was originally developed. Wikimedia Commons, public domain

All programming languages ​​used today can be divided into five generations.

  1. The first refers to the 50s of the last century. During this period, the emergence of low-level machine-dependent languages, including the Assembly language (Assembler), falls.
  2. Since the end of the 50s and over the next 10 years, the speed of development has increased, the reliability of programs has increased.
  3. In the 60s - 70s there was a surge in the increase in the work of programmers. There are universal programming languages ​​with the help of which it is possible to solve the most diverse tasks. Their distinctive features are relative simplicity, independence from any particular computer, the use of complex and powerful syntactic constructions.
  4. Since the 70s, languages ​​have been created that are focused on the implementation of large projects, increasing their reliability and speed of creation. Object-oriented languages ​​are emerging.
  5. Since the mid-90s, the industry has been replenished with programming languages ​​for the Internet (XML, Perl, HTML, PHP).

Prospects for the development of programming languages

Speaking about the trends in the development of programming languages, for a start it is worth identifying those driving forces, which contributed to their evolution and continue to have a significant impact on their further development.

The pursuit of excellence

PL is that indispensable tool that serves a programmer to create software - this is a common truth with which it is difficult to disagree. How better language programming, the more perfect the program can be written.

Focus on efficiency

In many ways, software development can be compared to manufacturing, where, among other things, critical factors, the determining factors are: the productivity of the development team, the costs and the quality of the final product. All developed technologies for creating programs must be supported by programming languages.

Increasing the complexity of tasks

Every day the tasks solved with the use of computers are becoming more complex and diverse. This leads to the fact that the best minds of the planet, represented by talented developers, strive to create new, more powerful, problem-oriented programming languages.

Software lifecycle extension

Programming languages ​​should help developers in the uphill battle for renewal life cycle programs. After all, not a relevant, morally and technically obsolete product is of little interest to anyone.

It is not so easy to single out the general trend in the development of programming languages. At the same time, it can be assumed that this process will move in the direction of ever greater abstraction in the near future. Major programming programs will tend to change the level of detail, the greatest simplification. This will lead to an increase in the reliability of the software development process as such and a decrease in the number of errors made by developers.

The very first and most popular

Fortran

One of the first PLs is Fortran (Formula Translation). Created in the 50s of the last century, it still remains relevant. Such an enviable longevity of the language was largely due to its simplicity and the accumulation of a significant amount of data.

Today Fortran is used in various areas Sciences, including for solving mathematical and physical tasks, for various kinds of scientific and engineering calculations, for modeling weather and climate, etc. It is a rigidly standardized language that can be easily ported to various platforms.

Initially means of expression Fortran were rather limited. However, on the way of its development, it was supplemented by diverse lexical constructions. Moreover, many of them characterize functional, structural and even object-oriented programming.

Java

The appearance, without exaggeration, of the most used and demanded PL of our time, was led by the desire of developers to create programs that would not depend on the type of computer and operating system. Java is not only responsible for running programs that are distributed through Web pages, but also supports all the tools of new IT.

Combining C and C++ languages, Java is objectively the most powerful tool for creating cross-platform applications. We can say that the principle of its work is contained in the expression: “Write Once, Run Anywhere.” According to TIOBE, the Java language became the most popular in 2015.

Despite all the differences and subjective features of the Fortran and Java languages, both of them are the result of evolutionary processes shaking the programming world. These languages ​​continue to solve the most complex problems, remain in demand and continue to develop. Let's see what will happen next, because evolution is a natural process that cannot be prevented.

We do not learn Fortran, but we learn Java: profession "".

conclusions

· Java, C#/.NET, Mobile (iOS, Android) – the three undisputed leaders of in-demand specialists.

· PHP programmers are also needed in the labor market to support existing products and develop new ones in the field of e-commerce.

· For small “point” or non-standard projects, programmers with knowledge of other languages ​​and frameworks are needed. Only some companies can afford non-standard projects, while others prefer to outsource them to freelancers.

· As a rule, projects using new or relatively new technologies (for example, Scala, Erlang, Dart), not very popular or those that are outside the scope of the main focus of the company (Python, Ruby on Rails) are considered non-standard. Another type of non-standard projects is using outdated programming languages ​​and frameworks (Delphi, Cobol, Sybase, etc.).

· The highest paid on the market are Java programmers, but the difference in salaries of line programmers is no more than 20%.

· The difference in salaries is noticeable vertically - senoir-programmers and architects can earn significantly more regardless of what technology they work with.

· Most experts agreed that the market will not change significantly over the course of 3-5 years, only additional technologies will change.

· Mobile and Scala are unequivocally recognized as the most perspective directions. Among the others promising directions called - Haskell, Erlang, Dart, PHP (Magento platform), possibly also Python. Experts pointed out that Frontend developers (HTML 5, CSS, JavaScript) would also be needed.

· Among the unpromising programming languages ​​and technologies, the experts named first of all Delphi and Symbian. Experts also ranked C, Flash, Cobol, Modula2, Lotus Notes, Pascal, VB.NET as other unpromising areas.

· The market does not need “universal soldiers”. The best specialist knows 1 language, but deeply and with many related technologies.

· The desire to learn is the main criterion for a successful programmer. Companies are ready to train employees at their own expense, but the employer cannot force them to acquire new skills.

· According to some experts, English is the main language for a programmer. Without knowledge of this language, it is almost impossible to build a successful career.

· The level of payment for any programmer depends in most cases on the availability of the project and the company's interest in a specialist with just such qualifications. If there is an appropriate project, the most expensive and highly demanded specialists are Scala, Erlang, Haskell, Go, Dart or other rare languages.

· Depending on the specifics of the company, a developer who programs in a language “atypical” for the company (for example, Perl, sometimes JavaScript) can become highly paid.


Main conclusions

The leading languages ​​are practically unchanged, no matter what direction the company has and what projects it implements.

Today, the market is most in demand for specialists who know the Java programming language.

These experts were named all interviewed experts. Java developers are needed by everyone and almost without exception. Such popularity is associated with the specifics of the language. Firstly, according to HR managers, it implements both the majority of business applications (including those in the financial sector), as well as small entertainment or gaming applications, desktop programs, and mobile solutions. In addition to the universality of the language, there is another factor: Java is a programming language that, on the one hand, has been around for a long time, and, on the other hand, is actively developing, opening up new opportunities. Thus, to work in Java, specialists are needed both to develop new products and to maintain or improve old ones.

at Innovecs: "Java holds the lead - there is a need in the market, many projects have already been written in Java - they need to be finalized or reworked, so this is number one."

The next most popular "skill" − knowledge of the framework. NET and its accompanying C# programming language. Almost all experts also mentioned these technologies in their interviews (13 out of 15). Most of them need such programmers for their companies, less often HR managers are simply aware of the demand for such specialists.

Mobile-programmers working with both iOS (Objective C) and Android are also in demand among employers. Almost all respondents also spoke about the need for such specialists. Large outsourcing companies that can afford several diverse projects are more likely to look for such specialists. Small companies are also interested in them for fast start-ups and “light” projects.

Worth mentioning separately PHP programmers. Despite the fact that the programming language has somewhat lost popularity in recent years, the market still needs specialists with knowledge of this language. We were told this by 10 out of 15 experts. The main directions are support for existing products and developments in the field of online commerce.

“Projects on RNR are different in terms of technical level and tasks. The current state of the market allows us to talk about the constant demand for highly qualified PHP developers. They are successful, they find work in Ukraine, and in the USA, and in Europe. This and social networks, and the Magento platform with good opportunities for e-commerce ».

Rimma Men, Head of Motivation and PR Department, Ciklum : “Java, .NET, Mobile (iOS, Android and multi-platforming) and PHP are the most in demand now. Why there is a demand for these specialists: everything is dictated, of course, by requests. Basically, these are requests for the development of applications for the banking and financial sectors, and they are all written, most often, in Java; if these are some portals, web, then PHP is usually used in this case. Mobile is popular, because everyone, in one way or another, is switching to Mobile with their sites, with their applications, in any case, they will be requested. There are a lot of Microsoft products, so .NET specialists are really in demand.”

For some, the emphasis is shifted towards dynamic programming languages, for some, the work is built on open-source technologies, for some, specialists programming in rare languages ​​are needed, and for some, they work more in the mainstream, taking out all non-standard tasks freelance.

“We are primarily interested in programmers who own open-source technologies... Such technologies are more often used in innovative solutions, because they allow you to launch a service or product relatively free of charge, start working with it without buying an expensive license.”

The situation with the “dinosaurs” of the market, C/C++ and Delphi, looks somewhat different.

We were often told that Delphi programmers were needed by experts from Ukrainian companies focused on the domestic market. Almost all tasks for such specialists are related to the support of existing software. Today, only 4 out of 15 companies can boast of relevant vacancies for them.

The situation with C/C++ looks different. Most of the experts told us that indeed the number of vacancies for such specialists has decreased. However, the number of developers programming in these languages ​​has also significantly decreased due to the difficulties in learning them. Thus, despite a significant decrease in the number of proposals, these specialists are still in demand.

Inna Mokrovolskaya, supervisor HR department of the company materialize" : “C++ is turning into a dying technology because it is the most complex and switches to simpler, more interesting languages ​​for developers. Which, on the other hand, fuels the demand for C++ for employers, because if your program is already written in C++, and programmers switch to others, then there are fewer of them.

Much less frequently mentioned by JavaScript experts. As a rule, knowledge of this language is required only as an additional to other basic "skills". However, it was often said that Frontend developers with knowledge of several popular programming languages ​​would be needed - HTML 5, CSS, JavaScript and others.

Sometimes, as the most demanded, database administrators (MySQL, noSQL) were also mentioned. However, more often these technologies were called as additional, although very necessary.

Python, Ruby on Rails were sometimes called the most popular ones.

Massive and unusual projects

The most massive programming language, as mentioned above, today can be called only one - Java. Further "popularity" of a specialist, his involvement in large or point projects depends only on the specifics of the company. So, some experts called either C# programmers, then Mobile developers, or html developers rare specialists.

The most popular programming languages ​​and skills for "point" and atypical projects

Named: Python and ruby on Rails, C under Unix, C with kernel knowledge (Kernel), VB and C++.

Svetlana Lomaka, Leading HR Specialist at Luxoft told what they had to look for Seibel or business intelligence. There are few specialists, if we find such, then we offer not a project, but a permanent job.”

Marianna Petrenko, Head of HR at SysIQ says that often there is a request not so much for the main languages, but for additional knowledge: “ It's not just languages, it's knowledge of the Demandware platform, Magento, FryOCP . There is such a big platform Infinity".

Ludmila Sirik, Head of Recruiting companies Miratech also shared its experience in finding rare specialists : « In some cases, even from new customers receive exclusive orders. We are talking about rare specializations that are outdated on the Ukrainian market, but are in demand by large Western companies that care about the stability of their working staff and are not in a hurry I to switch to new technologies. They may request, for example, the administrators of Sybase, COBOL or open VMS . Also periodically there is a need for C ++ - developers. It used to be quite a popular programming language. There is a need for it even now, but there are few specialists left, since many who owned it have retrained to JAVA or. Net ».

It can be difficult for HR departments not only to find, but also to retain such a specialist - after the end of the project, the company cannot always provide a similar job offer. Perhaps that is why "point", small, non-standard projects are more often either in large outsourcing companies, or in small companies that specialize in them.

“... With further retention of difficulty, after such a specialist is found, works on a project, the project ends and we know that he is a valuable specialist, but we cannot provide a similar interesting project. We try to rotate within the company.”

Almost all experts agreed that in the next 35 years the market will not change significantly.

Experts confidently speak only about changing trends within the framework of already popular basic technologies. However, taking into account the specifics of the market, none of the experts undertake to accurately predict the unpredictability of its development. But the presence of already developed software, which will need to be maintained and refined, will ensure the work of specialists in all currently relevant technologies in the coming years. In addition, there is a constant migration from less popular platforms to more popular ones (for example, retraining from C ++ to Java is common). Thus, among developers on a less popular platform, competition is reduced, demand is growing, and so on. n. does not decrease.

And today there are more vacancies in the IT market than there are programmers.

HR managers predict stable popularity for Java, . NET , Mobile and PHP(the development of the latter is associated with the development of the Magento platform). As well as the further development of Scala, Erlang, Haskell, Dart, Go and Python. Although, with regard to the latter, there is no single position. Some experts say that programmers with knowledge of Python will be needed in the future, some call this language unpromising. But almost everyone says that the need for Frontend programmers (HTML 5, JavaScript, CSS) will increase - a web application customer is almost always interested in a good final picture.

Evgeny Kaganovsky, HR manager at IT Innovations Ukraine Ltd.: "In the next 3Nothing will change in 5 years, because we have an outsourcing boom now. Large companies are now starting to transport many projects: from Indian centers, from Malaysian centers,very actively transported just to us. Because if we look closely at the efficiency of employees, then it is 70, even 100% higher than that of their colleagues from India. On the other hand, it is very difficult to compare the level of preparation. Ours is much higher."

Natalia Piven, Senior HR Manager at Infopulse Ukraine : « I think that in the next few years the trend of popularity of Java technologies will continue, since now this area is actively developing, there are many new, interesting and easy-to-use programs for both developers and end users. In addition, there will be orders to support developed systems in Java, to refine and improve their functionality.”

Tatiana Lysenko, HR Director, Cogniance, Inc: “I doubt that there will be new languages ​​that will become widespread in use, but some new frameworks, additional libraries and more optimal solutions - of course, yes, they appear all the time.”

Natalia Zub, Head of HR and Recruitment Departments at Innovecs: “There is a trend that not the technologies themselves, but specific experience will be in demand. Experience in a specific business domain - for example, financial, or supply chain, etc. Now it is not so much the technology that matters (they may be outdated), but what a person can work with, with what projects and in what business domain. There have been cases where people switch from technology to technology, but they can work with it.”

Based on the general forecasts, it can be concluded that that in 2–3 years it will be relevant in the labor market to speak languages ​​that are popular and in demand today adjusted for the improvements and updates that will come with them.

There is no consensus among experts about the need for which specialists will decrease or disappear in the next 35 years. Definitely predict the reduction of vacancies for Delphi-developers. However, they will be able to find work, especially in the support of existing software.

Olga Gorchinskaya, : « I'm not sure that something will disappear, because there are still systems that require support. There will be no development, but there will always be support.”

The need for other specialists who program in "mass" languages, most likely, will not be reduced. Individual technologies or previously unpopular programming languages ​​may leave due to the loss of their relevance. Some experts talk about a decrease in demand for C / C ++ programmers, but such forecasts are few.

Marianna Petrenko, Head of HR at SysIQ: “If we are talking about C ++ for embedded devices, then I have not had such a case when developers were sitting without work. If there were downtimes, then it was the specialists who sorted out, they wanted something new, complex, and there are not many such projects in Ukraine. In Silicon Valley, such specialists are carried on their hands and will be worn for a long time to come. ”

Tatiana Lysenko, HR Director, Cogniance, Inc: “Technologies such as BREW, Symbian . Also, there are not many prospects for Flash. After their conflict with Apple and the release of all iOS devices without support for this technology, it will be successfully replaced by JavaScript, HTML 5, etc. Knowledge of C++ this is very good and never hurts. PHP also has its own niche, it is functional and convenient, so I don’t think it will sink into oblivion.”

Among the unpromising programming languages ​​and technologies, experts first of all mentioned Delphi, Symbian, as well as C, Cobol, Modula2, Lotus Notes, MainFrame, Pascal, VB.NET, etc.

As mentioned above, rather we are talking about a two-way process - the reduction of vacancies and the parallel migration of specialists to new platforms. So, for example, you can notice the migration of specialists from the development of desktop programs to web or mobile applications.

Elena Shiringovskaya , Leading HR consultant "CONSULTING" : "Desktop- programmers are being sought less lately. If earlier some entertainment projects were under the Web, and serious business applications were for Desktop , now business applications are being rewritten for the Web, and more and more entertainment applications are being written for mobile devices. We are programmers for D esktop was hardly searched for in 2012.”

The market does not need universal soldiers.

All experts unanimously agreed that they are primarily interested in programmers who know their main programming language well and deeply. It is important that the specialist has not only basic knowledge, but also mastered as many new, related, in-demand technologies and frameworks as possible.

Olga Gorchinskaya, Leading HR Specialist, HR Department, INCOM : “The market needs narrow, but very professional specialists, it is impossible to know two languages ​​well. For example, Java requires a lot of knowledge and effort. Usually a good Java specialist should do a couple of commercial projects and be able to work with databases.”

Natalia Zub, Head of HR and Recruitment Departments at Innovecs: “Regardless of which programmer has chosen the direction for himself - Java or C #, or PHP, at the same time he must know new frameworks and libraries that make it easier to work with these languages ​​- they are constantly evolving. For JavaScript - Framework ExtJS, node.js, backbone.js. Each with its own advantages, knowledge of these particular frameworks is often needed. They appear very often - updates are constantly taking place - it is important that a person is up-to-date - on the crest of a wave.

Of course, if a programmer has a good and complete knowledge of several languages, this will be a plus for him and, perhaps, the key to a successful career as an architect or lead programmer. However, "universal soldiers" do not need much - up to 5-10 people in the company, and they will most likely work in very specific projects. Therefore, experts categorically do not recommend “spraying” attention between technologies. Most tasks do not go beyond one programming language, and a specialist who constantly improves his knowledge in it is valued more than a developer who knows 2-3 languages ​​superficially.

Ludmila Sirik, Head of Recruiting company " miratech » : « A developer who knows several programming languages ​​is a rarity. In our company, these specialists have a level Principal - one of the highest levels of engineering qualification, higher than Senior, in fact, a guru. Such people are worth their weight in gold everywhere. They are generalists. And it is very convenient for any projects. There is no doubt about the quality of their work. However, if we talk about the market as a whole, then "narrow" specialists are no less in demand ».

Rimma Men, Head of Motivation and PR Department, Ciklum : “Universal soldiers are needed – there are always places to apply them (projects to optimize resources, rewrite software from one platform to another, develop games for several mobile platforms at once). But basically we are talking about the market's need for good narrowly focused specialists. I can’t say that if a .NET specialist knew Java, PHP, then he would be more appreciated or bring more benefits to the Java project than just a good Java specialist.”

Evgeny Kaganovsky, HR Manager, IT Innovations Ukraine Ltd.: “It all depends on the life cycle of the project. If we are talking about a project that lasts 34 years, where a narrow specialization is needed, then here I completely agree. If we are talking about rapid development, where there is one project that goes to Android, and then abruptly switches to security, then we need a more multifunctional person. Even one such programmer is enough, if he is an expert, if this level is above average, then two are enough.

Experts point out the importance of not only professional skills, but also knowledge of the English language.

“The most important language he [a programmer] needs to know is English. The big problem of our market is that we have bad English. In India, Englishthis is the second native and although the education is low (vocational school level), they [Indian programmers] are more attractive.”

Special emphasis was placed by HR specialists not on how much and what the specialist knows, but on whether he is ready to learn and develop.

DIO soft" : “There is no one-size-fits-all option, in my opinion. The main factor here is the flexibility of thinking, proactivity and the desire to expand your professional knowledge base.”

Inna Kovalenko, Head of HR at Terrasoft: “As a rule, if a person knows one programming language, he can very quickly learn something else - the main thing is that he has an interest in this.”

Java is unanimously recognized as the most expensive programming language. In second place in terms of high cost is called C #. PHP and C++ are a little cheaper (but only at the initial levels), and Delphi programmers are the least expensive for the company.

It is very important to note that the majority of HR specialists pointed out that the difference in pay for the work of programmers working for different languages, is insignificant. It is maximum 15 twenty %. Significant differences in pay will not be in the "horizontal" but in the "vertical" section. Salaries for entry-level, intermediate, and high-level programmers can indeed differ significantly.

It is also important that the salary for any programmer is determined by the presence of a project and the company's interest in this particular specialist. Thus, sometimes specialists programming in Perl, JavaScript take the first place in terms of cost. At the same time, one of the experts called the same Perl one of the lowest paid "skills" in the company.

According to Elena Shiringovskaya, senior consultant at HR Consulting, if there is a project, the most expensive specialists in Scala, Erlang, Haskell or other rare languages ​​become the most expensive: “ The most expensive are, firstly, Scala Erlang, Haskell. Those who were the first to study them and become professionals earn good money, because on the one hand, there are very few of them now, on the other, they will then teach others.”

Rimma Men, Head of Motivation and PR at Ciklum: “The most expensive one is Java, mostly due to the fact that there is too much demand for it, a lot of Java-based projects have entered Ukraine (in all companies), - these are mainly clients from the banking sector. Such an increased need for these specialists has raised the level of salaries, which is natural.”

Irina Radchenko, HR manager, " DIO soft" : “Since we use the most popular languages ​​today, I cannot say that any of them are more expensive. Most likely, those specialists who are truly gurus in their field are paid the highest - they are in the leading roles of senior specialists and architects.

Tatiana Lysenko, HR Director, Cogniance, Inc: “We regularly update our compensation grid, but I do not see much difference between the cost of specialists in different technologies now. Maybe this is the specifics of our company. Yes, PHP is a bit cheaper, but not always. The rest of the languages ​​are on the same level.”

Experts say that the need for programmers for mobile platforms and Scala will increase.

Among the possibly popular and demanded technologies in the future, Mobile (iOS, Android) was first of all called. The same number of "votes" was scored by the Scala language.

Natalia Zub, Head of HR and Recruitment Departments at Innovecs: “Of the “unusual” languages, Scala is gaining popularity. Scala programs are in many ways similar to Java -programs and can interact freely with Java code. This is a relatively new technology – few people have these skills, although there is some demand.”

Also mentioned HTML 5, silver light , Python, Dart , Erlang, Haskell, NoSQL, and the CoffeeScript framework.

While making forecasts, experts, however, remain rather cautious. Rimma Men recalls that there were already prerequisites for a boom for many languages, but it never happened. Therefore, it is quite difficult to predict anything.

However, not everyone can afford to develop new technologies.

Elena Shiringovskaya, Leading Consultant, HR "CONSULTING": « Employers require knowledge of such (new) languages ​​as Erlang, Haskell, Go, Dart if there is a project, mainly foreign customers, international companies with their own development. New promising languages companies that develop their product can afford, outsourcers follow the market, looking only for those who are already needed, and will not be needed in the future.

The cornerstone component of the demand for a programmer in the market is his willingness to learn. All experts said that the company is interested in staff training, but no one can force the developer to study.

You can learn in a company in different ways - using external and internal resources of the company, exchanging experience, independently looking for new information. All these methods are motivated by HR specialists, but self-motivation always comes first.

Inna Kovalenko, Head of HR at Terrasoft : "X the nature of the work is such that they are constantly learning something new. Naturally, we acquire specialized training for them, which generally increases the knowledge of something at the level of the entire team. But within the framework of each of his tasks, he researches information - everything related to his work on the Internet, on forums - thus, increases his professional level. Teamwork is very important when they share this experience with each other.”

Olga Gorchinskaya, Leading HR Specialist, HR Department, INCOM : “We are teaching. We have an internal training system, that is, we can take "green" specialists and develop them on our own. Over time, they may become certified. But without self-motivation for self-learning, the process will be long and ineffective.”

Tatiana Lysenko, HR Director, Cogniance, Inc: “We provide an opportunity to learn both during the transition to new technologies and to improve knowledge in current technologies. But not all people want this, and the company does not have the task of re-educating such people.”

An open question remains the preparation of a young specialist before he enters the labor market. Despite the fact that there are universities in Ukraine that graduate young specialists with a good theoretical base, practical skills, as a rule, leave much to be desired. However, most experts say that mastering any of the popular languages ​​for a former student of a specialized university is a feasible task, and companies are ready to spend time and money on this process.

Aelita Korol, Leading HR Manager Softline Consortium Intecracy Group: "FROM Currently, active work is underway to introduce programs of more modern technologies into our Ukrainian universities, but so far this has not been implemented.”

Aelita Korol, like many other respondents, says that it is easier to teach a specialist in the process of work than to look for a ready-made one, in particular, there are almost no young specialists after universities with knowledge of the technologies in demand.

A significant advantage of our education system is its versatility and the ability to easily master any technology after graduation:

Timofey Evgrashin, independent expert, team coach, business coach, consultant on the implementation of project management methodologies: “The nuance of our education is that if you studied at a normal prestigious university, then they more often teach not the language, but the approach as a whole. It is not important for a graduate to specialize in something. He gets into the first company, where he needs to understand, for example, .NET. He figured it out, he liked it, he continued to specialize. Or he didn’t like it - he retrained. ”

The data was obtained as a result of a series of in-depth interviews with HR specialists from leading IT companies operating in Ukraine. The study was conducted in January 2013.

Marianna Petrenko, Head of HR at "SysIQ ».

Tatiana Lysenko, HR Director, Cogniance Inc. ».

Natalia Zub, head of HR and recruitment departments in the company «Innovecs ».

Irina Radchenko, HR Manager DIO soft ».