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.
Anyway…
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!