Tapestry Training -- From The Source

Let me help you get your team up to speed in Tapestry ... fast. Visit howardlewisship.com for details on training, mentoring and support!

Thursday, March 11, 2010

Why Eclipse leaves me wanting

I think I've come to understand why Eclipse leaves me always feeling a bit frustrated. Yes, it is more stable than IDEA, uses less memory, has some documentation, and a lot of acceptance ... but even so, it just leaves me cold (and I was an early adopter, signed up for the beta way back in 2000!).

Keystrokes are not modal

The fact that I can type a common keystroke into an Eclipse window and not know what it will do is painful. How a keystroke is interpreted depends on what perspective is active, what view or editor has focus, and what kind of data is being edited in the editor. That's dead wrong; keystrokes are about muscle memory, and muscle memory remembers motion, not context. The end result is that I get frustrated hitting keystrokes and seeing nothing happening. It doesn't help that I cycle between Mac and a PC on most days.

You can't have it your way

A tool as powerful and extensible as Eclipse walks the tightrope of offering lots of features and customizations without overwhelming the user. Alas, Eclipse is lying in a broken heap fifty feet below that tightrope. Eclipse has an unending set of options and defaults for things I don't care about, but anything I do care about seems to never be presents. Here's a few ideas of the top of my head:

  • Stop running launches when I close the project (I often have to kill them from the command line)
  • Give me a quick way to stop all running launches
  • Why so many steps to implement an interface? It's the second most common thing I do!
  • How about a button to quickly relaunch the current running launch?
  • Why are the available refactorings so paltry and where are the 3rd party ones?

Who's eating their own dog food?

When I used IDEA, I was constantly struck by little details that showed that the IDE developers were also its prime users. For example, it has open-type and open-resource dialogs much like Eclipse ... but each recognizes the keystroke for the other, so that if you mistakenly activate the open-type dialog, you just hit the normal keystroke to switch over to open-resource. Eclipse makes you cancel the dialog first.

Another example: in IDEA if you rename a field, it notices the getter and setter and will offer to rename those as well.

IDEA also has lots of quick fixes everywhere, such as "implement this interface" and lots of other tiny, cool things I miss every single day I use Eclipse. It's been about a year since I gave up on IDEA and I still miss it.

Is it cultural or organizational? Eclipse gives me the impression that day-to-day developers either have no concept of how the IDE gets used (and what rough spots are causing some serious chafing) OR they are somehow prohibited from fixing things that are obviously wrong.

If you love IDEA so much why don't you marry it?

So why don't I use IDEA anymore? Two main reasons: first, it's become very bloated, to the point that unless you go in and shut off a ton of features, it's unusable on my hardware. Merlyn has the same problem doing GWT work on his MacBook Pro ... all the help it gives you comes at a cost in terms of CPU and memory utilization and some instability.

Secondly, I tried (even before IDEA went open source) to use IDEA in my training labs and I hit a stone wall of non-acceptance. Switching to Eclipse was a benefit to my students since, even running in Ubuntu instead of Windows, it was familiar and easy to navigate. It also out-performs IDEA inside my Ubuntu Virtual Machine. I simply lack the ability to switch between the two on a constant basis without getting completely confused and frustrated. I had to choose one, and I chose Eclipse: stable and accepted, even if it is brain dead.

Why call it Ugly?

One thing I don't get is how many people claim Eclipse is "ugly" and IDEA "beautiful". I found IDEA to be overly chock-full of modal dialogs and a number of improperly resized (or non-resizable) dialogs and windows. It's a real dog's breakfast in terms of UI, and has the classically ugly Swing look and feel.

I've always found Eclipse to look sharp and somewhat elegant. You can have a debate about the technical merits of SWT vs. AWT and Swing, or the ability to tune Swing to look like SWT ... but SWT out of the box is simply a better L&F visually.

On a Mac they both suck at keyboard navigation, though.

There, I've vented. See what going cold-turkey from Twitter can do?


Brian Deterling said...

I can address some of these:

Stop running launches when I close the project.
- On the launch configuration common tab, you can turn off Launch in background and your processes will die when you shut down Eclipse. I haven't seen any other side effects.

Give me a quick way to stop all running launches.
- I keep the Debug view visible in all of my perspectives. You can right click on any process and choose Terminate/Disconnect All to get rid of all of them at once.

Why so many steps to implement an interface?
- I count 4 or 5 steps (File->New, Class, Type Name, Choose Interface, Finish) so I guess I agree with this one. It would be nice to right-click on an interface and choose Generate Implementation.

How about a button to quickly relaunch the current running launch?
- I use the debug view, right-click -> terminate and relaunch.

I think any IDE will cause you problems if you've never used it or have used another one. I tried switching to TextMate for Ruby development and just couldn't handle the different key bindings. With Eclipse, I can use the same IDE for Java, GWT, Ruby (RadRails), and Flex so any shortcomings are worth it for me.

You should create a Tapestry Eclipse plugin - that would, uh, help you, uh, somehow :).


phoet said...

i think that there are two main reasons why eclipse sucks:

1. no sensible defaults
2. lack of support for the basics

like you said, you can configure tons of features, but you have to digg real deep into the configuration dialogs (which i think suck too!) to find the behavior one would expect to be a default (like renaming setters/getters when renaming a member).

the other thing is the support of the basics. why are plugins like the ant so terrible? i think that the build them for the first eclipse version and never touched it again! it leaks memory, is increadible slow and a pain to use. god bless we now use buildr.

why is there a distinction between the run and the debug dialogs?! i just don't get it?!

Andrew Binstock said...

Howard: Every 18-24 months, I review the Java IDEs for InfoWorld. I've come to the same conclusion you have re Eclipse: It's a cumbersome interface, but provides just enough other goodness to keep itself in the hunt.

The things you rightly complain about in Eclipse bother me far more than they bother you, which makes Eclipse a non-starter for my personal use.

I use IDEA, despite the memory consumption and the slow start up times. Its many well-designed features, the rigorous language checker, and the superior refactoring keep me from switching--despite knowing all the major Java IDEs pretty well.

IDEA v. 9.0 reduces some of the items you complain about. It might be worth a gander the next time Eclipse takes you over the edge.

---Andrew Binstock

Unknown said...

What about Netbeans? Have you tried it?

Unknown said...

What I wish Eclipse had: column-based selection.

The Opinionated Bastard said...

I've switched to Netbeans. Now that it supports maven as almost its native project format, its practically a no brainer.

Anonymous said...

Tapestry could also do better in terms of IDE support: https://issues.apache.org/jira/browse/TAP5-120

Although it might be even better to create a plugin that generates a .tld which includes tapestry components as well as custom ones.

Benjamin Cabé said...

@The Careful Programmer: do you mean http://www.vasanth.in/2009/03/31/eclipse-tip-block-selection-mode/ ?

Davor Hrg said...

You mentioned:
"rename a field..rename getter.."
eclipse also does this for some time now. You have to use ALT+SHIFT+R to quick rename, or CTRL+1 "Rename in workspace"... I you use CTRL+1 "Rename in file" then the get/set will not be renamed.

"IDEA also has lots of quick fixes everywhere, such as "implement this interface"..."
Eclipse also has many many quick fixes you need to know how to activate them.

Many will show up when you write erroneous code on purpose, then just press CTRL+1 and many fixes will be available.
If you pass an instance to a method that requires the object to implement an interface you will get an error and quick fix for that (Let SomeClass implement SomeInterface).