“Yes, you could throw emacs and volumes 1-5 of The Art of Programming at your development team. Or you can buy them the best, most advanced development tools on the market. Which approach do you think will be more effective?”
If I had seen that quote in any other context, I would be wondering why two identical choices were being presented as alternatives.
We’re not actually talking about development tools here–we’re talking specifically about code editors. Development tools have for many decades had the ability to do partial builds and analyze code for errors. This capability is not new–what is new is to have, or even to expect, these analysis capabilities built into your code editor, which therefore makes it distinct from other kinds of text editor.
I don’t mind developers who prefer to use analysis-rich editors. What I can’t tolerate is developers who can’t use any other kind (or, perhaps more precisely, the managers who hire them). This is kind of like hiring cooks who can’t chop onions with a knife, but insist that because they can use a cheap plastic onion chopper (like the ones so many of us have gathering dust in our cupboards) is a substitute for basic culinary competency. Chefs spend years of their lives doing little more than chopping vegetables. I’ve often found myself wanting to say (and once or twice, actually saying), “look, if you can’t write code in this language without Visual Studio or something else prompting you every third line, I need you to go somewhere else and not bother me until you can.”
Feature-rich code editors tend to warp the developers that use them, often in ways they are not aware of. I’ve known a number of people who were unable to use useful language features simply because they were not supported by their code editor. In C++, you can’t look up method names on a function parameter of unknown template argument type in any code editor because the parameter type is unknown–yet, it is precisely because the parameter type is unknown that templates are so useful and important in C++. I’ve seen developers who come across one of these and just go blank because their IDE suddenly stops telling them what the type of every pointer variable is, and they have no other way to cope.
Personally I find syntax checkers and similar code-criticizing tools useless because they are not helping me synthesize code, they are just analyzing its flaws–and all too often, this analysis takes so much CPU and RAM out of the machine that the editor stops being able to keep up with me, which is the point where I stop using the editor at all. This problem is huge on very context-sensitive grammars like C++, where a template declaration in a header file you’ve never heard of can subtly change the meaning of statements throughout your entire program. vi, for all its flaws, never has that problem–it never gets an order of magnitude slower because a single line was added to a different file.
If an editor is going to help me, it’s going to fill in automatically the close parentheses, the “else” branch of the “if” statement, the names of the arguments of the function whose name I just typed, the set of identifier names whose prefix I typed before pressing TAB, in the context of a partially typed expression around the mouse cursor. At least those operations don’t use system resources until I explicitly ask for them, or save my poor tendons from some typing.
A helpful editor won’t sit there saying “nope, the function’s not named f…nope, the function’s not named fo…ok, the function’s named foo, but something’s missing…you’re missing a close parenthesis…you’re still missing a close parenthesis…”. That’s just replacing the Clippy The Paperclip with Gilles The Digital Git.
The last huge complaint I have about such tools is that they are utterly useless outside of an extremely narrow context. A syntax highlighter, for example, I would find to be a quite useful and valuable tool, except that most syntax highlighters are useless when editing code that generates other code–which makes them useless for code that talks to an SQL database, or that generates HTML or Javascript. An editor that can look up C++ method names when clicking on an identifier is fine, but I want the same editor to do this lookup in all six of the object-oriented languages I use, not just one or two.