|
|
Recently I've been looking more closely at the various (count them, four of them)
proposals for adding new features into the Java language, the "BGGA", "FCM", "CICE"
and "JCA" proposals. All of them are interesting and have their merits. A few other
proposals for Java 7 have emerged as well, such as extension methods, enhancements
to switch, the so-called "multi-catch" enhancement to exceptions, properties, better
null support, and some syntax to support lists and maps natively. All of them intriguing
ideas, and highly subject to reasonable debate among reasonable people. My concern
lies in a different direction.
Who herds this bunch of cats?
This isn't just a question of process within the JCP. And it's not just a question
of closures or the other features we're looking at for Java 7. This is a question
about the moral leadership of Java.
In the C# space, we have Anders. He clearly "owns" language, and acts as the benevolent
dictator. Nothing goes into "his" language without his explicit and expressed OK.
Other languages have similar personages in similar roles. Python has Guido. Perl has
Larry. C++ has Bjarne. Ruby has Matz. Certainly other individuals "float" around these
languages and lend their impressive weight towards the language's design--Scott Meyers,
and Herb Sutter in C++, for example, or Dave Thomas and Martin Fowler in Ruby--but
the core language design principles rest firmly inside the head of one man.
Whereso for Java? James Gosling? Please--Jimmy abandoned the language shortly after
its release, and now only comes out every so often to launch T-shirts into the crowd,
answer reporters' questions whenever something Java-related comes up, and blog his
two cents' worth. He's a reminder of the "good old days", for sure, but he's not coming
out with new directions of his own accord and taking the reins to lead us there. He's
the Teddy Kennedy of the Java Party. His endorsement weighs in as about as influential
as Bob Dole's--interesting to an analytical few, but hardly meaningful in the grand
scheme of things.
Unfortunately, the two most recognized "benevolent dictators" of the Java language,
Neal Gafter and Joshua Bloch, are on opposing sides of the aisle on this. Each has
put forth a competing proposal for how the Java language should evolve. Each has his
good reasons for how he wants to implement closures in Java. Each has his impressive
list of names supporting him. It's Clinton and Obama, Java Edition. The fact is, though,
that when these two disagreed on how to move forward, lots of Java developers found
themselves in the uncomfortable position faced by the children when the parents fight:
do you take sides? Do you try to make peace between them? Or do you just go hide your
head under a pillow until the yelling stops?
This is the real danger facing Java right now: there is no one with enough moral capital
and credibility in the Java space to make this call. We can take polls and votes and
strawman proposals until the cows come home, but language design by committee has
generally not worked well in the past. If someone without that authority ends up making
the decision, it will alienate half the Java community regardless of which way the
decision goes. The split is too even to expect one to come out as the obvious front-runner.
And expecting a JSR committee process to somehow resolve the differences between these
four proposals into a single direction forward is asking a lot.
So who makes the call?