Unfortunately the reality in this industry is that perceptions matter as much as technology, so I feel compelled to respond. I'm pretty sure I'm being trolled for doing so, but it's such juicy bait I can't help it. Before I do, let me be clear - I like software. I've been around enough platforms to find joy in all of them, including Java. Java introduced some important ideas to the mass market, many of which obviously made it into .NET and were refined in the process. JUnit, Ant, SAX parsing, Eclipse - lots of great stuff comes out of the Java space (as well as stinkeroos like Swing). It is not my intention to smear the Java platform here, rather to smear the arguments proposed by Carlos. So, on that note...
5. No mandatory upgrades. No subscription fees. No software insurance fees.
How many MIS organizations are held hostage to microsoft's draconian licensing policies?
Guilty as charged. That said, how many Java developers are held hostage to Sun's draconian handling of Java? Even
Andy hates the JCP :) The growing maturation of Mono makes this a less compelling argument, too. As my friend
Keith likes to say "They're both just Vendor Scum, man".
6. Run Multiple Versions of the VM (Runtime) on the Same Machine
On this laptop I have Mono, Rotor, Portable.NET, and two versions of the commercial CLR running simultaneously. Works great.
7. Large Innovative Open Source Community
A-ha! Good argument. I really don't think I can refute this one. Java's been around a lot longer. Give it time.
8. Low cost Commercial Quality IDE's
Not nice to make fun of sharpdevelop. For non-profit use VS.NET can be had pretty cheaply, especially if you know anyone that is in college somewhere. And Eclipse .NET integration is
starting to happen.
9. More Available Jobs
For now. This is actually related to 15 and 25. Not very convincing to me.
10. Better and Standardized Connectivity to Legacy Applications
I don't work in this space, but I can't imagine these vendors are planning on ignoring .NET. But I'll concede the point - Java has more penetration in these spaces.
11. Multiple Vendor Choice and Support
See my response to #1. As for messaging, Carlos forgets at least IBM MQSeries.
12. Compile to Machine Code
Wait a minute - isn't the whole point of Java NOT to do this? Let me be clear here - I have no beef with the Java source language. It's nice. But completely ditching the platform it's supposed to run on doesn't sound like much of a benefit to me. Anyway, .NET's NGEN (or "pre-jit) facility basically allows you to compile code as it's deployed onto a client machine, and in a way that is robust in the face of security and versioning, and in a way that allows clean interaction with ordinary [JIT-compiled] code.
13. Future Proof
This is where I really begin to question Carlos's sanity. Java code will not become obsolete? Then let's just kill the JCP now as being irrelevant. Sun has resisted every attempt to standardize Java in any meaningful way and could obsolesce everything tomorrow arbitrarily. (MS did this with VB.NET and the results have not been pretty). C++ was way more nailed down than Java and the ivy is starting to grow over its door. Nothing is future proof. (Except COBOL)
14. Most Popular Language in the Corporation
The exact same survey Carlos quotes states that
"78 percent of respondents indicated that they are currently developing for a Microsoft platform, with 28.6 percent stating that they are actively developing specifically for .NET or ASP.NET"
Sounds to me like a lot of Java programmers are using Java on Windows. Give them time :)
15. Larger Talent Pool
Bullshit, frankly. I have personally worked with a number of universities who include C# and .NET in their curriculum, including the University of Arizona, Cornell, University of Colorado Boulder, Texas A&M, and UC San Diego to name a few. And since many .NET concepts are familiar to Java developers any good Java developer would be productive in a week or two and feel pretty comfortable in a few months.
16. More Contributions From R&D Organizations
Give this some time. Plenty of researchers are tinkering with managed code too. MS has the funds to throw at Academia so like it or not .NET will get research interest.
17. Government Approved
I'm not sure how this proves Java is better than .NET. The Government after all used to love Ada :)
18. More Homogeneous and Less Complex Environment
This one betrays real ignorance and deserves special praise for it's entertainment value. First of all, .NET obsolesced many of the technologies Carlos mentions. The Registry? DCOM? Dead dead dead. Yes those technologies needed to die, and they did. Now can we talk about EJB? Second, saying "Developers are competent whether its UI development or server development, everything is in [insert language here] so its understandable and therefore maintainable by everyone" is laughably naive. Anyone who said something like that to me in a job interview would find a polite but quick end to things. The world is complicated. There's more to knowing how to write software than knowing what a for loop looks like.
19. More Deployment Options
Umm, no. You can deploy .NET apps in most of the same ways as Java apps, and once the security story for internet apps gets better you'll basically be able to do everything. Will everyone who likes Java applets please raise their hands?
20. More Searchable References
Reaching for straws. Not worthy of comment.
21. Better support for Software Process Best Practices
More hilarious flailing. There are just as many hopelessly incompetent "Java experts" as there are VB hacks. (and VB hacks at least usually have some humility :). None of the things you mention are unique to .NET. JUnit and Ant are wonderful tools that quickly got ported to .NET. Spend some time in the .NET class libraries, especially in the areas of threading, remoting, and interop. Do you really think the Java libraries are better factored?
22. Mature Object Oriented Relational Mapping Tools
This makes me feel icky, probably because I have a strong dislike for these tools anyway. But sure, fine, I'll let Carlos have this one.
23. More Productive Coding Tools
Umm, yeah, okay. This is the first time I've seen someone hold up Java IDEs as being the great thing about the Java world. Eclipse and IDEA both get props from my Java homies. The rest of them...well, it's subjective. VS.NET certainly is not perfect (I curse at it daily) but it's pretty darn productive. I really doubt either space has much of an advantage here. (insert obligatory "leaky abstraction" reference here).
24. Cross Platform Integration with Other Languages
See my response to #1
25. Higher Paying Jobs
Even if you're right programmer salaries are notorious for fluctuating. It's a very bad career strategy to just go where the money is. There's great money to be had as an SAP consultant, yet I'd sooner shoot myself in the head. If you're competent in *any* technology area you'll make decent money.