It’s been a long trip for Java, a language that began as the lingua franca for the box on top of the television set in the days when TVs didn’t come with Roku or Chromecast built-in. Then Java was going to own the World Wide Web by animating the browser before JavaScript came along and elbowed it out of the way.
Java ended up finding a niche in the server farms where there were once enough different chip architectures and operating systems to make the “write once run anywhere promise” compelling. And in those server farms Java has lived on, a favorite of enterprise IT shops addicted to reliability and developers with a love of strong typing.
In the meantime, JavaScript in general and Node.js in particular have challenged Java on the server, using their high throughput and thread-free speed to take over a huge chunk of the traffic on the web. Node has captured the imagination of the newest server-side programmers by offering not only speed and resource efficiency but also the simplicity of code that runs on both the client and the server.
Yet despite the rise of competition, Java continues not only to survive but to excel. Many of the teams tasked with developing microservice architectures are continuing to use Java. A major reason must be because the technology is battle-tested from years on the front lines parsing HTTP requests. Sun created a rock-solid virtual machine, and Oracle continues to nurture and support it.
Another reason must be the continued evolution of the language. Java 8 offers solid support for the functional languages like Scala and Kotlin. The JVM is now a foundation for many of the best experiments in computer language development. Dozens of new languages can compile down to Java byte code and link up with each other to make complex projects work together. Many of the stacks running smoothly on a JVM may be built by a mixture of Java and a number of other languages.