What’s particularly fascinating is that when Java was first released, Windows had a near monopoly on computing, with few Apple Macs clinging on for dear life, and Solaris already on its way out on the desktop. (There was NeXT, which died shortly after Java’s release, only to be reborn as Apple – that story played out a lot better than Sun’s did.)
The idea of ‘write once, run anywhere’ was never known before Java came along; at least, not for compiled languages. (C had much fewer dialects back then, but still ran into incompatibilities and there weren’t good cross-platform compilers that supported Windows as well.) The idea that you could not only write portable code, but have it downloaded and executed on another computer across the globe without recompilation was a massive boost for the early adoption, and coupled with the rise of browsers and the internet, made Java an early darling in this era.
Unfortunately, the ‘write once, run anywhere’ didn’t always live up to expectations, especially when Microsoft stopped updating their Java 1.1.3 runtime in Internet Explorer, and started to add Microsoft specific classes instead. That lawsuit dragged on, by which time it may not have mattered any more.
The other key flaw was having a collection of security vulnerabilities in the browser thanks to Java’s ubiquitous presence and general ambivalence to being updated by the end user. By the time Applets became deprecated (and why you can’t run the example in the browser today) many CVEs had been raised against the humble Java runtime in the browser, a title taken over by Flash until its demise some decades later.
But Java’s early popularity and widespread adoption meant that it spread to the server, where it still reigns supreme today. We’ve gone from single-core, 32-bit systems running on Windows and (Classic) Mac, to multi-core, 64-bit systems running predominantly Linux and NeXT derivatives, all without missing a beat.
The majority of the language will still compile just as it did in the first
1.0 releases, and the majority of code written for those early days still
runs fine on today’s beefy JVMs – except a lot, lot faster. (The sort demos
still run at the same speed they were programmed to as there’s a
Thread.sleep with a fixed time in the code; if they were running at full
speed, you wouldn’t have seen the animation, even then.)
The language (and the bytecode) hasn’t remained static over the time though
– we’ve had Swing (formerly Java Foundation Classes or JFC) introduced in 1.2,
generics introduced in 1.5, the
invokedynamic bytecode added in Java 7
and subsequently lambdas in Java 8, with modules and others added by Java 11.
The GCs have grown as well, from the simple serial collector and mark-and-sweep,
to concurrent versions and multi-gigabyte concurrent collectors (now reaching
terabyte limits). Concurrent programming has become ever more pervasive,
and new language technologies are being added to the language a rate not seen
since the early days.
However, the thing that really makes Java shine is the fact that all of the language is available as open-source. Even in the beginning, the source was available for the core Java libraries (if not the JVM implementation) so you could debug into problems that occurred in your app without losing your place in a debugger. Now that the JVM has become fully open-sourced, many other companies are working on the Java language and the JVM runtime in order to make it bigger and better than before.
The last 25 years has brought a lot of joy to millions of developers and billions of users, including a formative part of my career. I started with Java’s early betas in 1995, helping a friend to learn the basics of object-orientation before it was cool (and perhaps subsequently, uncool). We wrote a crossword applet that allowed you to parse ASCII representations of a board and display them in a graphical manner, and allow you to type and fill in the crossword via a web page. Nowadays, of course every newspaper worth their reputation has got an on-line crossword with much the same thing; but this was in the days before Google and Wikipedia existed.
My career followed with becoming a Java developer, trainer and consultant; I started a business with a friend and rode the wave as people migrated from C++ to Java in their droves. (These days, everyone comes out of university already knowing Java and on-line tutorials and videos have made training a niche subject.) I then worked my way up and along Java, writing for InfoQ and many blog posts, as well as contributing to open-source projects like Apache and Eclipse. Indeed, my involvement with Eclipse goes back to the early days of working delivering IBM’s training OB73 and OB74 courses, and using Visual Age for Java followed by WebSphere Studio which was based on Visual Age’s technologies but made open-source in Eclipse in November 2001.
My Java career reached its zenith earlier this year when I became a Java Champion thanks to the support and kind votes of the other champions. It’s really not overblown to say that I owe my career and livelihood to a small language formerly called Oak or Green, and it will be fascinating to see what happens to it over the next 25 years of development. I’ve truly been Moved By Java.