The more I code the more I’m convinced that the quality of tools determines the value of a programming language. Some languages, such as Haskell, have wonderful and elegant design and are a joy to write but mostly remain hobby languages. Other languages, on the other hand, such as Java, may be rote and uninspired but have a massive amount of supported tools that allow them to keep growing. Unless we’re exploring or playing around the ultimate goal of every line of code we write is for it to be deployed to production and solid tools allow that to happen. Unfortunately, this also leads to a “rich get richer” scenario where a popular language continues to grow with an evolving and more compelling toolset rather than on any individual merits. And while the result is a better experience than it was before these new tools other languages may not have even gotten the chance to succeed.
Java grew alongside the JVM which is the foundation Scala and Clojure built on. They brought a nice, functional touch to the JVM which wouldn’t have happened without Java’s success - and Java 8 itself has embraced some of these functional elements.
JavaScript is another great example. A decade ago jQuery was the way front end development was done. Until it was supplanted by Angular. Until it was replaced by React. One of the major reasons for these shifts was the introduction of tools that improved the build process. Without webpack or browserify it would be possible, but definitely unpleasant, to work in React. In this case the tools evolved alongside the language with each one feeding of the other. And if there are some adjacent benefits introduced - such as CSS preprocessors and various JavaScript supersets - that’s even better. As I write this I’m starting to think that it may even be the tools themselves that drive the growth of a language since they are in fact its truest customer.