When *Not* to Use an IDE
Iíve been asked to make a post on the dangers of relying on an IDE, so here goesÖ
Tl;dr version: Relying too heavily on an IDE makes you a bad programmer. To demonstrate my point, think about trying to get your girlfriend to write hello world in notepad and compile and run from the command prompt, explaining to her whatís going on in each step. Chances are, sheíd have a pretty good (if not vague) notion of whatís going on, and sheíd be able to explain the gist of the process back to you. Now think about having her install eclipse, run it, set up a new project, generate a new main class template, write hello world using autocomplete, and press play. Even if you tried to explain each step to her, sheíd have nowhere near the same understanding she gained from the simpler approach.
IDEs such as eclipse or netbeans have some amazing features that can help increase the productivity of an experienced developer- autocomplete, code generation, handling of classpath and dependency issues, and deployment are just a few things you can accomplish with just a few keystrokes.
However, inexperienced programmers, or even intermediate coders (or even experienced programmers entering unknown territory), can rely on these features too heavily without even realizing it, which will actually hurt their productivity.
For the first year or so that I was first learning programming (in a Java class back in high school), I used notepad to write all my code and the command prompt to compile and run it. I always had a browser open to the API- some of the most interesting things about Java, I learned by perusing the API randomly while looking for something else. And I became really accustomed to using the tutorials to figure out how stuff was used. I got to the point where I could write a simple gui shell consisting of a JFrame and a JPanel that does some custom painting with my eyes closed. After that, I moved onto JCreator (with only syntax highlighting and the ability to compile, run, and debug within the IDE, everything else disabled). I still used the API and the tutorials as my first source of information.
And thatís pretty much all I used all through college. That helped me become very familiar with the standard libraries and where to go for more information. It wasnít until the very end of college (6 years after I started programming) that I even touched eclipse. Now I use it every day, but I still have the API open (itís always the first tab open in firefox), and I think my ability to go to the tutorials is one of the reasons Iím able to help people here. Most of the time, Iím not doing anything special, Iím just consulting the API and tutorials, which I learned by not using an IDE.
Now, let me contrast that with somebody who uses all of the features an IDE offers from day one. First off, it actually makes writing and running small programs more complicated than it should be. Using notepad and the command prompt, I can have a simple gui up and running in about a minute. But to do the same thing in eclipse, first I have to create a new project, give it a name, specify its options, set up the directory structure, its classpath, etc. This might not seem like a big deal (and it isnít), but all of those options can be overwhelming to a newbie who just wants to write a hello world program.
Even if setting up a project and whatnot is second nature to you, thatís still just the tip of the iceberg. If youíre relying on the IDEís autocomplete feature, thereís a good chance youíre going to miss out on the wealth of information contained by the API. Not only that, but you arenít actually requiring yourself to learn the classes and methods you use. What happens when youíre in a scenario where you donít have access to autocomplete? Say youíre having a test, or youíre helping another developer who doesnít use an IDE with autocomplete, or youíre in a brainstorming session. You wonít always have an IDE available to you, so if youíre relying on one to write code, you wonít be able to write code.
Aside from autocomplete, another problem with relying too heavily on an IDE is that it hides classpath and deployment from you. That can be a good thing, but if you donít know whatís going on under the hood, what happens when you encounter a problem? What if a client (or just a friend you sent your program to) is having problems running your program? You canít very well expect them to install your IDE to fix the problem, right?
I can tell you from experience that people who rely on an IDE throughout their development education turn out to be worse programmers than people who claw their way up without one. Iíve seen people unable to show a JFrame that displays a random color, and Iíve seen people who couldnít even type any code at all- they had to copy and paste it from somewhere else instead. Some of that comes from inexperience, but a lot of it comes from the difference between knowing how to write code and knowing how to make an IDE write code for you.
The one thing I will say in defense of IDEs is that the ability to debug a program is immensely helpful in tracking down the cause of strange behavior. This is such an under-utilized skill in novice developers. But itís possible to use a debugger without using any of the flashier aspects of an IDE.
In the end, itís up to you. There is a huge difference between using an IDE to accentuate your understanding of the language and using an IDE as a crutch. Itís up to you to decide which group you belong to. Try writing a simple program that displays a random color using only notepad and the command prompt. How did you do? Or if your goal is to learn, then the less you rely on an IDE, the better
However, this isnít just true for newbies- Iíve been programming for a few years now, and I still ditch the IDE when Iím entering new territory. Iíve recently been doing Java EE development (JSP, tomcat, and JavaDB). Since I donít really know what Iím doing yet, I write all my code in jEdit, and Iím planning to continue to do so until I am completely comfortable with it. It might seem like things are taking more time, but in the long run, Iím going to end up a much more productive developer with a much better understanding of the language.
Note- This doesnít even touch the concept of GUI-builders that often come with IDEs. But the same rule can be applied to them- they hide whatís going on under the hood, which leaves novice developers clueless as to how to actually program. Plus the code they write is often hideous and hard to debug, so it makes getting help harder. There is a time and a place for them, and in experienced hands they can be useful, but novice users are better off doing things the ďhardĒ way.
Anyway, I hope that helps!