Mono vs Java
There is a slowly emerging community
of .NET developers for Linux in domains that were traditionally strongholds of Java and C++/C developers. Linux people developing with a Microsoft language? The simple “we won’t sue you” promise
doesn’t explain it.
And then the penny dropped… Perhaps, Better the Devil You Know?
It’s going to be difficult to read the rest of this post without me sounding like a Microsoft fan. I’m just not going to take the time to critique Microsoft at every available opportunity in this post, and if you can’t accept that an absence of criticism is not praise, then stop reading now and go do something else.
Back to “Better the Devil”… Actually, I think it’s more likely that they are C/C++ developers who – like me – always somehow felt there was something wrong with Java.
My take on Java was definitely tainted by my end-user experience with it: Java apps were always slow and needed way more resources than they should have. The only time I had a good user experience with Java was when they were running under the old Microsoft JRE.
I won’t blame anyone for saying Microsoft was engaged in embrace & destroy. I think that is a safe default assumption. It’s pretty safe to assume Microsoft got into bed with Novell to ensure some portion of money going into Linux found its way back to them…
Then, rather than say “Houston, we have a problem”, Sun pulled a Microsoft on Microsoft. As an end user the experience was that Java was now equally sucky on all platforms. Sigh.
So C# takes “What we learned from Java” and provides a Java-like development environment with an emphasis on quality end user experience — not because that’s what Microsoft does, but because they were denied the opportunity to embrace & destroy Java to achieve the same result. C# had to be good, Java was too well entrenched for a Java-alike to earn any ground.
At the same time – Sun doesn’t appear to have made any effort to match the performance of Microsoft’s JRE. So Microsoft didn’t have that tough of a challenge :(
When I’ve tried to get into Java, I’ve generally found that I got to like it less as I got further into the language. With C# I found my dislikes to it were immediate and upfront, but once I conceeded that this was an MS language and was so going to be MS tainted, beyond that I found a language familiar enough and well thought out enough (at least, from version 2.0 on :) that I could see what it was doing and where it was going.
And C# seems to be fairly upfront about its lackings. Java has a heavily academic focus on doing what is right, whereas C# also engages the developer in what is efficient and practical. Again, emphasis seems.
I find it’s summed up in the tools. The best IDE I’ve seen for Java was Eclipse. The best IDE I’ve seen for C# is (not counting Visual Studio) MonoDevelop. They are night and day. MonoDevelop is a pleasure to work with. Eclipse? Did someone stick a pool cue into my rectum while my IDE was loading, or am I using Eclipse again? This from a guy who has been developing in Vi most of the time the last few years.
I honestly can’t let my critique of Eclipse stand like that. I used it for about 6 months back in the MS-JRE days, and it was a lot better than other options at the time. But every time I tried to expand my eclipse-repetoire I ran into pain. And every time since then that I’ve tried to get it up and running, more pain and hurt. For instance, I recently tried to get Eclipse/CDT running under 3 different OSes and I just plain and simple got tired of having to spend so much time googling how to install a piece of software or solve any of the multitude of error messages / URL typos that the documentation were littered with.
So I haven’t actually seen “galileo” at work. But it so entirely falls in-line with my past experiences that I’m just going to assume that it is equally as painful to work with. Visual Studio tries to make you miserable when you are writing code that might – god forbid – go to another platform. But it’s known and predictable, and not that hard to work around.
I don’t feel unjustified in making this flawed comparison, because I always hear people comparing their IDE with Visual C++ 6.0 or earlier, saying things like “It doesn’t even have macros!” (ctrl-shift-r to record, ctrl-shift-p to play back, been in there since 6.0, but they were well hidden back then).
Visual Studio 2008 is one of the worst performing visual studios, it runs fine out of the box but rapidly becomes dogged by registry and disk issues that make it seem like your hardware has gotten arthritis. But even then it runs more smoothly and comfortably than an equivalent *nix based IDE on the same system.
To be fair: MS is paying a lot of programmers to work on Visual Studio; OS equivalents are working for the love of it. The quality of IDEs like Kdevelop and Codeblocks is commendable. But eventually you get tired of living in an 8×6 “studio” apartment and you want some place where you can extend your arms and hold the cat horizontally rather than vertically while swinging it.
Visual Studio and MonoDevelop are pretty awesome at doing the most basic and most common sets of tasks. They can get a bit icky when it comes to doing more advanced, complex tasks; VS is fine if you want to hook into a Microsoft SQL database but prepare for hurt if you want to use a different DB.
OpenSource IDEs often seem to suffer from featurephilia – it’s cool to work on new features, so they get added. What they don’t get is polished and rounded off. As a result, common, basic tasks aren’t nearly as easy in most IDEs, but there’s an addon for just about anything you might want to do. And — just as with Visual Studio — the tools work at peak efficiency when you do it their way. Visual Studio is terrible at building an app the way you would do it in Eclipse, just as Eclipse is terrible at building an app the way you would do it in Visual Studio :)
Which brings us back to Mono vs Java. Eclipse’s treatment of C/C++ programmers as second class citizens has probably lead to a lot of woulda-been-java-devs sticking with Visual Studio and so finding they have the same comfort-gap switching to something like Eclipse. VS support for Java shows exactly how Microsoft felt about Sun winning the case against Microsoft.
So I suspect Mono opens a door for an entire class of programmers who have been stuck developing for Windows to now target other operating systems. Microsoft aren’t likely to stomp on this because those apps will also run on Windows, so if there is an embrace and destroy plan, those apps will play into it.
Guys who would be coding kick-ass phone applications – but don’t because they don’t do Java – now have a road into Linux and MacOS.
Now that Java is an Oracle product, I feel comfortable saying of Mono: I for one welcome our new overlords.
Remember: Java now belongs to Oracle and trust me: Oracle is Microsoft Junior. You haven’t learned to hate Oracle yet purely because it’s not big enough to throw the same sized rocks at you that Mr Ballmer can.
A quick history note: 30-odd years ago, the computer industry was dominated by an evil giant called International Business Machines.
Then a small upstart surfaced with a new operating system for IBM’s Personal Computer platform. Computer enthusiasts, keen to see the giant fall, rallied behind Microsoft’s Disk Operating System (MS/DOS).
Is it likely Microsoft will embrace and destroy things we love? Absolutely. Sorry, you Microsoft employees who claim you are just trying to improve the user’s experience: your managers and their managers are trying to improve their end lines, negating any goodness you might contribute. It’s the same for any company, it only becomes “evil” when it covers too many markets.
Will Oracle topple Microsoft? Not a chance. But they make distract Microsoft’s eye from the prize enough to allow the next Bill Gates to sneak in.
But he won’t be developing in Java for sure :)