There’s not one week that passes without stumbling upon a post claiming language X is superior to all others, and offers you things you cannot do in other languages - like making your kitchenware shine brighter or returning a lost love. I don’t mind these claims because some features really open my Java developer mind to the limitations of what I’m using now - but in general, they are just bashing another language – usually Java.
For those that love to complain, here’s a quote that might be of interest:
There are only two kinds of programming languages: those people always bitch about and those nobody uses.
— Bjarne Stroustrup
That said, my current situation spawned some thinking. I was trying to migrate the Android application I’m developing in my spare time to Kotlin. I used Android Studio to do that, for which JetBrains provide a migration tool through the Kotlin plugin. The process is quite straightforward, requiring only minor adjustments for some files. This made me realize the language is not the most important issue, but rather the tooling is. You can have the best language in the world – and it seems each person has his own personal definition of “best” - but if the tooling lacks, it amounts to nothing.
Take Scala for example. I don’t pretend to be an expert in Scala, but I know enough to know it’s very powerful. However, if you don’t have a tool to handle advanced language features, such as implicit parameters, you’re in for a lot of trouble. You’d better have an advanced IDE to display where they come from. If you go beyond languages, the same can be said about technologies such as Dependency Injection – whether achieved though Spring or CDI or aspects from AOP.
Another fitting example would be XML. XML is still used in the so-called enterprise world. However, beyond a hundred lines of code and a few namespaces, XML becomes quite hard to read without help. Come Eclipse or XMLSpy and presto, XML files can be displayed in a very handy tree-like representation.
Successful languages (and technologies) arrive with tooling. Look around and see for yourself. I don’t pretend I know which is the cause and which is the consequence: are languages successful because of their tooling, or are tools constructed around successful languages? Perhaps it’s both…
Previously, I didn’t believe Kotlin and its brethren had many chances for success. Given that JetBrains is behind both Kotlin and IntelliJ IDEA, I believe Kotlin might have a very bright future ahead.