Programming languages go through cycles of adoption. A nice visual timeline of popularity as measured by TIOBE shows Java dominant since the index began in 2002, with C showing close tracking and resilience throughout, and with C++, Python, and VB.NET falling into the next cluster that formed through 2018 at half the percentage rating. Other metrics, such as the RedMonk Programming Language Rankings (which measures number of projects on GitHub) shows JavaScript, C#, PHP, and Python crowding around Java at the top.
There have been two major pressures on Java. The greatest test has been cloud native computing, which has knocked aside the traditional Java EE monolithic architecture (despite being service-oriented and distributed — its monolithicness is related to the degree of coupling between components). The other pressure has stemmed from the rise of Python, used as both a teaching language of choice in colleges and the primary programming language in data science/engineering and machine learning.
RELATED CONTENT: Java 11 delivers high-quality features at speed
The stewards of Java at Oracle have long recognized that Java needs to change to remain relevant as new technology unfolds. A good example is the modularization of Java in JDK 9, which radically transforms deployment sizes. The latest change with a six-monthly release cadence allows Java to move faster with new features, while at the same time reducing pressure to get a new feature into the next release (because the next window is not a two to three year wait), so helping high-quality production.
Oracle has made a series of important changes to Java: Java EE has been migrated to the Eclipse Jakarta EE project, licensing has been consolidated around GPL, and Oracle has donated proprietary features from its JDK to the OpenJDK, effectively making one JDK. And it offers a long term support model available for a minimum of three years, staggered around certain releases. These changes taken together reflect a response to the challenges of making Java a modern cloud native language, where changes happen fast: taking Kubernetes as an example and flagship of the cloud-native computing world, its code base (written in Go) has changed 95% in the last three years.
It was fashionable to call out whether Java was dead some years ago; I was skeptical because Java is not just a language but a platform of many languages around the JVM. I believe the changes taking place in the Java community today will give the language/platform a further lease on life, but one can see other languages bubbling under: Go and Swift are highly modern, Python will continue its trajectory in the science and engineering world, and the fragmentation in the user interface is anyone’s call, with JavaFX only just still in the mix (now run by an open community). For now, advising enterprise decision makers, Java is a safe choice.