The justifications for creating a new programming language vary. If you’re a computer scientist like Mary Hawes or Grace Hopper, your concern is economics: the cost of programming generally, and for porting applications to new hardware platforms specifically. If you’re Dennis Ritchie or Ken Thompson, your issue is that the prior letter of the alphabet is too slow. Or if you’re Rasmus Lerdorf, you want something simpler to maintain your homepage so you write a surprisingly cromulent language that still powers wide swaths of the public internet.
The intent, in turn, informs the execution. COBOL is human readable, C is fast and PHP is, or at least was, simple.
None of which guarantees anything. As engineers need to be reminded regularly, not only doesn’t the best technology win in every case, it doesn’t win in most cases. The quality of the technical implementation is but one among many factors in the adoption – or lackthereof – of a given piece of technology.
A new programming language, therefore, can be designed with the best of intentions, it can be backed by well resourced organizations, it can be exceptionally well engineered and yet it can still see minimal interest and adoption. This is more true today, in fact, than it’s ever been because the rise in developer importance has led to widespread language fragmentation which has in turn created enormous competition for programming language attention, visibility and traction.
While there is no way to predict success for a particular programming language, however, there are three characteristics that languages that have outperformed their counterparts on the RedMonk language rankings over the past eight years have had in common. If you’re advocating for a current language or considering whether to write a new one, then, these patterns are worth considering.
The majority of programming languages are stand alone pieces of software. The syntax is unique, or at least relatively so. Each has its own compiler and associated tooling, its own community and so on. Several of the fastest movers on our rankings in recent years, however, are languages able to seamlessly intermingle with large existing language communities.
In similar fashion, Kotlin’s major boost came from its approval as a first class citizen on the Android platform. But its vault from the distant back half of our rankings to a Top 20 language was not fueled by its usage on the mobile platform alone. Instead, Kotlin’s ability to intermingle with what up until recently we ranked as the second most popular programming language in the world has allowed it to flow into enterprise settings like water. Consider that several vendors tried to capitalize on the popularity of Swift – an enormously popular language thanks to its role as the basis for iOS applications – and push it into the enterprise. These efforts, by and large, have failed. Webinars about how to use Kotlin with Springboot or otherwise mainstream enterprise frameworks, however, abound.
Speaking of Kotlin, it’s worth mentioning that that transaction goes both ways, in that while Kotlin – along with Clojure, Groovy, Scala et al – compete with Java the language, all of them leverage Java the platform. So while Kotlin’s competing with Java in one dimension, it is being absorbed by it in another.
Embrace and extend has been a technology trope for years for a reason, and the reason is that it works.
Like insurance, security is generally viewed as a necessary evil. Something that has to be done, but that is merely unsexy work in a best case scenario and more likely to be both tedious and miserable. As enterprises have shifted more and more of their business to digitally based models, however, the importance of security from an application development perspective skyrockets.
Its importance notwithstanding, security is never going to be something that a majority of developers get excited about and want to spend cycles on. If a language is able to build in some security, however, if only to protect developers from some particular subset of vulnerabilities, that is an increasingly attractive feature – particularly if it doesn’t require too many compromises.
Lastly, one of the things developers prize, and to a lesser extent the enterprises they work for, is versatility. There are many instances of successful specialized languages, of course – R being perhaps the most obvious. Languages that have the ability to traverse a wide range of use cases, however, offer enormous value to developer and employer alike.
Perhaps the best example of this is Java. Originally created to provide software for cable set top boxes, the language went on to storm the world as an industry standard for enterprise applications. For years industry observers and analysts would write reports about how “Java Was Dead.” This “dead” language would later go on to serve as the foundation for everything from Android’s application ecosystem to the majority of Big Data software infrastructure. With so much competition from more recent languages that were developed in reaction to the perceived shortcomings of Java and other long time stalwarts, one of the more common questions about our language rankings has been concerning Java’s ability to sustain its performance even amidst all the predictions of its imminent demise. There are many answers to that question, inertia among them, but the language’s versatility is perhaps the most accurate. It keeps finding new workloads to run, and in so doing has kept itself relevant.
Python, the new number two language on our rankings, has never had the profile that Java’s had, but the breadth of use cases has not only sustained its performance but grown its usage even as one time competitors like Ruby have fallen off. From VB-style local apps to cross-platform developer scripting requirements to data science, the combination of Python’s accessibility and variety of potential entrypoints have ensured that Python is at least as relevant today as it was a decade ago.
To be clear, if you look across the Top 20 languages that we’ve ranked, both now and in years past, you will find many languages that don’t fit one of the above patterns. But given how difficult language growth is to achieve today, and the fact that the fastest growing languages we’ve tracked with the exception of Swift exhibit one of these tendencies, they’re certainly worth considering when trying to move the needle around a particular language.
Particularly if, like TypeScript, you can incorporate more than one at the same time.