Imagine it's 1995. Python is 5 years old but feels like a toy, COBOL is showing its age, functional languages like OCaml and Haskell feel like they are in full R&D mode, so C and C++ rule supreme. A deep sentiment of settlement is hovering over the industry of software development .
Then Sun Microsystems releases Java, and takes the world by storm. Let's analyze how it got its popularity and maybe this way we can predict where it's going.
Write once, run anywhere
The biggest promise Java brought, was made possible by what at that time was an absolute innovation. An intermediary representation called bytecode would run in a virtual machine (JVM) that would abstract operating system interaction, so developers would obtain platform independence. Not sure if right away, but Java delivered big time on this promise.
Object oriented programming
Once seen as a good programming paradigm, OOP was taken to the Moon by Smalltalk, and then to Mars by C++ and Java. It's a charming concept, because it promises modularity. And charmed we were, some still are.
Automatic memory management
In times when the only serious challenges were C and C++, Java promised and delivered on garbage collection. You would never deallocate memory again. Beginners would rejoice because never again they would be able to ruin a whole system with their memory management naivety.
Soon after the static Web 1.0 boon, browsers wanted to include Java to allow developers to create more dynamic applications. Turned out to be a failure, but anyway Java saw a big rise in popularity.
After becoming the go-to language for enterprise-level system development, Java 5 was released and introduced Generics, a way to parameterize functions and classes with types.
Java Enterprise Edition
To solidify its position in the enterprise world, Sun/Oracle introduced Java EE, some additional APIs that were meant to standardize everything from dependency injection to data access to messaging systems to RPC.
Because JEE was hard to configure and hard to use, frameworks popped up all over the place, and the highest ranking one is Spring Framework. With an opinionated take on how to wire-up different parts of your application, Spring easily overtook JEE in popularity, and hasn't taken the foot off the gas ever since. Really felt like spring after a dark long winter. Spring Boot specifically, makes a delight out of the experience of starting a new project.
With the crazy popularity and long term stability, serious work was being done under the hood to tweak the performance of the JVM, and it became one of the fastest languages, even competing with C and C++ in some domains.
Java 7, 8
Java 9, 10, 11
The rennaissance of Java is coming. The language's architects are starting to pick up language features from left and right. Java 8 borrows from functional languages and has first class functions, even though you still can't declare standalone functions. Modules came in Java 9, and local type inference will arrive in Java 11. Late, but better than never. There are plans to introduce pattern matching as found in OCaml and Haskell which would be a great expressivity feature. If they introduce non-nullable types in the future, Java would have an OK type system, and its huge ecosystem would become even better.
As Oracle kept investing and Java's ecosystem, they created Graal. Graal is a polyglot VM which brings huge benefits. You can run almost every major language on it, and the most important, AOT compilation. Meaning you would get optimized executables like you would get from Go. This is a great way to get Java into the top position for cloud infrastructure technology.
As a conclusion, Java's future is bright. It is not there yet in terms of modern features, but it seems like it won't be long. Any novice/experienced programmer would benefit from learning it, as jobs are at an all-time high, and many production systems are written in Java. The ecosystem is huge, performance is great, developer experience is improving constantly.