This series argues that there’s an opportunity for some technology to become “The Java of concurrent programming”. For background then, I’ll try to capture the factors that led to Java’s success as the first mainstream object-oriented platform for application developers.

[This is part of the Concur.next series. I’d like to use this series as a sort of hub, so if you publish a substantial piece on the Java part of the concurrency metaphor, shoot me a link.]

Good Engineering · Java is good. I know that in AD2009 it’s fashionable to sneer at its verbosity and boilerplate and generics and things like TransactionAwarePersistenceManagerFactoryProxy. But if what you want is a statically-typed curly-braced highly-portable object-oriented programming platform, Java is a good one.

Free · I don’t think this gets enough credit. No computer programmer was ever asked for money in exchange for the use of Java. This was probably Java’s biggest competitive advantage against Smalltalk, which for many years you had to pay for if you wanted a decent version.

Libraries · Java came out of the gate with a pretty-big and not-too-bad set of libraries that hit an 80/20 point in meeting basic programmer needs. This was an immense relief to anyone stuck in C++ STL hell.

Familiar · Java came with { and } and ++ and ; . So the code, on first glance, was legible to the legions of C and C++ programmers, who, if they had any grasp at all of object-oriented thinking, could become competent Java developers in short order.

BigCo Backing · The fact that Sun was behind Java mattered. In the early/mid Nineties, Sun shipped those glamorous workstations and nifty RISC processors and Unix and NFS and was totally down with the Net; geek mojo out the ears, and also commercial respectability.

Which of These Was Most Important? · Missing any of pretty-good, library-equipped, and free probably would have been fatal. Being familiar was helpful. I used to think that BigCo-backing was a big deal, but Perl, PHP, Python and Ruby have all become mainstream working from the grassroots up. But I still think it would help.

Back to Concurrency · As I survey the landscape, I’m just not going to invest time in looking at things that are badly-engineered, or missing essential libraries, or you have to pay to use. I think big-vendor backing could matter a lot.

Familiarity? It’s not a binary thing. Scala is a reasonably comfy place for a Java-head; Haskell and Erlang are each profoundly weird, relatively. Is that a fatal flaw? And Haskell feels way stranger than Erlang. Does that matter?