Java, Coolness, Human Scale and Creative Environments
What a facinating topic we've had pop up in the discussion between Brett and Kathy. I must admit, like Brett, I've felt a continuing drain on Java's "coolness" over the last few years and Kathy does a wonderful job of saying WHY cool is important. I'd add that keeping Java "cool" is vitally important because often this tends to dictate where creative efforts go. Taking an example outside of programming languages, look at the Mac vs PC in the mid/late 90s: the PC began to be the choice for Internet-related application development and the Mac practically died. However over the last few years the Mac has regained it's coolness and the trend has reversed itself (iTunes, podcasting, the best RSS readers, etc.). So, to keep Java vibrant it really DOES need to stay "cool."
I found John Reynolds' comment on Kathy's post particularly interesting and it starts to get at why I think Java has lost some of its coolness factor:
"For some reason your post made me flash on HGTV's myriad "home fixer-upper" shows. Fresh landscaping and a new coat of paint can go a long way towards transforming a boring tract home into a cool cottage. Java can be cool and sexy again, but it will take some dedicated remodellers."
This is almost right, but I'd differ with the analogy just a bit; it's not so much that Java is a tract home that needs sprucing up, rather Java used to be a cottage and has grown into a one hundred story, all glass, office building built without an obvious entrance and without reguard to human scale (like so much of today's new architecture). As with real architecture, when things aren't built to human scale, people find them oppressive, uninspiring, difficult to use and in the end these environments do not create vibrance (or perhaps Christopher Alexander would say such environments do not have the "Quality without a Name").
The good news is that this analogy is directed more at the Java API than the core language. With the APIs one doesn't have to look far to see "uncoolness," at least from a design sense (J2EE, Swing, Calendar to name a few), but these are APIs (or higher level platforms) and so we don't have to be stuck with them.
One of my favorite books this year is Better, Faster, Lighter Java, by Bruce Tate & Justin Gehtland, which does a brilliant job of questioning where we are going (and why) as well as suggesting that lightweight approaches may be more sensical. I'd argue further, these lightweight choices, which in my opinion are built to human scale, may help Java recapture vibrance, which leads to coolness.