I have to admit that part of my general antipathy toward Java is a form of envy. Don’t get all excited, Java fans; it’s only a small part, and “envy” might not even be the right word. The Java language certainly has its flaws, as others have written, but every language has flaws and I could probably forgive Java’s. The Java programming environment – the vast array of libraries and frameworks and IDEs and other crutches, seems more flawed and less forgiveable. The Java culture, with its at-best-misleading claims of “write once run everywhere” and “as fast as C” and its endless swirl of enthusiasm for patterns and “agile” and every other fad to come along, is worse still. What’s worst of all is the way all of these things get bundled together. Both the dependency structure and the culture seem to preclude picking out and benefiting from the good bits while leaving the bad bits behind. I’ve yet to meet a Java programmer who even seemed to try. To be a Java programmer, it seems, means to dive headlong into the entire Java ocean and leave anything else behind. That kind of enforced isolation from the broader world is a defining characteristic of cults, by the way.

So why do I care, and why do I admit to envy? Because there is some cool stuff that happens in the Java world. For example, I recently came across Structure101. Please, go read what they have to say about architecture extraction and enforcement, and especially about complexity debt. Set aside twenty minutes or so and watch the videos. Their analysis of the problems that occur in large-scale software development rings very true to me, and I think they’ve created an awesome tool to help address those problems. So what’s the problem? If you go to their “versions and pricing” page, you’ll see it’s only for Java. Both the problem and the solution are completely language-independent, but their implementation is Java-specific. I don’t blame Headway for this, or the other vendors (e.g. for static code analysis tools) I’ve seen make the same decision. I’m sure their choice is based on rational analysis of the market. I’d love to be able to use such tools. I can’t, hence the admission of envy. I resent the Java cultists for that, not because Java itself has no value but because of the opportunity cost they’ve imposed on the entire industry. Those grapes aren’t sour. I’m sure they’re very sweet, which is exactly why putting a fence around them is so offensive. Because of the “all or nothing” nature of the Java world, lots of cool things that could benefit the broader programming community – from C to Python to Erlang to Clojure – never will. Theirs is a fundamentally selfish “come play in my sandbox or we won’t play at all” kind of attitude. It’s very similar to the “any kind of database you want as long as its ACID and relational” attitude I’ve also written about lately, and quite antithetical to the UNIX/Linux/open-source way of making tools that do their own jobs well and combine well with other tools to do larger jobs.

Java is the Borg of the computing world.