Now that I have your attention (as I'm sure I do with a title like that ;-) ... Five items came across my screen this morning that made me think, yet again, about why Microsoft dominates the desktop.
Item one: the .NET Book Club, which is "...an organization to promote reading and discussion amongst professional developers. Along with this, the group provides book reviews for interesting readings and suggested reading materials." Nine years after Java debuted, there are plenty of sites that review Java-related books (such as the books section at JavaRanch),but I don't know of any self-improvement book clubs.
Item two: Mike Gunderloy's Coder to Developer, which I think is an excellent book. I've just subscribed to his site, Daily Grind, where he posts several notes a day about new tools for .Net developers. It's got me thinking: how come no-one wrote something like Coder to Developer based on Java? There are plenty of books about modern Java tools (most of which also advocate Extreme Programming), but none that measure up to C2D.
Item three: Don Box's blog entry titled "Travels in Java Land", in which he says:
I was also surprised at the continued enthusiasm for AOP [aspect-oriented programming] over in Java land. I remember being infatuated by it maybe 5 years ago, but obviously the Java folks have found lasting love.
Aspect-oriented programming takes object-oriented programming a step further by allowing developers to add functionality ("aspects") to methods orthogonally to the inheritance tree. It's certainly useful for things like persistence and logging, which cut across class hierarchies, but only in the hands of the kinds of ubergeeks who really do find things like closures intuitive. For the other 90% of programmers, who are still wrestling with inheritance, it's just one more place where they'll have to rely on voodoo and superstition. It may be great fun for academics, but it's just a distraction for Java at a time when .Net is threatening to take over the world.
Item four: Eclipse. We use it at Hewlett-Packard, and my students use it at the University of Toronto, and I think very highly of it. But start it up with a stopwatch in your hand; on a 2.4 GHz Pentium with 1 GByte of RAM, it takes about eleven seconds. Now start up Visual Studio .NET on the same machine: under 5 seconds. Try refactoring, or navigating through the class browser---you'll see the same performance differences. On a typical undergraduate machine (256 MByte of RAM, 1.2 GHz processor), Eclipse is unusable as soon as you have one other large application running (like Tomcat).
A lot of people (myself included) have told the folks at IBM/OTI that if undergrads can't use Eclipse on their personal machines, they (IBM) are leaving an opening for Microsoft. This morning, I got mail from a friend from [name of university deleted because I haven't had a chance to ask him if I'm allowed to say], telling me that they're switching from Java to C# in part because VS.NET is just a compelling tool.
Item five: Bryan Cantrill and others have been discussing the growing gap between academia and industry. I won't try to recapitulate their discussion here; I'll just point out that fewer than a quarter of the academics I know use a version control system, and fewer than a tenth use an IDE.
Put these together, and what I get is that Java is still, in its heart, academically oriented. Hundreds of thousands of developers may be building real-world applications on top of it (I'm one), but: aspect-oriented programming? IDEs that only run on top-of-the-line machines? Compare that with a book club for professionals who want to keep their skills up to date, or the maturity of .Net tools compared to their Java counterparts (despite the six-year lead Java had). Microsoft is winning because their #2 priority (after making money) is to make developers productive. They're winning because they deserve to win.