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.