the duke is back, or i find i can’t do without java

Back on 14 July I wrote a post titled “no more java“, in which I swore off the use of Java for everything new and to “walk away from any Java programming opportunity.”

It turns out that there is, practically speaking, no way for me to do that. As much as I despise Oracle, the use of the language throughout the last 21+ years of my software engineering career (Java officially turned 20 in 2015) isn’t something I can just blithely walk away from. As I came to discover over the last 60 days, while there are a lot of very good programming languages besides Java, there are some things for which Java is the better fit, warts and all.

That’s not to say I didn’t find the other languages I looked at as less than Java. I found them all quite compelling in their own rights. The languages I did go back and look into included Python, C-Ruby, JavaScript (via node.js), the latest stable version of C++ (C++14 via gcc and clang), Google Go (up to 1.7) , and Rust (up to 1.11). Notable by its absence is Swift. I chose not to dive into Swift because it’s still only on one platform (OS X, soon to be called macOS) and because it’s still in a state of flux as it transitions to Swift 3.

All those languages I did look deeply into were quite compelling in their own rights and offered powerful solutions for different classes of problems. And while they tended to overlap some features and capabilities of Java, they could never replace Java for the types of software problems I like to work on. And please note, when I speak of the languages I also speak of the development, build, test, and deployment tools that wrap a language and help make it a powerful problem solver.

I don’t consider my two months looking elsewhere a waste of time; far from it. It was an eye-opening trek into languages I would have never taken otherwise, as well as a deeper dive into some languages I’d had considerable experience with before, such as Python and Ruby (in fact, working with Python 3.5 was almost like re-learning the language, as the last version I’d touched was 2.4). With Java I’d grown a bit stale in my thinking, which is never a good thing. Looking at other programming languages fosters opportunities to expand perspectives and offers alternative solutions to tough problems for which Java might not be the best fit. It also illustrate ways to weave these “new-ish” solutions back into new and existing Java solutions.

And finally, by taking two months away from my Java work, I discovered when I came back that tough problems I couldn’t quite solve before were suddenly solvable, some of them quite easily so. I really needed a break away from Java.

So it’s back to Java, or more precisely, the Java Virtual Machine (JVM). For with the JVM I also have Scala, Groovy, Gradle, and JRuby, not just Java 8. I’m using the Actor pattern Futures and Promises and the Parallel Collections Library supported by Scala for modeling and simulation, while using Groovy and JRuby to solve unique problems while calling down into the Java libraries, especially for UI bits. And finally I’m getting the hang of using Gradle as my primary build, test, and deployment framework. I am so tired of Ant and I’m no fan of Maven either.

I need to do this again, at least once/year, to maintain a clear mindset and fresh perspective. I look forward to my next walk-about through the programming language landscape.

no more java


I have been a Java user and promoter since its initial release in 1995. I’ve lived through, and worked around, all the issues that’ve cropped up over the years, especially during the dismal period around Java 6, before Sun was purchased by Oracle. Since then Java 7, and now Java 8, have been released to address limitations, advance the language and try to fix security issues.

But no more. I have uninstalled Java on every computer and every VM I own. I don’t intend to write another line of Java, and I will walk away from any Java programming opportunity.

There’s a lot of reasons for me to take this stand, but the two that finally pushed me to do something are a security issue and Oracle itself. Let’s talk first about Oracle.

Oracle bought Sun and all its assets in 2010. Those assets included Java and a number of open source projects, such as Open Office and MySQL. Oracle’s stewardship of both was so bad that both were forked into LibreOffice and MariaDB, respectively. Fortunately, or unfortunately, Oracle managed to put just enough time, money, and energy into maintaining Java that it continued on to Java 7 and Java 8, with Java 9 just over the horizon. On the surface Oracle sounds like a responsible steward for Java.

But Oracle isn’t a responsible steward. Oracle doesn’t care about the language and its evolution as an open platform, only how much money it can make from the language itself. They underscored this with the multi-year lawsuit against Google over Google’s use of Java API’s in Android. I’m not fan of Android, but I appreciate how Google has prevailed against Oracle’s repeated lawsuits and appeals. They should have because Oracle’s suite is all about Oracle’s greed. If it were just a fight between two tech titans then it wouldn’t be that big a problem. Unfortunately for us all the problem with the entire legal process those two have been embroiled in is the disastrous decision issued on May 9, 2014, where the Federal Circuit found that the Java APIs are copyrightable. This is a blow to the very foundation of software innovation, and all because Oracle wanted a multi-billion payday out of Google for Google’s successful implementation of Java within Android. As software developers and innovators, we are now all at risk, and I will not work with a language or a vendor that has created that incredible risk. All that time and money Oracle poured into suing Google would have been far better served enhancing Java. But Google won’t do that because, as Ars Technica recently wrote, Java “isn’t currently printing money,” or enough to satisfy their overarching corporate greed.

The second reason is security related. Java, along with Flash, has been a cesspool of security vulnerabilities for years, vulnerabilities that Oracle has rather capriciously decided to fix (or not). On July 4th Heimdal posted a security alert about a Java-based zero-day exploit called Adwind that installed a RAT on any platform (Windows, Linux, OSX, and Android) that runs Java. That was the tipping point for me.

This exploit, along with Oracle’s behavior towards Java in general and Google in particular, convinced me to walk away from Java. That means: remove Java off of everything I own and to never write another line of Java. I will neither use nor purchase any Java-based tools either. No actoins to support Java.

From now on it’s any language but Java.