tecosystems

The Three Characteristics of Fast Growing Programming Languages

Share via Twitter Share via Facebook Share via Linkedin Share via Reddit

Victorinox Swiss Army Knife

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.

  • Assimilation:
    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.

    TypeScript is perhaps the best example of this. A superset of JavaScript that offers optional type safety, TypeScript can present unique and differentiated features to developers – while operating side by side with what is by our measure the most popular language in the world. This makes the adoption of TypeScript within a given enterprise far less controversial than an incompatible language would be.

    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.

  • Security:
    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.

    TypeScript in particular, as mentioned, has benefitted from this approach, being able to present itself to developer and executive alike as JavaScript, but with some security baked in. Even Kotlin with its Null Safety feature has benefitted from the growing emphasis on secure development in some cases.

  • Versatility:
    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.

    And while it would be incorrect to solely attribute JavaScript’s popularity to its versatility, the language’s ability to traverse from the front end of an application to the back, beginning with the introduction of Node.js in 2009, opened up entirely new vistas for the language. It would be enormously popular even absent that back end presence, but that has been a selling point both for developers looking to learn the language and enterprises considering adopting it for better than ten years now.

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.