What Does Java Do Best?
The first public implementation of Java was released in 1996, when the Nintendo 64 was at the cutting edge of game console technology and 41% of web users regularly accessed AOL.com. The intention of its creators was to provide cross-platform functionality for applications distributed via the then-nascent World Wide Web- known as applets– a feature completely removed from Java in 2018. Yet despite the removal of its original use from the language, Java remains the #1 programming language in the annual TIOBE index, a position it has held with only brief interruptions from C since the beginning of the 21st century.
Development, and Silicon Valley in particular, are often accused of fashion-driven development– that is, an obsession with shiny new things and “hip” paradigms. Yet Java, the jean-short wearing uncle of the software world, represents the #1 language on job offerings in the Bay Area. In the rapidly changing world of software development, long-lived technologies typically have clear and specific themes justifying their continued use: C is efficient, Fortran is supercomputer-fast, and floppy disks were (until October) the preferred technology for nuclear warfare because they were hard to hack. But Java’s longevity is slightly harder to explain, especially because its use cases have changed so much over its lifetime. Several languages have arisen that attempt to address perceived problems with Java, such as Scala. But these have failed to dislodge Java at the top of the JVM ecosystem (though Java’s place in Android development may depend on the outcome of an ongoing lawsuit). It seems as though every few years analysts and pundits will declare large parts of Java obsolete, and programming forums frequently witness Java “roast sessions.” Python has also made inroads as a broadly applicable language, with its friendlier learning curve and less verbose syntax cited as reasons.
Not only has Java endured the test of time, it has done so decisively, and frequently leads or nearly leads all programming languages by number of job postings, questions on StackOverflow, and GitHub repos.
What accounts for Java’s longevity and durability, despite well-understood drawbacks? And what criteria would lead a developer to choose Java as the best language to solve their problems? While every Java shop may have its own reasons for choosing Java, there are some underlying themes that stand out, which touch on both technology and behavior.
The top 5 reasons Java Developers on StackShare gave for choosing Java refer, in various ways, to the advantages Java has gained from its wide network.
In the language of venture capital, Java has well-established network effects– that is, the increasing benefits to scale as more and more users sign on to a product. The deep background and robust community-developed libraries mean that a Java developer is likely to find an answer for any question, and a solution to most any problem. The multitude of open-source libraries, many of them developed by community members and supported by Oracle, give Java developers a wide array of options to tackle various use cases.
The benefits of the JVM have extended beyond Java itself, with languages such as Clojure, Scala, JRuby, and Groovy all built on the same underlying technologies- and each of these can optimize for specific problems in ways that Java may not be able to. The large amount of software developed on or closely related to Java, including Big Data applications such as Hadoop, also add important tools to a developer’s arsenal. Critically, though, none of these technologies have replaced Java; rather, they are often seen as component parts of the JVM ecosystem, with Java firmly in the center.
Java’s wide reach has created a positive feedback loop that has been one of the underlying motives for innovations in the language itself. Long-running developer complaints about boilerplate code influenced the design of Java 8. The rise of cloud-based development has proved a challenge for Java, as some fundamental characteristics of the language seem at odds with modern cloud architecture. Features of Java that were created as solutions to yesterday’s problems, such as large package sizes containing a vast number of libraries, large memory allocations, and language verbosity can clash with the goals of developers building lightweight microservices set to run in a container rather than a bare-metal server. These changes arguably have pushed the last few releases of Java to be faster, more lightweight, and more optimized for cloud infrastructure.
Java has been able to both adapt to new frameworks and to retain access to legacy code, which has allowed organizations using Java to change incrementally rather than dramatically. Even risk-averse organizations need to innovate when new problems arise. Banks are notorious for maintaining legacy systems, but the world of digital banking has profoundly changed in the last two decades. This may explain the particular popularity of Java in the financial sector, since updates can be made without necessarily breaking old code.
In our recent interview with Georges Saab of Oracle, he spoke at length about Oracle’s objectives to move to more frequent releases of language updates in order to best serve the needs of the development community. Since Oracle rarely introduces breaking changes to Java that would make legacy code unworkable, there is a careful balance between not conflicting with old features and introducing new innovations that can solve today’s problems. Anyone who has experienced headaches in the transition from Python 2 to Python 3 can surely appreciate not having to rework legacy code.
To return to our original question, what does Java do best? It turns out that this may not be the right question to ask, as there is never only one problem to solve in development. There may be a clear choice in several circumstances- some technologies and languages are “the perfect fit” for a project and the developer’s skillset. Java’s big advantage seems to be, rather, that a developer can be confident there will be solutions, or libraries, or documented examples for any issue they may find. They can be reasonably sure they can find talented Java developers to hire. And they can be reasonably sure that Java will be supported well into the future, and that the language can be robust to changes in the industry. These are advantages that are hard to quantify, but very real when making forward-looking decisions.
In ecology, animal species often fall into “generalist” and “specialist” categories- and both thrive under different environments. “Specialists” maximize efficiency at certain tasks under certain conditions, while “generalists” favor a broad range of less developed skills. Anyone watching specialists can understand intuitively why they thrive; Giant Pandas, for example, evolved complex digestive systems to handle eating massive amounts of bamboo. Brown bears, by contrast, lack these kinds of specialized features distinguishing them from other bear species, but seem to handle a variety of environments and diets.
Java has survived several sea changes in the software industry since its inception, and it has proved robust to a variety of applications. To use the metaphor of the bears, Java would be a brown bear, not the best at any one task, but with the broadest range and resiliency to change. Other languages or frameworks that were hyper-specialized to the software design paradigms of their day (sorry, Flash) often seemed dominant at the time, only to implode when confronting change. As mentioned at the beginning, some specialized technologies do enjoy popularity for a long time, because their use cases aren’t tied to the fashions of the day but to evergreen needs, such as pure speed or minimal abstraction.
There is no way to narrow down all the reasons Java persists, and continues to evolve. The release of Java 13 brought several new cloud-oriented features to Java, and Oracle Engineer Georges Saab spoke with SE Daily at length about the future-focused mindset in pushing the language forwards. Third party developers, such as GraalVM Quarkus, are also working to push Java in entirely new and exciting directions. All signs indicate that Java will continue to be a valuable tool in a developer’s arsenal and a solid choice for new learners.