News flash, guys. The tools that enable you to do your job are important. What, did you think your profession was somehow different from every other one out there?
Okay, let me back up. Earlier today I was browsing the rather ridiculous subreddit r/programming (which just celebrated a massive milestone – one million
bad programmers subscribers!) when I found a silly little article called You are not your tools. I thought it was an egregious enough article that it warranted a strong response (and a good spanking for the author).
Interesting. Please explain.
There’s a growing sentiment among programmers that what you use has nothing to do with programming1. It doesn’t matter what language you decide to learn since they’re all Turing complete anyway – and besides, you should always pick the best language for the job, rather than investing in just one (did you catch the contradiction?). If you follow this advice to the letter you’ll be using a different language for every single job, big or small. People who peddle this nonsense vastly underestimate how hard it is to learn a new language and have never mastered anything in their lives. This includes the author of “You are not your tools”, who states that “most [programming] skills will transfer just fine”. Unfortunately, this crap gets repeated often enough that a lot of people end up believing it. You even see this reflected in job interviews, which increasingly are allowing any language in demonstrations of coding proficiency – as if all languages are equally powerful or desirable to know or even equivalent (as implies our silly little friend when he says that skills “transfer”).
The programming language is just one tool, albeit a crucial one. The fact is that if you pick one language – a good one, suitable for proper hacking – and master it, you’ll be able to run circles around people who switch languages for every job. There are those who say that Lisp is the only language you need to know, due to its sheer power. I find it hard to argue against this line of thinking. So why doesn’t every programmer learn this “secret weapon”? The simple and obvious answer is that people don’t want to invest time in mastering something (if they even are capable of mastering anything) and Lisp is perhaps the hardest language to master due to its raw power.
VERY interesting. Do go on.
Which brings me to another kind of programming tool – the text editor. It’s no secret that Emacs hackers (and, to a lesser extent, Vim users) are much more capable, productive, and plain better all-around programmers than IDE guys. It’s not just that better programmers seek better tools (though that does play a role) – it’s that these tools are superior to IDEs, end of story. This is well-understood.
So why do most programmers still use IDEs, despite the known fact that these tools are suboptimal? It comes down to what we’ve established above: people don’t go out of their way to master things. Emacs and Vim are not like IDEs: you can’t pick them up and start programming right away. IDEs are designed to be lowest-common-denominator – easy, “usable” software that doesn’t require any investment. A real text editor requires proficiency, and that means time spent learning it and for a while being “unproductive” (though this initial learning period is some of the most valuable time you can spend as a programmer) – most importantly, all of this requires commitment. And, well, we know that the average programmer can’t commit to anything, jumping from language to language every year or so (or for every job!).
To repeat: the growing sentiment among programmers (and even the general populace) is that nothing is worth mastering. Memorizing stuff is pointless as all knowledge is a Google search away – I’ve heard this line of thought parroted often enough that it scares me. If you work on software that is even remotely important – and why wouldn’t you want to work on important stuff? – then you have an ethical obligation to know what you’re doing. And sorry, but Googling everything just isn’t going to cut it.
There is a huge gap between the average programmer and the real hacker. On one side of the gap is the doe-eyed little boy who goes into every project clueless about how to start, searching for a relevant tutorial on Google while frantically asking questions on StackOverflow. On the other side is the man who plunges into the project with an air of mastery, controlling his environment with a fluid ease which is rare and somewhat dangerous – a man who’s already finishing the task by the time the boy has gotten his first response on StackOverflow. Which side of that gap do you want to be on all your life?