Brian M. Clapper, bmc @ clapper.org
Article URL: http://brizzled.clapper.org:80/id/93
Published on: 30 July, 2009
I'm currently teaching myself C# (with .NET to follow); my client is building a new data warehouse, and the support tools will be Windows-based. As a newly minted consultant, it also can't hurt to have .NET/C# experience under my belt, even if I generally prefer to do my development anywhere but Windows. As a consultant, I need to maximize the possibility of getting future contracts; if that means doing Windows, I'll do Windows (and program where I'd prefer to program at home).
As pretty much anyone who knows me knows, I am not a huge fan of Microsoft. I've spent a large part of my career programming on Unix-like systems. From 1999 to 2008, I worked for an independent software vendor, as a core member of their development team; the product was written almost entirely in Java.
I like the Java VM. It's mature, it's fast, it's highly portable, and there are loads of languages running on it. When I was developing full-time in Java, I was the only member of the team whose desktop ran Linux; everyone else used Windows. With Java, it didn't matter. In fact, it was an advantage. Several of our clients ran our software on Unix-like systems; having at least one developer who used and tested our product on Linux was a win. Our nightly build system was a cheap Linux server, as well; since Java runs anywhere there's a Java VM, anyone on our team (as well as any of our customers) could run executables produced on that Linux box.
But Java, the language, depresses me lately. It's being left in the dust by other languages. Scala, my current favorite language on the Java VM, incorporates many newer (and some not so new) ideas that have yet to find their way into Java.
Worse, though, for Java enthusiasts: Java has fallen behind C#. I'm boning up on C# using O'Reilly's C# in a Nutshell book. (See http://oreilly.com/catalog/9780596001810/. As an aside, the "Nutshell" books are an excellent way to learn a new language, if you already know n other languages.) I'm only partway through the book, but it's already clear to me that, overall, C# (the language) now has more goodness in it than Java does. I have to give Microsoft credit (much as it may pain me to do so). Here are some things C# now has that Java does not:
In addition, C# has many of the same features as Java, including:
I still prefer the JVM to CLR. The JVM is robust, mature, fast, and (above all) portable. But Java, the language, has fallen behind, and it now lacks a lot of the useful features C# has. One of the reasons I'm all over Scala these days is that it corrects those flaws in Java, providing many up-to-date features while still permitting me to use the power and convenience of the JVM. Either via libraries or built-ins, Scala provides the same features as C#, with a few more thrown in for good measure. (I also happen to think Scala is a better language than C#, but I'll save that tangent for another time.) But, in the .NET world, C#, not Scala, is the lingua franca. And C#, and .NET, are the biggest hearts-and-minds competitor Java has.
Sun and the Java community have allowed Java, the language, to stagnate to the point where, compared to C# and Scala, it is almost painful to use. As a long-time Java programmer, I have to say, that makes me a little sad.
Offsite Comments on this Article