Programming languages are a serious subject for software developers. If you don't believe this, try telling a programmer that a particular language is the best programming language – and be prepared for a long lecture, because developers have an emotional attachment to programming languages.
This question is also relevant for companies that have chosen specific languages for strategic reasons. When is the time to leave behind a familiar language, well-known tools and a stable ecosystem and change to a new language? And which language should you choose? The change is disruptive and involves large capital expenditure. Further, the productivity of the development team will suffer until they are familiar with the new environment.
What are the characteristics of a good programming language?
The ecosystem of tools and libraries around a programming language is also a critical success factor for a language. The best example of this is Java. Although the language itself is often criticized, the large, versatile and mature ecosystem has made Java one of the most widely used programming languages today.
Syntax is another success factor for a good programming language. Of course, the question of curly, square, round or angle brackets is largely a matter of taste. However, many programmers prefer languages with high expressive power that do not need a lot of embellishments, because they facilitate compact code with a small character count.
The readability of programs often suffers from compact representation. Experienced software developers know that over the long term programs not only have to be understood by computers, but also have to be readable and understandable for other developers. Code often tends to live a lot longer than people originally had in mind. A large number of developers work on a code base over the years, so a good programming language needs to strike a balance between expressiveness, compactness and readability.
Programming languages influence how we think
The semantics and underlying concepts of a programming language are much more important than its syntax. A language is not just a representation of thoughts; it also influences the way we think. This applies to all languages, but especially to programming languages. Every programming language comes with a set of concepts, and programs must be formulated based on these concepts. Learning a new language always means learning new concepts as well.
Early programming languages were strongly oriented to the hardware and binary code for computer processors. Programmers needed to have a detailed understanding of how the computer worked, and programs had to be modelled on concepts such as bit operations, registers and processor instructions.
Expressive languages at a higher level of abstraction
With high-level languages the programming language can be less closely tied to hardware. These languages enable programmers to solve problems at a higher level of abstraction and with more powerful concepts. Object-oriented languages are a classic example of this. Instead of building programs on registers and processor instructions, programmers can define objects that have attributes and communicate with each other.
However, programming languages are still influenced by technical aspects. For example, functional programming languages are now making a strong comeback. These languages have been around for decades, but the development of parallel computing with modern multiprocessor hardware has led to a renaissance. Functional programming languages are especially suited to writing programs that can be executed in parallel.
In addition to allowing programmers to write code at a higher level of abstraction, the concepts and models of modern programming languages have changed how software developers think. Good programming languages enable developers to write programs that have much greater expressive power and whose concepts are more directly linked to reality.
The future is multilingual
However, experience shows that the concepts, and with them the language, should fit the problem. There is apparently no general language that is suitable for all types of programs and problems. Every programming language has its advantages and disadvantages, and they are not equally suitable for every type of problem.
When your only tool is a hammer, every problem looks like a nail. However, a good software developer needs to have a toolbox with a wide variety of tools, and the tool has to match the problem.
Learning languages and learning how to learn languages
The ability to master several languages is becoming an important attribute of good software developers – especially when the different languages involve different concepts, models and ways of thinking. The ability to learn new languages, absorb new concepts and add them to the toolbox will be even more important in future than it is now.
Modern architectures such as micro services support this trend. Relatively small functional units and technology-independent interfaces enable a mix-and-match approach to programming languages and technologies, and they allow a suitable language to be selected for every task.
Of course, developers as well as companies will limit themselves to a certain number of languages, but diversity will increase compared to the present situation.
In short, there is no sign of a new blockbuster programming language. Instead, there will be several smaller programming languages. We can only recommend that developers take a look at various programming languages.
Of course, putting your money on the right horse is a matter of luck, but it's actually not all that important. The ability to learn new languages and absorb new concepts is much more important than being expert in a particular language, no matter which one.
About the author
Corsin Decurtins is the Chief Technology Officer with the Zurich-based software company Netcetera. He is responsible for technology strategy and development methodologies, advising clients and internal teams and he works as a software architect and engineer, and technical project manager. With over 15 years of experience, he has mainly developed in the field of Java EE-based information and transaction systems for secure and business-critical environments. Corsin Decurtins studied computer science at ETH Zurich and worked for several years as a research assistant.