IntelliJ and Eclipse
Well I thought I'd never stoop so low as to enter into this flame war on my blog, but Patrick's Eclipse Live Templates post is worth keeping, so I may as well document my feelings also...
As everyone knows, Eclipse is the best IDE out there, it's the only choice right? Very wrong. Sure, Eclipse has the market share, has more plugins, and widepsread industry support, but is it really a better IDE? My take on it is no. Yes I can use it, but it feels like the difference between riding a hardtail vs a dually. Sure they both get you from A to B, but one is much nicer to ride and doesn't hurt your ass as much. Another analogy I like to quote is that Eclipse feels like using Word, it tries hard, but in the end you end up fighting the editor just to get work done.
I've been using Eclipse a lot lately (by a lot I mean a couple of days solid) as we're merging between branches and IntelliJ does not support this (as far as I can tell anyway). I've also had a lot of people ask me for my opinion on IntelliJ as we've got some spare licences floating around and most of the guys are using Eclipse.
Eclipse does have some good things going for it.
- Better CVS support. Eclipse seems to have re-thought the entire revision control experience, making it easy to work with. This does have it's downsides, like Eclipse only developers who don't understand CVS or Subversion fundamentals (and cannot operate outside of Eclipse) or with CVS gurus who cannot understand Eclipse's naming of operations and its workflow.
- Better use of screen real estate. The tree in the Package Explorer is a good example of this. Eclipse seems to use much less horizontal and vertical space in the tree view, allowing more classes to fit in a given screen size.
- Eclipse looks nicer (by default) to me, perhaps owing to its SWT heritage vs IntelliJ's Swing. Its window management is a bit more advanced also.
- Eclipse's debugger is apparently better, I say apparently as I haven't noticed it myself. It supports threaded apps in a more logical way, by sticking to a single thread and not jumping threads when breakpoints are hit in these threads.
So what are the bad things?
- Eclipse requires you to save all the time. This gets very annoying when you're used to IntelliJ. Say for example you make a change to a test and you want to run it, why wouldn't I want to save the test file. This stuff should just happen without the need to prompt the user. File management should be taken care of. IntelliJ does a good job of this and allows it to be configurable (the save timing that is), to the point where you forget about it altogether. If you want an older version, it's in CVS (cause you're doing tight spinning when writing new code) or in the local history.
- When comparing files (select two projects, right click, Compare With -> Each Other), copying all changes from one file to another (called "Copy All Non-Conflicting Changes From Right to Left"), Eclipse does not warn you that you need to save the file (I'd been using a different form of merging/diff - the Compare With -> Another Branch or Version... - where this change is automatically saved). So I'd been happily chugging along all morning, when Eclipse crashed, losing a few hours of work. On the plus side, when you do hit save, it quickly shows you the "file has changed" symbols, saves the file, then removes them. Very helpful.
- Eclipse has serious usability issues in graphical diff (Java Source Compare) screen. 1) When merging differences, Eclipse continues to highlight changes, even though they've been applied. Whereas IntelliJ will remove the coloured background and border from changes that you've already applied. This provides an easy visual clue that you've complete a merge. Also, the little buttons for merging are too small, have icons that look the same (probably a result of them being too small, you can see the differences if you look closely) and are in the wrong position. IntelliJ gets this right, by placing the the icons (a cross for delete or directional arrow for merge) at the point of difference, allowing you to clearly see the affect clicking will have.
- Like Word, Eclipse wants to own your files and wants you to make all your changes through it (I assume so it can keep its caches up to date). So if I change a file on the file system (say to back out a change because Eclipse won't undo), Eclipse continuously reports that the file is out of sync with the filesystem. Why on earth it doesn't just sync it and be done with it is beyond me. Now I have to a) remember where I am in my merging, then b) get out of the view, c) re-sync the project and d) re-compare the projects and e) go back to where I was. Again, a little thing that really gets in the way of productivity.
- Eclipse's two ways of comparing do not give the same result. CVS differences (select a project, right click -> Compare With -> Another Branch or Version...) show less files than a straight file system difference (select two projects - representing different branches - right click, Compare With -> Each Other).
By now I think everyone knows my view on the matter, but my short summary is that while Eclipse is fully featured, everything is done in such a half-arsed way that I really don't know how people can use it on a day-to-day basis. I think I'd prefer to go back to using a straight text editor than be forced to work around its inadequacies. And why is IntelliJ better? It just feels right. That's the best way I can put it. Like any tool it takes a while to get used to it, its keyboard shortcuts, etc., but once you learn these you'll never willingly go back. It seems to know what you want to do and will suggest things to improve the way you work all the time. Everyday I find a new thing to like about it. Its smarts are not the Word breed of smarts however. You always have control and it does not bend you into its way of working. It's a tool that works with you rather than against you.
5 Comments:
I'm an eclipse user, I have not used some of the features listed here however the file management issues raised I agree with, they are counter-intuitive. After recently using intelliJ (for 2 days only mind you, not long enough to form a real opinion) I found their auto-complete quite annoying. I'm quite happy to see everything in the classpath when trying to auto complete a class name so I don't see the need for three different auto-complete flavours. On top of that the case sesitivity thing annoyed me greatly, maybe it assumes that if you start typing with a lower case letter that you're trying to complete a variable name but I want to be able to type "stringbu", hit Ctrl+Space and have it suggest StringBuffer.
As I said I did only use intelliJ for 2 days on a course and while I agree with the file management issues this is one thing that really bugged me. There is no perfect IDE, they all have their benefits and disadvantages for the user to work around. To religiously side with one or another is as stupid as the Falcon/Commodore debate (with the exception that both of these vehicles suck donkey balls). So intelliJ or Eclipse? I'd quite happily use either and just customise as many of the annoying bits as I could to my own will and live with the others.
His Royal baldness.
@marc:
Go to IDE Settings | Code Completion | Case sensitive completion switch to "None" and your done. 'stringbu' will work now.
Besides this, if you want to type less letters try typing 'SB' and hit Ctrl-Space or Crtl-Alt-Space.
Marc Loxton said...
> There is no perfect IDE
Yes there is. It's called IntelliJ. I've used it for six years solid, and it continues to delight me in ever increasing ways. Nothing about it is bothersome. Using it, it becomes quickly obvious its designers and developers really have their sh*t together and thoroughly understand development. And its licence fee is very reasonable. I have a personal licence, and it has paid for itself in spades.
I use eclipse a lot at work and something that's always bugged me is that in the "Compare Editor" there are buttons for copying changes from left to right and from right to left, but the left to right buttons are always disabled... What kind of logic is running THAT??? If I'm in "synchronize versions" then yes there IS a possibility that I want to KEEP some of the work that *I* did and commit that to CVS... and there's no way to do that in that editor! I can't commit from the project view because there are unsynchronized changes. I can't synchronize them in the synchronize view because the editor won't let me make a change to the remote file! Useless!!!
Eclipse looks nicer...
Having been a long time user of Intellij I have finally spent enough time with Eclipse to understand it more than superficially. I have made attempts before but simply could never get past what appears to me to be such a ramshackle UI. I honestly thought it was in beta when I first saw it.
This is was my loss because it is a very powerful tool. I find the the way Eclipse handles revision control to be much better than Intellij. Still, it's not enough for me to jump ship.
Post a Comment
<< Home