I've noticed myself becoming biased against developers who claim to not use any IDE as part of their normal course of development. Am I right to think less of their abilities and productivity because they choose to develop in a text editor, even a powerful one meant for coding? This bias isn't uniform, as there are cases where an IDE makes more or less sense. I would say that:
- My bias is much stronger in the case that the development community for a particular language or technology tends to develop in an IDE, and there are several very powerful and well-thought-of IDEs, see for instance, the Java development community.
- My bias is stronger in the case that the developer is/has been doing Enterprise-level development. I have a forthcoming post discussing that concept in detail, but in a nutshell, I am biased against non-IDE developers who are building something where users are paying for the service and expect a high level of robustness and stability over a long period of time.
- My bias is much weaker in the case that a user is a recent grad and may not have been exposed to IDE-based work, or is doing research-y type work that might be hindered by an IDE.
The development world seems split on the issue of whether or not IDEs are a Good Thing or Bad Thing for developers. For every "10 reasons to use an IDE" article out there, there is a corresponding rebuttal. This article from a few years back goes into great detail explaining the core difference between Language Mavens and Tool Mavens, where the former tend not to use IDEs since they lack support for the latest and greatest languages and features, while Tool Mavens favor the power of tools over language capabilities to magnify their productivity. However, in my experience, being a language maven , i.e. using cutting-edge languages and features, is something of luxury in The Real World, where you are interfacing with legacy systems and often have to work with what is already installed somewhere, so your choices are limited. In that sense, I discount the Language Maven perspective.
In a broader sense, I don't actually understand how developers create systems of any significant scale without using an IDE. It just seems like you lack so much context that performing a task of any complexity becomes unwieldly. Speaking from my own experience, I have built systems that would have been basically impossible to create if I had attempted to write them outside of an IDE. My experience may be unique, since I do primarily Java development, but here are a smattering of things that Eclipse handles for me that emacs (my old "IDE") could not:
- Build Automatically - Every time I save a file, the entire source tree is rebuilt. I see any errors or warnings I've created instantaneously. I actually can't remember what development was like before Build Automatically. Oh wait, yes I can: I also use Visual Studio regularly.
- Refactor Change Method/Class/Variable name - Without this capability, names have inertia. It's a pain to find every reference and update it, so things have names that are out-of-date. They don't accurately describe what something does because the nature of a class or method has changed over time but no one wants to fix it. Misspellings are never corrected. It leads to subtle, but painful, bit rot. In Eclipse, I can change the name of a class or method or variable as fast as I can type it, and all references are automatically corrected, so I have no barrier to keeping names up-to-date.
- Run Tests - I can one click run my JUnit test suite, so I do it all the time. You can do this without an IDE, but it's more difficult. When I used emacs, I would keep a shell open and rerun the tests, but it was much harder to process and understand the results, and to remember to keep running the tests because they were out of sight and out of mind when I was writing code.
- Ctrl-Click to Jump - I'm guessing emacs could be retrofitted with this one, but I don't think I've ever seen it. In Eclipse I can hold Ctrl and click a method to jump to the method definition. When I'm done, I can use the "back" button to go back to where I was editing. In the newest versions of Eclipse, I can hover on a method to see a some or all of the source code in a tooltip without leaving the current file, while frequently eliminates the need to ctrl-click at all, and helps me avoid breaking my current train of thought.
So if I talk to a Java developer who doesn't use an IDE, they are - Find References - It's nice to be able to get a caller graph of a method to see exactly where it is being called, and who is calling the calling methods, and so on. Again, this could be retrofitted, but it involves a deep parse of the code base, something that non-IDE editors tend not to do.
So if I talk to a Java developer who doesn't use an IDE, they are basically telling me that they:
- Do a lot of development without recompiling their code, so there can be a big delay between when they introduce a compile error and when it is resolved.
- They generally (unless they are extremely disciplined) avoid altering class, method, and variables to match changes in behavior or implementation.
- They are unlikely to have a large, frequently run test suite.
- They probably spend a lot of time scrolling through files looking for methods instead of writing code.
When I write it all out that like, my bias certainly feels justified. While those are broad pronouncements about someone's capabilities just because they don't use an IDE, I'd love to hear the counter arguments. Are there developers out there who shun an IDE and feel like they are gaining other advantages that outweigh the above, or that they have similar capabilities that I'm just not aware of?
