Java has been around for a long time, and over the past few years it has undergone significant changes to keep it relevant. It is still the most popular programming language among developers, according to JetBrains’ State of Developer Ecosystem in 2019 report. But it may not hold onto that title forever.
While it’s still at the top of many lists of programming languages, other languages, like Python, are closing in on it. In fact, TIOBE predicts that in the next few years, Python will surpass Java (and C) as the most popular programming language.
And Python is not Java’s only competition. The rise of Kotlin has also taken some of Java’s share away, especially once Google started supporting Kotlin for Android development.
Java happened to be in the right place at the right time, similar to how Python now happens to be in the right place at the right time with the explosion of interest in AI and machine learning.
According to Rich Sharples, senior director of product management at Red Hat, when Java was created 25 years ago, it was designed with the network in mind, and had a lot of features for network communications. It also came about around the time that multiprocessor systems were gaining traction and it was one of the first languages to make use of those hardware advances without the developer having to do too much more work.
In addition to those features, it also had big backing in the industry, from Sun Microsystems, IBM and Oracle, which ultimately purchased Sun. All of these factors combined to make Java a highly successful language and a top choice for many developers for decades.
The reason that it has stayed so popular is because it still meets the needs of working across networks, Sharples explained. And of course, there’s also the fact that it is open source. “Pretty much anything interesting happening in tech these days is happening around open source. And it was relatively early in mainstream open source as well. So it’s checked all the boxes from a technical point of view,” he said.
Java was well suited to the environments of its time, but hasn’t really aged well as technologies change. Sharples explained that Java does a lot of “cool dynamic stuff,” but those sorts of capabilities aren’t really needed in technologies like microservices and serverless.
According to Sharples, when working in those types of environments, developers tend to just start fresh when they run into an issue. “If we see an issue, we see a bug, we just burn everything to the ground and then redeploy new containers with the latest versioning,” said Sharples.
So all of those dynamic capabilities Java has aren’t really needed anymore. “What you get is a lot of baggage that doesn’t really provide much value in those modern architectures…If you think back, Java was designed to run on big multi-process machines. You could pretty much guarantee that you owned the machine and you could run multiple applications for each JVM or app server. That’s just not the world we live in today. Now you get a slice of a slice of a slice of a virtual machine, or even just a function for a certain amount of time. So a lot of those capabilities bring a lot of weight and complexity and offer little value. So if you look at functions as a service, you don’t see Java mentioned an awful lot.”
But Sharples doesn’t believe Java is going away quite yet. He believes Java will likely still experience growth for many years, or even decades.
There are many projects that let Java thrive in today’s environments, such as Oracle’s GraalVM, which allows for interoperability in shared runtimes, and Red Hat’s Quarkus, which is a Kubernetes-native Java framework.
Mike Milinkovich, executive director of the Eclipse Foundation, which oversees Java Enterprise Edition (now Jakarta EE), also believes Java itself is going to evolve to support these technologies. “I think that there are going to be changes to Java that go from the JVM all the way up,” said Milinkovich. “So any new features in the JVM which will help integrate the JVM with Docker containers and be able to do a better job of instrumenting Docker containers within Kubernetes is definitely going to be a big help. So we are going to be looking for Java SE to evolve in that direction.”
Sharples also believes Oracle has done a pretty good job of “keeping the innovation going without breaking the stability.”
Oracle currently has several active projects focused on facilitating innovation for Java:
- Valhalla, focused on introducing value types to Java
- Panama, which is about updating the form function for Java
- Loom, which focuses on scaling Java
- Amber, which is focused on finding ways to simplify the language
- Metropolis, which is trying to see how much of the JVM can be written in Java so that both JVM and Java can evolve faster
“Despite the fact that we now have a feature release every six months, the harder problems that we solve have not somehow magically found a way to be crunched down into six months of work,” said Georges Saab, vice president of engineering for Java Standard Edition at Oracle. “So basically what these projects are about is having a place where we can work on these problems longer term. And the projects are encouraged to find a way to break down into smaller increments the sort of output and steps forward.”