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 :)

16 Comments

Great post.

Excellent post. You say that Monodevelop is a pleasure ot work with? Agree that Eclipse is a pain to work with. I had issues with the earlier version of MonoDevelop, but based on your comments, they must have made improvement in their stability. I will take a look soon.

Paul:

I’ve only had minor issues with MonoDevelop so far, but I haven’t done that much work under it.

Bear in mind that I am a self-professed Visual Studio fanboi:

Code::Blocks – a very nice IDE that’s relatively intuitive to a VS user. I found it ran pretty smoothly under Windows and fairly well under the Linuxes I had to work with. I started to run into some shortcomings shortly before the RPMs stopped being available for my environments, and I could never get it to build. I was also starting to sense that the shortcomings that affected me were probably not likely to get dealt with, and I had no desire to fix them myself. I want an IDE to work on other stuff, I have zero desire to work on an IDE itself :)

KDevelop: I’m torn over KDev. Firstly I’m working with version 4, which doesn’t support version 3 project files, and my CMake project only wants to generate v3 project files. But the fact that v4 doesn’t support v3 proj files … says all kinds of bad things to me. KDev appars to be feature rich, well thought out, and a capable IDE. But I generally find KDE apps to be bloated. And KDev feels bloated too – but that may just be my bias; I’m never going to develop for Qt or KDE, so a huge part of its feature set is wasted on me.

MonoDevelop: Targetted at C# users, written in C# using CLR stuff… It’s just gonna be “familiar” isn’t it? :)

The .net and mono IDE tools are improving faster than java tools. So does the C# language.
The runtime performance for java still lags behind despite of years of head-start it once had: http://www.codeproject.com/KB/dotnet/RuntimePerformance.aspx
Add the Oracle lawsuit against Google over java and you might think twice before choosing java for your project development.

I agree with you regarding eclipse & mono develop. I’m not sure mono develop is anywhere near as deep as eclipse in functionality, but eclipse is a dog performance and memory wise. It regularly goes to more than 500MB with my projects.

Now as for Java performance versus Mono performance. My recent measurements of mono performance for numerical applications showed a substantial gap between C++, Java, and Mono. C++ and Java were essentially the same performance-wise, and Mono about 40% slower.

You mention the MS JRE and other anecdotes about Java UIs. This is old new (i.e. > 10 yrs ago). The Java VM is still the fastest VM I know of. Have done many neck to neck tests of Java vs MS .NET vs Mono. MS .NET is close and Mono farther away. My tests were focused on numerical work (i.e. cpu and memory intensive).

I am looking forward to the day when Mono is within a few % of the JVM performance. When that happens will be able to switch over to F# / C# on linux. For now, I can’t sacrifice the performance.

Has anyone benchmarked the LLVM JIT for Mono?

Eclipse is just absolutely terrible. You would have to spend significant amounts of money with focus groups trying to design a more confusing, frustrating, obnoxious, buggy, unintuitive pile of garbage.

Found your post by googling over Mono on a day Novell was acquired by Attachmate with “certain intellectual property assets to CPTN Holdings LLC, a consortium of technology companies organized by Microsoft”. With the Mono being a project led by Novell I wonder which IP assets are sold to CPTN/Microsoft…

Anyway, I really wonder why you use the worst (imho) Java IDE ever as a basis for your comparison? Did you ever try NetBeans of Intellij Idea?

Also, comparing Java vs Mono outside of application domain (desktop software vs web software vs mobile platform systems) is similar to comparing apples to oranges. I would not care about performance that much. In my experience frameworks make real difference, so I would be much more interested in comparison of Java EE vs corresponding .Net APIs. Actually this is what I am googling for about right now.

Anyway, thanks for the post and sharing your thoughts :o)

Found your post by googling over Mono on a day Novell was acquired by Attachmate with “certain intellectual property assets to CPTN Holdings LLC, a consortium of technology companies organized by Microsoft”. With the Mono being a project led by Novell I wonder which IP assets are sold to CPTN/Microsoft…

Lets be fair and note that Java is now owned by Oracle, and that the Java community isn’t entirely happy about this. (NOTE: I feel the linked SlashDot titles are more sensationalist than need be, and the articles perhaps infected with a similar sensationalism).

Anyway, I really wonder why you use the worst (imho) Java IDE ever as a basis for your comparison? Did you ever try NetBeans of Intellij Idea?

Eclipse is the one everyone recommended. And back before Sun went to war with Microsoft for their native Windows implementation, it actually ran really nicely under Windows.

Beyond that, it has been many years since I looked at Java IDEs, and what I experienced were a set of dazzlingly over-engineered tools with little application of common sense and in several of them it was incredibly difficult to distinguish between the IDE/toolset and the underlying applications (I recall one platform we tried when I was at Granada Media, where we had to install X and several other libraries so that we could install the toolset on the servers because the ide was such a small part of the bundle that you couldn’t choose not to install it, and even the smallest project required a vast percentage of the entire bundle).

re. let’s be fair

Actually this is what my message was about: picking the worst IDE for a comparison does not seem to be fair. You managed to prove that Eclipse IDE is worse than Visual Studio or MonoDevelop. And I strongly agree with you on that. But does it mean the Visual Studio and MonoDevelop are so bad that the only way to make them shine is comparison to a mediocre product? Yes, sorry VMWare, Zend and others who are pushing IDEs based on Eclipse – the Eclipse is the nice concept being poorly executed to almost unusable state…

re. let’s be fair (again)

As a matter of fact I did not tell that acquisition of Novell is bad news for Mono project.
I mentioned recent selling of some assets to Microsoft because it is probably good news for .NET, as it may be an indication that Microsoft is looking beyond of Windows. So, there was no need to remind about some big players (like Google and Apache Software Foundation) are not happy about the fact that Java does not belong to them :o)

I am a developer of end user software and I do not care much who owns Java or .NET. Let the big guys fight for their share, let the Apache Foundation trying to block further Java development just because they did not get their share. Leave them alone. All I (and most developers) need is

good framework (language itself does not matter much)
portability (I do not want to maintain Linux, Windows, OS X, whatever versions)
good development tools

.NET does not meet second requirement. I believe that embracing Microsoft technologies that are not endorsed by Microsoft (yes I am referring to Mono) is simply not an option when we speak about enterprise level software. But the situation will change should Microsoft extend the .NET to other platforms. This is why I am curious about today’s announcement.

I am neither a C# or Java developer. Both options sit firmly on my horizon because people use them and so, from time to time, I have tried to explore both.

I didn’t “pick” Eclipse, it is the one that people recommend (present continuous tense).

By trade, I am a Linux developer. So I have naturally avoided C# like the plague.

I’m also a cross platform developer, so once again, I’ve avoided C# like the plague.

From bar and convention discussions, I’ve come to understand that my experience with Java as a non-adopter is fairly common amongst other folks who’ve tried and didn’t buy. Eclipse is the poster-boy of Java IDEs, and it blows. Commercial IDEs generally prove to be gargantuan beasts over-engineered to be extensible at every twist. The free versions always seem bloated and built to build bloat.

Eclipse *is* the IDE that gets bundled with Linux distributions. It’s the IDE you find if you google “recommend an IDE for Java”. And it tries to carry off a certain degree of Visual Studio appearance which has *always* suckered folks like me into trying it out.

Hence

“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.”

I challenge you to go back and re-read the article. This post isn’t here to sell anyone on Mono, Java, Pizza or Quiche. I asked the question: “Why the hell are Linux people using Mono to program in Microsoft’s C#?!? Did I step into an alternate reality or something?”

intellij is actually much nicer.

Awesome post. Stumbled upon it while searching for a performance comparison between Mono and Java.

Let me just say that I, looking back at ~6 years of experience in developing things using .NET and VS, having also used #Develop, MonoDevelop and Eclipse a lot, that I agree on Eclipse being a huge pain (ever tried to solve a dependency issue while installing a plugin?) and simply impossible to use.

To sum this up: thank you very much for this great post.

Very nice article!
Eclipse is definitely a true shame for the opensource community. I’m currently being “forced” to use it for C++/Qt development, and, trust men, where it is absolutely unusable for java development, it’s even worse for C++ development.

As other users noted, you have taken one of the worst IDEs in your comparison, but then again, although netbeans and intellij are better, they’re still built on java, and therefore throwing away their performance.

I honestly think java is going to lose its grasp on the desktop applications market, slowly. For applets and RIA, I think it’s already in “zombie” state.

The only platform where it still rules is enterprise-level web servers. I haven’t used .Net or its mono equivalent a lot for web development yet, but I feel they are still inferior to JEE in terms of features (the performance is probably very similar between the two).

re. Eclipse is definitely a true shame for the opensource community.

The funny thing it still made its way into Adobe Flash Builder and SpringSource Tool Suite bringing new waves of pain to the masses :o).

By the way, I am not aware of any Intellij Idea performance problems. I am not heavy user of NetBeans, can’t comment on this product. However I do not notice any performance issues while switching back and forth between X Code (native app) and APPcode – another IDE from Intellij written in Java. Java is being compiled down to native instructions, and assuming low usage of reflection, overall sustained performance must be similar to that of C++ or Objective-C.

You may consider upgrading your hardware. If you are lucky to keep out of Apple universe, the top notch hardware is relatively cheap…

Trackbacks and Pingbacks

[…] But he won’t be developing in Java for sure via kfsone.wordpress.com […]

Leave a Reply

Name and email address are required. Your email address will not be published.

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

You may use these HTML tags and attributes:

<a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <pre> <q cite=""> <s> <strike> <strong> 

%d bloggers like this: