Java IDEs: the Blue Heeler, the Dachshund and the Labradoodle

I’ve had a frustrating week. I’m on a mission to find out why a piece of code I wrote had a “blowout” in execution time (“blowout” here means 60 microseconds instead of 15 in sustained usage just to keep things in perspective). I suspect it’s to do with temporary objects either auto-boxing/unboxing and/or temporary arrays.

Java, in my opinion, has the best IDEs of any language or platform bar none. Say what you want about the language but the IDEs are, on the whole, first rate. That doesn’t mean there aren’t bumps along the road however.

For the purposes of this completely biased rant I shall liken them to dog breeds.

Blue Heeler

The Blue Heeler is one kind of Australian cattle dog. It’s used on sheep farms and cattle stations to round up livestock. It’s not the prettiest of breeds.

So you won’t see these as family pets or in trendy dog parks or in your neighbourhood. But they’re smart, obedient, protective and hard-working. If you’re herding cattle? You won’t see much else. The Blue Heeler is a working dog and a victory for utilitarianism.

IntelliJ IDEA is the Blue Heeler of the Java IDE world.

Ever hear anyone rave about Resharper when talking about Visual Studio? Or even go so far as to say that Resharper is what makes Visual Studio good? Well, Resharper is adding the functionality to Visual Studio that IntelliJ has for Java.

Yet all is not perfect in IntelliJ-land. The biggest problem is plugins. You certainly don’t have the range that, say, Eclipse does. But nor do you have the “plugin hell” woes so often associated with Eclipse either. Open source frameworks will tend to release plugins for Eclipse and its up to third parties to make IntelliJ versions, which doesn’t always happen.

On the bright side, you don’t actually need that many plugins because nearly everything you need is done out of the box anyway.

What makes it worse is that Jetbrains keeps breaking all the plugins. IntelliJ 9 is relatively new but it once again broke all the plugins. I’ve lost count of the number of times a major version has done this. Seriously, can’t you guys make the plug-in architecture remotely backwards compatible? Is that breaking change you’re making really necessary? Really?

The Jetty plugin still doesn’t work, which is a reasonably big deal. Worse, i can’t find a profiler that works in IntelliJ to save my life, except possibly JProfiler but who can justify $499 for a fixed single license of a profiler? Especially considering the same thing for the whole rest of the IDE is $249 (if you don’t want to use the free version.

Dachshund

The Dachshund is a strange and impractical dog. Just look at it and you can tell it’s no product of evolution. Not without man’s intervention anyway.

Yet people like them. Families own them. They are however stubborn and hard to train and they have their fair share of health problems (including spinal problems unsurprisingly).

Eclipse is the Dachshund of the Java IDE world.

If IntelliJ has not enough plugins then arguably Eclipse has too many. Hell, this goes so far as having two Subversion plugins. A former colleague, who was an avid Eclipse fan, could never get either one to work. Sometimes they lied about checking stuff in (big problem) or just conflicted with other stuff.

Every time I try and use Eclipse for something I’m struck with an overwhelming sense of how awkward and unintuitive it is. Take Maven projects as one example. In IntelliJ or Netbeans you just open one up and it just works. Googling doesn’t really help either. The first link is seemingly out of date and it doesn’t get much better.

Now I realize this is a whole Coke vs Pepsi thing. Many people are no doubt experts in Eclipse. They’re used to the “Eclipse Way” so it all makes sense (which strikes me as a form of Stockholm Syndrome but I digress…). Hell, they may even like the whole perspectives thing, which I’ve always hated.

But if you tell me you’ve never had problems with Eclipse plugins you’re lying.

Labradoodle

The Labradoodle is a strange and relatively new dog breed. Whereas programmers with too much free time come out with bizarre ways of calculating Pi and other such boondoggles, dog breeders with idle hands decide to answer a question that has plagued civilization since Aristotle’s time:

What happens when you cross a Labrador Retriever with a poodle?

Baseless hyperbolae aside, I’m sure there was a reason. I just don’t know what it was.

But what resulted is a friendly, energetic and not-too-bright breed that families tend to like.

Well Netbeans is the Labradoodle of the Java IDE world.

Netbeans does some things very well, particularly Swing development (which admittedly in today’s Web-focused world is a lot like being the best manufacturer of horse bridles and saddles).

Netbeans also faces an uncertain future with Oracle’s acquisition of Sun.

Netbeans at least immediately understand my Maven project. It couldn’t find classes with main() methods that were under the test directory (IntelliJ could) but it otherwise all just worked.

So it was looking good to finally get a profiler running… until I came across a bug. There is at least one open bug against Netbeans that raises an issue against Windows 7. My dev machine is a Windows 7 64 bit machine. Months after Windows 7’s release—nearly a year after the beta version—to still have permission problems is simply unacceptable. Yet that’s what happens when I try and use the profiler.

Conclusion

All this and I still have no profile of my code!

Please don’t waste my time and yours by commenting or sending me a message saying I’m wrong about <insert favourite IDE here>. You’re missing the point of a rant (in that largely there isn’t one).

10 comments:

Anonymous said...

Great post. Take a look at YourKit Java Profiler, it works great with all three IDE's your mentioned and is much cheaper than JProfiler.

Anonymous said...

I won't say you're wrong about any IDE, but you are aware that Java ships a profiler as part of the JDK now? That is largely why the IDEs are not including it and the only things you will find are in the next tier (read: expensive). Just fire it up, connect to any running Java process and look at the results.

William Shields said...

If you're referring to VisualVM, yes I am aware of it. I know I can just connect it to a running Java process (just like I can with JConsole). It's a bit more awkward though.

There is/was a VisualVM plugin for IntelliJ but its basically been abandoned.

I suspect VisualVM is what Netbeans would be using when you try and profile. Sadly that fails on my machine with permissions issues.

See https://netbeans.org/bugzilla/show_bug.cgi?id=178186

Rick said...

Great post. I've long been an Eclipse user, but NetBeans 6.8 has gained my favor. (If you're not an expert at the whole breadth of JEE, check it out for ease of auto-generating projects so you can learn. See a small series on this at rickwagner.blogspot.com)

Hilarious dog comparisons, thanks!

Rick

Mike said...

I missed to JDeveloper and JBuilder. What kind of dog would be...?

William Shields said...

JBuilder is a Moscow Water Dog.

JDeveloper is a Pekingese.

:)

Luciano said...

NB Profiler works seamlessly in Windows 7 64 bit. I did nothing to make it work.

Vladimir Sizikov said...

Same here, NB on Windows 7 x64 works great, no problems at all.

Anonymous said...

Eclipse is far more responsive than Netbeans, for this reason alone I favour Eclipse. Also having many options isn't a bad thing - you just have to know what you're doing. Some people will see that choice as overwhelming and jump to the conclusion that 'it's bend like a Dachshund'. Much like Vi or Emacs however Eclipse powerusers realise this means they can have any dog they want. This is why it's more popular than any other Java IDE. It's also a very pretty IDE compared to the others- Eclipse is no dogs breakfast.

Chris Miller said...

Regarding Jetty + IDEA 9... Peter Niederwieser ported the plugin to IDEA 9, and I made a few changes to add support for Jetty 7 to it. So far there's no build available via the plugin manager however you can download and install it manually from here:

http://www.jetbrains.net/devnet/message/5253527#5253527

Post a Comment