Reflecting on Java's 20-year anniversary last week, the easiest future prediction to make is that someone will be suing someone else about Java in 2035. I assert this not just for the schadenfreude (are we still using that word in 2015?) but because it is true: Java has been a frequent presence in the courts since its launch in 1995.
Duke, the Java mascot, made his first appearance in a US court of law in 1997, when Sun sued Microsoft for breach of contract. It happened again in 2010, when Oracle filed a patent-infringement claim against Google, and then followed up with a copyright claim over published application programming interfaces (APIs).
The swirl of litigation around Java bring up of a couple of key facts: First, that different parts of the Java community see Java technology in different ways, sometimes to the point of almost complete disconnection. Depending on whom you ask, Java is a programming language, a platform, a library, an architecture, a virtual machine, or a family of different bundles of each of these. On the business side, it's also a brand, an academic tool, and a patent collection. Whenever you hear someone -- especially me! -- talking about Java in the abstract, make sure that you clearly understand which of these ideas about Java is being discussed.
Second, Java's prominence in the US legal system is one indicator of its importance. Whatever your own relationship to Java technology, it matters enough to the larger world of human affairs to be worth fighting about. Even if Java's stature wanes as much over the next two decades as, say, Fortran's has over the previous two decades, I predict that Java will remain a widely-used, indispensable programming platform and language.
What Java's past tells us about its future
Two classical parables help clarify Java. As I noted above, Java is very much the elephant in the blind man's parable: In 2015, Java feels very different to an Android developer of children's games than to an enterprise programmer maintaining mission-critical ERP (enterprise resource planning) applications. When it was first released in 1995, Java's most important features included the following:
- A relatively liberal license: Remember that it was almost three years later that open source became a term of art.
- Portability: Moving software between Windows, early Macintosh operating systems, and a dozen different Unix variants was hard in the '90s; Java changed that.
- Rigorous object-oriented syntax: Unlike other languages of that time, Java was designed for object orientation.
- Security: Java eliminated the memory violations that were epidemic in C applications.
- Performance: Java applications quickly surpassed the average attained by Perl and other languages with claims to portability and safety.
- Built-in graphical user interface (GUI) toolkit: It's hard to express how radical it was in 1995 to conceive of portable GUI development, let alone portable GUI development without a licensing fee.
This list of Java's most laudable features in 1995 might look mundane today, but the technology was well ahead of its time; so much so that several of these features remained controversial for years. Well past the dot-com collapse, software engineers seriously argued about whether a language with automatic memory management or a virtual-machine architecture -- let alone both! -- could ever perform adequately when applied to enterprise-class problems.
One of Java's greatest accomplishments over the last two decades is to have successfully overcome many of the debates it spawned. Java itself is one of the proofs that mainstream programmers are better off leaving memory management to the compiler; that a portably-implemented language can also be swift; that serious organizations will rely at least in part on software for which they do not pay; and that even GUI elements can be programmed portably.
Java's subtler strengths have also been slower to be recognized. As an example, the first releases baked in Unicode, and they did so better than essentially all competing languages before or after. Unicode received less attention than it deserved in the mid-'90s, and many observers are only now catching on to the advantages of this universal standard for programming that's relevant across the globe.
Java platform innovation didn't end in 1995. Since its early days Java has made several order-of-magnitude leaps, from research project to desktop competitor to backend workhorse to, more lately, mobility language. Just as hundreds of millions new consumers began to use Java on their mobile handsets, soon billions of networked devices will rely on Java-coded software.
How Java enables the present
This brings us to the second parable crucial to understanding Java: Heraclitus's river, or if you prefer Theseus's ship. In both parables the underlying theme is the paradox of essence: that even as its constituent water droplets flow past at each instant, the river itself persists through time. Similarly, almost all of Java's basic components have turned over in the past 20 years: Developers today use different JVMs, supporting libraries have mushroomed, and of course Java's target operating systems are light years away from what we were using in 1995.
Recall that Java was designed for television set-top boxes, which were proprietary embedded devices. Its first wide use was in Internet applets as a way to introduce dynamic elements to early HTML. Then it moved to the enterprise as a preferred medium for development of important "client-server" applications, and to college to teach the next generation of developers. In 2015, Java is evolving to become a serious real-time platform, making its way into medical devices, transportation equipment, and other safety-critical roles. Java is also well positioned to become the language of IoT.
One indicator and cause of Java's ongoing success is its place in schools. Java is widely used in classrooms both to introduce programming and to convey computer science, and it is also the vehicle for academic research that has improved garbage collection, compilation, encryption, networking, and many other practical computations.
Future focus: Java in 2035
In 2035, I foresee developers putting in plenty of overtime to solve the looming 2038 datetime crisis. Java specialists will continue to fuss about new variations for the tools we use most -- new expectations for logging, for instance, haven't slacked at any time over the past 20 years, and I don't expect these eternal disputes to evaporate in the coming decades. Nigeria and Indonesia will be notable centers for Java talent. We'll also have plenty of surprises in the years ahead. But even if what we call programming looks unrecognizably different in 2035, a healthy portion of it will still be built on Java.