The Big Four Languages
Over the last few years I’ve noticed a consolidation in programming language choice in commercial and open source projects. The software industry is always changing, but there seems to be persistent interest and investment in a few languages: JavaScript, Python, Java, and Go — the “Big Four.”
I started seeing the Big Four in a few places. The JetBrains State of Developer Ecosystem 2019 report lists The Big Four in its “Key Takeaways” section. The Hacker News Hiring Trends report for December 2019 has The Big Four as the first four languages in its “Top 10 Programming Languages” ranking (counting TypeScript alongside JavaScript). The 2019 StackOverflow Developer Survey has three of The Big Four at the top of its “most wanted languages” list, only missing Java. GitHub is also big on The Big Four, as can be seen on GitHut and in the analysis by Piotr Sroczkowski.
Why these particular languages? I think it’s due to several developments that occurred over the last decade or so.
- JavaScript was already ubiquitous as the standard language of the web platform, but with the release of Node.js (2009) it spread to additional domains: build tooling, package management, and server-side development. Node.js made it possible to build a web application entirely in JavaScript using only JavaScript tools. Esprima (2012) and Babel (2015), enabled parsing and transforming JavaScript from itself, unlocking futuristic language features and extensions.
- Python’s ecosystem built on an existing server-side and scientific computing foundation with Flask (2010) and scikit-learn (2010), enabling rapid prototyping of applications. Utilities like pip (2011) and requests (2011) helped make package management and HTTP requests easy. With the release of TensorFlow (2015), Keras (2015), and PyTorch (2016), Python quickly became the default choice for machine learning.
- Java entered the previous decade as a boring enterprise language. It took the release of Java 8 (2014) to renew community interest and the language started including much-needed improvements, releasing on a regular schedule. Java has maintained momentum by borrowing features from its more concise and expressive competitors and gaining innovations like GraalVM. While other JVM languages (e.g. Scala, Kotlin, Clojure) have attempted to displace it, they haven’t had much success.
- Go (2009) initially appeared as a vaguely systems-oriented language without an obvious application. It took Docker (2013) to establish Go as a viable language for infrastructure software. Terraform (2014) and Kubernetes (2015) helped further secure Go’s credibility and the language continued improving significantly while maintaining stability.
Will The Big Four stay stable? Maybe for a while. It’s possible to see how each of the languages may be displaced. JavaScript may drop out if Node.js declines in popularity and/or browsers gain a compelling alternative language. Python may fade if there isn’t a big enough domain where it can be greatly productive (it already lost the DevOps domain to Go). Java will stick around for a long time with C# as its only real rival. Go could be replaced by a language challenging its advantages — concise syntax, rich standard library, and fast native compilation — such as Kotlin, Rust, or Swift.
Thinking about the Big Four led me to consider whether there is a “Small Four,” a counterpart to the Big Four’s commercial, trend-driven, and utilitarian nature. The “Small Four” might not lead to a job or open-source fame, but it helps develop a deeper appreciation of software and keeps programming interesting. For me, the Small Four includes C, Lisp, shell, and a wildcard. C is a small yet powerful bridge between language and machine. Lisp is also small and powerful, connecting theory and application. Shell is a must for command line work, but it’s also useful for sketching out applications (sometimes faster than “real” languages). Finally, the wildcard is any interesting language outside of the Big Four, like Erlang, Prolog, Red, or Smalltalk.
The Big Four — JavaScript, Python, Java, and Go — dominates the software landscape today. Each language has a mature ecosystem optimized for specific domains, with minimal overlap between languages. It’s important to be familiar with each of the Big Four — they come up all the time in real-world software engineering. Of course the Big Four may change as trends shift, but its current momentum makes exploring alternatives unprofitable. If the Big Four is here to stay, software development may enter a period of stability and productivity where the question of what language to use is no longer important — you’ll always need more than one.