"Although the .NET vs. Java war is basically over for control of the Windows desktop, where .NET is sure to become the managed language of choice for new Windows desktop applications, there is a new battle brewing. That battle is for the Linux desktop. Now that Java has been open sourced under the GPL, even the most strict of the 'free software only' distributions can start bundling it and integrating it into their Linux distributions out of the box."

>>
Microsoft is dead last in implementation.
Examples:
- CheckedExceptions? -- Dot Net still waiting for that Spec sharp.
<<

Checked exceptions are, in my experience, of questionable value. Not only do they result in more typing overhead, but programmers are more likely to want to distill them down to something common denominator, like Exception. All too often I see that Java programmers, wanting to avoid a throws clause, will try and seek ways to get around it altogether, defeating its supposed purpose.

>>
- Unix File permissions -- Windows has none, the Windows trolls TALK about ACL's but NEVER Impliment them, Even with the ORACLE install the Oracle Windows team let EVERYBODY Walk All Over the Oracle Data area.
In OS X, Linux and Solaris you create an Oracle User and Group and NOBODY can touch the Oracle data areas.

We seem to have jumped the rails. What does the file system have to do with either Mono or Java? You lost me here. If you are using Mono under any of these systems, it is not like it is going to allow you to magically work around the file system's conventions and priviledges.

>>
- Visual Studio 2005, STILL can't mix C# and VB in the same project!!!
<<

Haven't tried it. I know that with Mono though, I can certainly mix code from all sorts of different languages. Want your C# class to inherit from a Java class? No worries. Want Nemerle and Boo and IronPython objects all working in concert? To the best of my knowledge, there is no problem, provided you have the assemblies for these languages. I do not use Windows so I cannot speak for VS5.

>>
Here's the real "Innovation" in C#
Java throws an InvalidIOException
C# throws an IOException.
C# was designed for and by THE GUYS WHO WON'T LEARN TO TYPE.
<<

So you feel that InvalidIOException conveys more inherent meaning than IOException? Well chalk one up for you. Personally, I think we'd all do a bit better if we could have a ReallyUnfortunateInputOutputPerturbanceException, but that's just me being snarky.

>>
I think it's a hiring requirement, if you know how to type you can't get a job in the Microsoft Language Department.
<<

No, that's a general statement about programmers. Most people who program are under tight deadlines and take as many shortcuts as humanly possible. Why spell something out when you could abrv ur msg dwn?

I in no way support this practice, it is something I abhor, just like the use (abuse) of hungarian notation. Whoever the Hungarian was that came up with that ought to be taken to the woodshed.

In working with both Java and .Net APIs, I have never once said to myself 'gee, those Microsoft/Mono guys were obviously desperate for a shortcut with that one'.

That said, my overall feeling with Java and especially the J2EE stack is that there is a philosophy of 'why do in 5 classes what you could do in 30'. Whereas the .Net APIs seem compelling because they are so straight forward, Java seems to love the baroque. I can handle this in my classical music selection, not so much so when I have to program a solution to something.

>>
Java has getter and setter methods, C# has properties, again, quicker to type, but getter and setter methods SORT TOGETHER yielding day to day Better Productivity!
<<

Better Productivity?

Is this some sort of hideous joke?

Over the years I have had to live with this Better Productivity of which you speak when writing Java. For some reason, it has turned into one of the aspects of the language that I hate the most. But it would be unfair to proclaim it either great (your view) or as sucking chunks from a sewage pipe (my view) without comparing and contrasting code:

setSomeValue(getSomeObject().someMethod(getParameter()))

vs

someValue = someObject.someMethod(parameter)

The key difference is not merely one of saving some typing. If I have to confront both of these expressions, it is much harder to parse what the first is trying to do than the second. Since nothing is gained by the first over the second *except* more typing (and therefore greater chance of syntax error) how you figure that getter/setter style accessors are more productive is beyond me.

As far as 'sorting together', what are you going on about? Accessors (getter and setter) are two sides of a single property in a language like C#. In Java, they are two distinct functions. Please explain yourself.

>>
Java was designed by professionals ( who can type ).
<<

As illustrated in the comparison above, there is nothing inherently professional about adding all sorts of typing overhead. It just obscures what you are trying to say. The impact on development, maintenance, refactoring, etc. would lead me to believe that the approaches you are so eager to champion are the antithesis of professional language design.

>>
But, the real fun is running Solaris 64bit and Java on a Mac with VMware Fusion. Actually WinXP-64bit
<<

Stunning conclusion or worthless factoid? I'm afraid I can't tell.

Here are some things for you to ponder when it comes to Java -vs- Mono/.Net:
- Opening Java will prove a wonderful thing for Mono. The IKVM project, which allows Java byte code to be run by Mono has always been hindered by Java not being fully open. Now that this barrier is gone, I can have the best of *both* worlds while working in any (or many) of the broad range of languages supported by Mono/.Net. This is a win-win situation all around.
- Java as a language is playing catch up with .Net. This is no idle boast. Before .Net came onto the scene Java was slow to add anything. Now they are in a reactionary state trying to add the language extensions that are already making .Net users much more productive. That should tell you a thing or two about the alleged 'design professionals' behind the Java language.
- XML support and web services are so much easier in Mono/.Net than in Java that it is not even funny.
- Assemblies have no real analog in Java. Jar files are nice, but where is the versioning? Developers have to resort to things like osgi in order to be able to develop reasonable plug-in systems for instance.

There are many other features that you should look into about Mono/.Net before proclaiming how Java is so much better. The fact of the matter is that I can be much more productive today in Mono than I was ever able to using Java.