John Carmack has recently pursued software development targeted to cell phones. In his typical fashion,
What caught my eye were his comments on the use of Java for the development of interactive user interfaces. In particular, John says
"The biggest problem is that Java is really slow. On a pure cpu / memory / display / communications level, most modern cell phones should be considerably better gaming platforms than a Game Boy Advanced. .... there is just no excuse for having 10+ millisecond granularity in timing. Given that the java paradigm is sort of thread-happy anyway, having a real scheduler that Does The Right Thing with priorities and hardware interfacing would be an obvious thing. Pressing a key should generate a hardware interrupt, which should immediately activate the key listening thread, which should be able to immediately kill an in-process rendering and restart another one if desired. The attitude seems to be 15 msec here, 20 there, stick it on a queue, finish up a timeslice, who cares, right? "
There was a period of time when the promise was that Java would take over the desktop. Every company was focused on either "standardizing" on Java as their language of choice for desktop development/deployment or was fighting like hell to try and dilute the "write once, run anywhere" promise of Java to maintain their proprietary stranglehold on a particular piece of the market. All the while, Sun milked the hell out of it, spending massive marketing dollars perpetuating the promise.
But that promise has certainly never been realized. And, now, it looks like it never will. Can you name a single commercial desktop application that is implemented largely in Java? I can't. Sure, there are a number of various random products that are dominating particular niches. But when I look at the boxes of software in CompUSA or an Apple Store, I don't think I have seen a single piece of popular or "major" software written in Java.
What John said above is largely why. Java is a great general purpose language. I have written tens of thousands of lines of Java code for various random web and web related applications and enjoyed doing so quite a bit. If you remember, I was one of the handful of developers in the WebObjects community that fully embraced the move to Java.
Java has failed on the desktop because the architecture does not yield a decent and responsive user experience without a tremendous amount of effort fighting against the "natural" patterns of the various toolkits. The promise of Write Once, Run Anywhere mostly-- well, pretty often-- works for non-UI applications. For UI applications, the differences between platform and UI philosophy mean that WORA also yields a user experience that is alien to the platform.
Likewise, the very architecture of Java naturally incurs latency throughout any Java realized UI. As John said "15msec here, 20 there, stick it in queue ... who cares?" For UI development, that is a deal killer.