The importance of a good IDE: which one to choose (and why)?
A few months ago, when I was trying to start developing for maemo, I discovered a project called ESbox. ESbox is "an Eclipse Ganymede-based product that helps programmers to develop applications for Maemo platform using Scratchbox Apophis". It launches scratchbox transparently, includes wizards for different types of apps, lets you debug step by step and on device, and also uses C/C++ or Python plugins, so you can refactor code, jump to variable declarations, explore types, autocomplete...
I don't know exactly when it was, but I once came to maemo IRC channel to ask a specific (maybe too specific) question about ESbox. I was surprised that nobody was using it: people there were using nano, vi, Emacs... I asked them about all the features a "full IDE" offers: what about code refactoring? what about autocompletion? debugging? While some said that you can get emacs to auto-complete from a given dictionary, the other questions remained unanswered. In fact, I almost felt like we weren't talking the same language.
Our discussion wasn't constructive at all: I don't know if it was the language barrier, if it was me who said something inappropriate in the beginning, or if I met people too "Taliban". The thing is that I had to listen things like "real programmers know the name of the functions / methods they need: autocompletion is for dumbs". And no, it wasn't a joke like "real programmers develop their own device drivers". So I gave up and left the channel: I assumed that programmers would choose their IDEs according to the kind of development they were doing, so "hobbyists" would use nano, would copy & paste and wouldn't care too much about extras, and "professionals" would use others, or at least would know and use the extras I wanted. And time went by.
As I was telling you in the last post, this Friday we've got our first session in the Desktop & Mobile development module of the master. After its presentation, we had a brainstorming to choose which app we will be developing during the workshops, and then... we started talking about IDEs. More specifically, Emacs.
That gave me the opportunity to confirm that there really was a difference between professional developers and non-professional, and that my worries were really shared by others. It was a really interesting chat, where we were explained the environment, from the basics (navigation a buffer, open, close, kill and yank...) to more complex things: debugger integration, syntax highlighting modules, autocompletion, macros...
After the session, I now can understand other people not using Eclipse or Netbeans, while still being productive. I'm not going to use Emacs, not yet, as it looked like some of the features that "just work" in Eclipse require some fiddling in Emacs; but at least I know that someone using Emacs and mastering it will be as efficient as an Eclipse user -or even more.
Still, when I think about the things I like to have working in Eclipse, the following comes:
- Version control: I'd like to be able to check history, undo changes across revisions, commit changes, check "who did what" (blame)
- Debugging: Set breakpoints, set conditional breakpoints, step by step debugging, variable inspection
- Syntax highlighting, code folding, autocompletion (preferable if it can include code I've done, not only know APIs), code refactoring (variable names, methods, etc), comment & uncomment.
- Compilation management: Make integration (or other options like ant or maven for Java). Build automatically, "live" syntax error detection.
- Bug tracking system integration
- GUI editor
I know that I can do all of the above using Eclipse, and since this Friday I know that some of them are also possible with Emacs, so now I'd like to have some feedback:
What do you expect in an IDE? Is your list similar to mine? What is your IDE of choice? Which special options of your IDE you use the most? Which options are you most proud of?
April 12th, 2010 - 22:30
I’ve never liked Emacs too much, it is also true that I never tried it hard
.
I don’t demand too much from an IDE, but there are 3 functionalities that are basic to me when I’m dessed my the “professional” jacket:
- Code highlighting and autocompletion. I work mainly with JAVA, a language with a very rich API and a lot of usefull (and even necessary APIs). Without autocompletion I would be less productive (especially when I have to make use of APIs or libraries that I don’t use often). I would be navigating through javadoc all day D.
- Refactoring. Absolutely essential when I’m doing mainteinance or extension work!!!!
- Integrated debugger. I work almost exclusively developing distributed software, a pain in the ass to test. So, having a good debugger with graphical tools makes my a life easier when I’m hunting for errors.
I don’t usually use other funcionalities from an IDE. Maybe are habits, but I prefer to do things like version control from the console.
Nevertheles, when I develop software as a hobby, my habits changes considerably. It is usual to see me working with vim… and the most advanced tool that I usually use is Geany, because its “little” C/C++ autocompletion.
I think that maybe is the language (or platform) of development what really affects my development tools decisions. The JAVA software I work on tends to be big and complex (one of the projects I’m working on is composed of many subprojects and have more than 1000 classes and about 80.000 lines of code…) and usually make use of a lot of (internal and external) libraries. Without some automated tools it will be a hell… On the other side, my hobby developments are usually small, ad-hoc and experimental, and usually written in C/C++ without the use of too many external libraries so… I don’t need too much help to manage them (and is funny to work at the low level!
).
April 13th, 2010 - 11:36
I miss in your list the automatic generation of code, it is a great feature. If you have a class with 20 attributes, and you need to build getters and setters, it is a timesaver.
Moreover, if you are smart enough (not much smartness needed), to have shortcuts assigned to the “generate getters and setters” and “generate constructor using fields” options, it is like heaven when building an entire Value Objects layer (some kind of geek heaven, “entendedme”).
April 13th, 2010 - 11:48
My desired feature list overlaps with yours, but it’s a bit different:
- Syntax highlighting
- Autocompletion
- Code templates
- Integration with revision control system (compare revisions, view history, commit, update, view revision graph, etc.)
- Refactoring tools
- Integration with build systems (ant, etc.)
- Auto-indent (priceless especially when committing to projects with people with different indenting styles, etc.)
- Highlighting for auxiliary files, e.g. XML
- Instant error checking (i.e. the red underlines in Eclipse)
- Handling of TODO lists, TODO marks
- Automate repetitive tasks like importing namespaces
Eclipse does all this for me in nice and efficient ways, so it’s what I use all the time.
I don’t use debuggers, I’ve been programming for years in different languages and still don’t personally see the point. I prefer ad-hoc print statements for toy projects, logging for bigger ones.
“Bug tracking system integration” in your list sounds nice, but I have never used that. Does eclipse have it, and for which trackers? Anyway I use Google Code (I can’t get users to upload bug reports to other more complex trackers due to the hoops they have to jump through) so there’s probably no integration for that.
I also don’t care much about code folding, it’s a useful feature but I never got used to it.
April 13th, 2010 - 12:30
@Al-Khwarizmi, Eclipse provides, via Mylin, a plugin to read its “issues list”, and present them in a panel. With that plugin, you can check an item so you are “working on it”, and an internal time tracker starts counting. When you click again, it stops, so you can know the time spent with it. I don’t remember if you can set the issue state in such a nice way: I know I had to use an internal browser for some of the tasks. But, overall, it was a good integration (it’s far better with more used solutions like Bugzilla). Start searching at [1]. It looks quite outdated, but the idea (and the search keywords) remains the same.
@Isma, @Al-Khwarizmi: Yes, automatic code generation using templates is very nice, too. You can use it to add the project license on the top of each file, to help you with documentation… I find it very useful.
@Baturix. I agree with you about hobby projects vs bigger ones. Maybe setting up Eclipse to do some of the more advanced things is like “overkill” for most of the small projects one might be interested in.
[1] http://eclipse.dzone.com/articles/using-mylyn-with-google-code-u
April 19th, 2010 - 23:15
When I’m working in Java I almost exclusively use Eclipse. I got used to it in the last year of college and the few times I’ve used NetBeans (the other obvious contender) I’ve never felt that comfortable with it (it’s been a long time, though).
As for the virtues of Eclipse, I’ve got very little to add to the list given by Al-Khwarizmi, just remarking the really huge difference with “Non-IDE code editing” that Autocompletion and Instant Error Checking make. I also agree with him on the thing about debuggers. Maybe it is because the kind of programs I write, or the kind of errors I’m most prone to make, but I find faster tossing some println’s into the code than using a full-fledged debugger.
However, as I’ve said, that’s when I’m working in Java. To write the (mostly Perl & awk) scripts I use to process the output of the Java programs I usually use gEdit or the integrated Midnight Commander editor. Both are capable of syntax highlighting, and the process is like this: I write the script in gEdit, and when I have to do the fine-tuning of the (usually big) bunch of interlaced scripts nothing tops the Midnight Commander to switch between files, copy this to there, show this other file with the intermediate results, etc. Also, it comes in very handy for editing files in other machines.
April 20th, 2010 - 09:30
My preference is use a complete and heavy IDE like Netbeans, Eclipse or XCode.
The reason of this selection is my ignorance about using CVS, compilation options, attach libraries, generate makefiles …
Continue being ignorant is not a recommendable way but is i use a extreme programing style called “the code must be completed tomorrow and only a few hours left”, under this style and heavy IDE is a necessary element
April 27th, 2010 - 15:49
Por certo,non sei se é a miña pantalla ou é o ‘template’ así, pero as entradas do blog quédanme na marxe esquerda bastante apretujadas ¿é así? Semellaba mellor colocado os comentarios recentes debaixo do calendario.
Ta loo!!
Pdt: non falo en inglés porque non quero que se remova shakespeare na súa tumba
May 1st, 2010 - 18:06
@Runik Era o template así. A mín tampouco me gustaba, pero como nun primeiro momento non me convencera ninguhna outra template…
Esta ten mellor pinta. O asunto é que me sorprende que non a vira antes, así que hai moitas probabilidades de que sexa o mesmo diseño dalgún outro coñecido
May 1st, 2010 - 18:10
@Edu: yeah, looks like there’s an agreement on that, and many people who uses Eclipse for medium to big projects, uses other smaller IDEs for common, fast tasks.
@Luzem. And that’s right. Lots of times a good IDE hides complex details we don’t want/don’t need/don’t have time to learn.
However, I still miss at least one “Emacs FTW” comment…