life, the universe, and everything (although not always in that order)

Tuesday, March 28, 2006

In defense of Eclipse vs. NetBeans

There's a post over on EclipseZone titled "Too Many Cooks Spoil the IDE", wherein the author, Robert Thornton, takes Eclipse to task over his difficulties with the tool. In essence, his complaint is that the "incoherent complexity" of Eclipse makes it difficult to use efficiently and makes the tool fragile and unstable. As a former Eclipse user I can attest to some of the "incoherent complexity" if you stepped outside of the Java development environment. But I can also attest to the very high quality of the application as well.

My Eclipse experience began in earnest (starting with versions 2.x) when I used it on a large program I was a part of called WARSIM. The WARSIM team turned to Eclipse over two years ago in order to effectively handle the development of a very large Java-based application that we inherited from another development team. That team had used JBuilder version 5 for its IDE. When we were given all the existing application resources, we were also given the existing JBuilder licenses, but no funding to upgrade or maintain JBuilder. And that was a problem. We knew when we accepted the Java-based app that we were going to upgrade it from Java 1.2 to 1.4. JBuilder was locked into using JDK 1.2, and it was already a generation behind when we got it. With no money to upgrade the JBuilder licenses, I started to look at alternatives.

I first looked at NetBeans 3. I found it to be slow and I had issues with the interface. I had several other engineers evaluate NetBeans and they came back less than satisfied as well. I then looked at Eclipse. I was immediately impressed by the performance of the IDE. I found it snappier than JBuilder, and certainly snappier than NetBeans 3. There were other Eclipse features I found superior to NetBeans. In particular, the editor pane showed every error in a given file and the problem view showed every problem across all the files in the project. I could change my problem view filter and quickly search for (and fix) a given group of problems. And I certainly appreciated how I could open up my project, and see visually which packages had warnings (and errors). Eclipse was a great tool that helped us to continue to efficiently develop high-quality features and capabilities for the WARSIM UI.

Eclipse's built-in compiler was a great help as well. The IDEs ability to compile code as it was entered, line-by-line, without impacting overall performance was amazing at the time. It just made writing Java code that much more productive and enjoyable. And then there is the superb refactoring support. During one session I removed an older problematic library used extensively throughout the application in order to use equivalent functionality available in Java 1.4. Once again the Eclipse IDE's features helped manage the complexity of the changes involved such that my work didn't impact the work of others in the group. I was able to make my changes, integrate them back into the main branch, and not impact the schedule or the deliverable in any negative way.

If you use Eclipse for what it was originally intended, as a powerful Java IDE, Eclipse has stood, and continues to stand, as first among equals in the free Java IDE field. But if you stray from that primary capability, you begin to see some of what Thornton talks about. You'll find a boat-load of extensions, many of varied quality. While I've only sampled a small handful, I can see where someone would get pretty annoyed by the varied quality, especially when compared to the core capabilities of Eclipse. There's only one other Eclipse plugin that I've installed and use along with the core IDE, and that's Subclipse. Everything else I've ever installed has eventually come back out because it just wasn't as good.

Even though I think quite highly of Eclipse, there is one reason why I moved away from Eclipse and to NetBeans. It is, in a 'word', SWT. Thornton is right to call SWT "a wedge" being driven into the Java community. Sun correctly saw SWT as a challenge to JFC. At the time I started using Eclipse, SWT was considerably better in overall quality and performance when compared to JFC. And Sun was correct in its response to SWT. It fixed the issues in JFC that SWT was attempting to address, and it did so within the overall Java ecosystem so that everything benefited. The original reasons for using SWT over JFC I feel no longer exist.

It is for that reason, coupled with NetBean's remarkable evolution over the past 12 months, that I've switched from using Eclipse to using NetBeans. NetBeans 5 matches the set of Eclipse features I discovered I wanted for developing Java applications. Further, it allows me to add extensions to the platform using existing Java applications, especially applications based on JFC. NetBeans has changed such that I find it better fits with what I want to do today in Java development. But just because NetBeans is better suited for my needs today than it was two years ago does not mean that Eclipse has 'fallen' or somehow gotten worse. Everything that made Eclipse the right choice for me two years ago is still there, and has been enhanced over time. It's simply that my needs and goals have changed, and NetBeans better serves them. Eclipse will continue to be quite successful, as will NetBeans. I have never believed that for NetBeans to succeed Eclipse must fail. NetBeans and Eclipse need each other. The need to create a fierce, but healthy, competitive environment. We all need both for the simple reason we all need choices in open tools. I sincerely wish the best to both Eclipse and NetBeans.

My experiences to date have been with using NetBeans 5 and Eclipse 3.2M5a on Windows XP and SuSE 10. The hardware platform has been a notebook using an Intel Pentium M 2.13GHz with 1GB of RAM. It dual boots between the two. The JVM I've been using on both has been the latest Java 6 drops, in this case beta 2 build 77. I'm using Java 6 in order to take advantage of sub-pixel anti-aliasing on text for NetBeans. It works great on Windows XP, and works just as well if I log into SuSE using the Gnome desktop.

Having said that, I do notice that NetBeans startup is somewhat slower than Eclipse. But in my case, I have all but two of my Eclipse projects closed, while I have four open in NetBeans. And when I say slower, I'm only talking a few seconds.

Because I change the JVM out from underneath NetBeans a lot, I have noticed that every time I do NetBeans takes a long time to come up right after the change. But after that, subsequent restarts are just as snappy in NetBeans as Eclipse. I am assuming the initial slow start is due to NetBeans building up cached items related to the JVM it's running on, but I can't be sure.

As a final note, I find the look of NetBeans on Windows to be a little better than Eclipse on Windows, while I find the look of Eclipse to be a little better than NetBeans on Gnome/SuSE 10. Otherwise they're both excellent tools.