OK, I may be biased a bit (well, hell, I *am* biased), but I've worked both ways, and I can honestly say that I'd never, never, never want to go back to using the command line and a plain text editor to do my java development.
Some of the ways that IDEs make my life so much easier every day are (and I'm not just advertising the particular features of one IDE here: most IDEs have all these things and more):
- Integrated debugging (how anyone can cope with the intense fiddly-ness of jdb on a daily basis is beyond me.. well i guess there's always System.out.println()
- Single keypress compilation (even using Ant)
- Source Control integration (not such a big issue for systems like CVS when you can always edit files depending on how you work, but a big plus for other SCM systems like Clearcase where you have to checkout before editing)
- General project management e.g. organization into packages (I don't miss having 129 MDI child windows open in TextPad and trying to find the files I'm working on)
- Integrated profiling (geez, how many tools do you want to set up your classpath in?)
- Refactoring. Sans-IDE this is a common cause of the 129 MDI child window nightmare mentioned above, coupled with the endless-cycle-of-search-and-replace. In many IDEs these days, I can just move a class or extract a method and wow.. it updates the references for me.
- Code insight. Some people love it, others hate it. To me, it's an alternative to switching to my web browser to look stuff up in javadoc all the time... ok I've pretty much memorized the order of the 11 parameters in GridBagConstraint's constructor these days, but it's always useful to have a reminder for the more obscure APIs
- Clever code editors. The code editor I use not only auto-indents, it automatically inserts closing braces for me and is generally very intelligent about java code and its syntax. I can tell it to sort out all the imports for me (narrow them, widen them, remove usused ones, sort them). I can comment out chunks of code, jump to the java code or the javadoc for the class of a field or variable in my code. Probably again a case of what you're used to, but whenever I switch back to TextPad to fix the odd one-liner, I really notice that I'm having to do all the drudgery that my tool normally does for me.
- Extensibility: if my IDE doesn't do what I want it to do, I can just hack some code together in Java and plug it in. I've got full access to a wealth of utilities for generating and parsing java code.
- UI Editors: OK, these are mostly the weakest link in most IDEs. Having said that, the code that they generate isn't usually too bad. I haven't seen many IDEs these days that generate proprietary code in UI, and if the IDE is half decent, you can freely hack about with the code outside the editor and it'll cope just fine. I use UI editors a lot to get the basics of my UI laid down (and in an effort to forget those 11 parameters to GridBagConstraints' constructor), then I tweak the code a bit in the editor.
And all of that's just scratching the surface. At the end of the day, I agree, it's a personal preference thing. There's also a bit of a ramp-up sometimes before you discover enough of the features of some IDEs well enough to get really productive in them. I still believe that most people are more likely to be more productive using an IDE.