Software development industry evolves. New technologies and design approaches are born. Is it something that drives us towards creating new programming languages?
My colleagues periodically blame the industry for too much of unnecessary newness. We tend to think of a programming language as of something that should be deep-rooted and persistent like math calculus or a spoken language. Such an observation may sound fair. If we lack new first-rate engineering ideas, why should we create new branches of the tech evolution for the sake of marketing hype?
We know that when a language is computationally universal or designed to be “a Turing-complete”, it basically means that any piece of algorithmic software can be implemented by it means. Almost all languages we know are like such. We also got to a comfortable level of abstractions expressiveness when we map real-world domain models to programming structures. So why do we need any more of different languages within the same paradigm? Isn’t it natural to develop and polish functionality of a single language instead of bringing more alternatives?
What’s important is that we shouldn’t really treat a programming language as something fundamental that is to get crystallized into a perfect shape and to be a universal fit to all software development needs. It’s not a hammer and nails, which’ve remained the same for ages. We already have this analogy in computing: transistors and integrated circuits of underlying hardware.
I think the point is that it’s beneficial to have languages come and go. The cadence isn’t to be too short, some languages will still be around for decades. More important it to look at this as a natural process. We create communities and ecosystems around new programming languages. So even repacking an old idea may do a great business here.
It’s something of a cultural phenomenon rather than something that is solely technological. A professional community should periodically reinvigorate itself by switching to a new more fertile ground.
I am confident that nothing could be as important as people which are energetic and united around a new tech. Everything else is a positive side-effect:
- Getting rid of legacy restrictions
- Placing existing ideas into a simpler setting
- Introducing new language features and syntax amplifications
Take the example of Kotlin having tremendous triumph as a Java successor. It’s JVM-based so effectively anything it has could be introduced to Java with the same performance implications. But considering JetBrains ownership, which is a company known for developing top-notch IDE software and advocating developer calls, it rapidly became well received by most enthusiastic parts of Java community.
Go language is built by Google and combined some best features known before but in a new and easy-to-use setting. Another example, Rust is increasingly popular because developers love it for idiomatic safety and conciseness.
A strong new community implies the following points in terms of a project trajectory:
- Fresh blood brings more motion into development process. People connected by craving for the new are creative and motivated
- Supportive community builds up-to-date ecosystem and knowledge base
- We have a wealth of experience with other languages to remix efficiently
There’re risks and tradeoffs as we bet on a new tech. We must always assess what forces are behind a new product. Do the language owners have resources and motivation to push it further? Clearly it’s distressing to fail along with someone else's experiment.
To sum up, recent programming language does not necessary bring a great deal of new features. It’s quite a rare occasion that a new language embodies a newborn concept. Like phoenixes, development languages will die and be reborn with the same features repacked. They rather express old things with new words but they’re being marketed in a way that is attracting active and concerned professionals. As decision-makers we should take advantage of energetic and motivated communities.