I've lately more and more heard a lot of hate for IDEs (Integrated Development Environments), especially among open source developers, a lot of people calling them an "evil", a "language smell" or so on. Stating that they "Enable bad coding" or that they are a hindrance to development.
I've even seen people on forums trying to teach programming saying things to the effect of that users can start out using an IDE but that they then should move to using a text editor and separate tools since otherwise they won't really learn to program.
What do I do?
I do development both in IDEs (Visual Studio and Xcode) and just using text editors (Vim or Sublime Text 2) depending on what I'm doing.
I also use both Xcode and Visual Studio on the same project as they have different strengths.
The obvious strength of Visual Studio is of course that it runs on Windows which makes it pretty much the default choice there for compiled code, but other than that it also has some great plugins (like Visual Assist X), it ties in nicely with the debugger in it and it is pretty rock solid (at least 2008 sp1 which is what I use the most, pre sp1 it was pretty horrendously crashy and 2010 seems pretty crashy from my testing).
Xcode is actually pretty fast and stable as of 4.5 and on (it was pretty horrible in the early 4.x versions) and it has nice quick navigation features. It also ties in really nicely to lldb and provides a really nice interface for debugging highly complex things like multi-threaded applications. It can give a really nice simple breakdown on all running threads, if a thread has crashed it will tell you where it did and what the state is of every thread in a very friendly simple, list-based interface.
I guess at this point you have realized what are the obviously left out things:
- These things run on OS X and Windows, but I also do work on Linux.
- My focus is on compiled code, in languages supported by those IDEs
For things that either don't have good IDE support or that I haven't found an IDE I like for I do mostly resort to a text editor. These days it's a bit of a toss-up between Vim and Sublime Text 2.
On Linux I actually always use a text editor, even with compiled languages. This is since I really don't like any IDE on Linux. The closest to an IDE I like is Qt creator, but it still has too many issues for my taste. If there was a really great IDE that I enjoyed I would use it, but for now I stick with either Sublime Text 2 or Vim when developing on Linux.
Why all the hate?
Basically it seems like most hate for IDEs boils down to one of three things:
- IDEs are slow
- IDEs encourage bad code structure
- IDEs are distracting
I see it as this:
IDEs are slow
Well, it is true that Visual Studio is not as snappy at starting up as Vim is, and it does have some actions that can really bog it down. However, in general day-to-day use on a modern fairly beefy desktop computer I do not really experience the tool slowing me down.
Through the navigation of source an IDE provides and the built-in tools it can actually help me work faster which means it is, to me, not slow.
IDEs encourage bad code structure
I've actually seen this as part of jokes on behalf of Java quite a few times. Essentially I can't say I've seen this as really being a thing. From experience I must say that it's as easy to write terrible code in Vim as it is in Xcode.
It may be easier to navigate bigger codebases in an IDE, which to some means that it makes it easier to write more bloated code due to that it's less cumbersome to deal with, but I don't buy it as it's still always even faster to navigate less code than more code.
IDEs are distracting
I think that this is a really weird statement, but I've heard it made in person on more than one occasion. To me an IDE is far less distracting than say, having Skype running in the background.
Sure, having a bunch of buttons, doodads and whatsits plus code completion and all kinds of frills may be incredibly distracting, especially if you aren't used to it. One of the first steps I take when setting up Visual Studio is turning off all the toolbars as I don't really think those are worth my screen space, and this is a really easy configuration step for someone like me who have been tweaking their .vimrc since 1995.
Things like code completion and other similar things for generating code for you mostly take getting used to, much like a text editor will also require building some muscle memory before it is really useful.
Where does this leave us?
Essentially I haven't really answered the question "Why should I use an IDE?", but that wasn't really what I set out to do. My goal was to try to dispel preconceived notions about IDEs and that we would all be 100% more productive if they just went away and I don't really think that is possible, but I would want to leave you with some small parting advice:
- Try various IDEs, maybe you've just used IDEs that you didn't really like rather than hating the whole concept.
- Try to let go of the preconceived notion that you think that you will be more efficient in Nano and really try to embrace the way the IDE works rather than just seeing it as a slightly fancier text editor.
- Play to the strengths of your tools. For example Xcode is great for debugging threading issues whereas Visual Studio… not so much. Even if you find an IDE you like you may not want to use it for absolutely everything, and you don't have to.
I guess with all of this I'm trying to say: Experiment with an open mind and you may be positively surprised.