I was reminded this week of Steve Yegge's Programming Dirtiest Little Secret, in which Yegge claims that touch typing is the most significant skill a programmer can have, because the very mechanics of hunt-and-peck typing use up brain power that the professional programmer cannot afford to waste. Yegge says that the important stuff of programming, you have to have completely mastery of the device of expression; your computer must become an extension of thoughts to be expressed, not a tool to be managed.
I'm a touch typist. I wrote 2400 words this morning in about 90 minutes, without looking down once at the keyboard. I can't look down at the keyboard; it won't help, as the keys still read QWERTY and the mapping is set to Dvorak.
I am also, by any measure, an exceptionally good Python programmer. When I need to do any kind of data processing, web programming, scientific visualization, I reach for Python. It has all the libraries I could possibly want, it has a syntax that is reachable and easy to grasp, and it's just plain hard to get wrong. I know the inner workings of the Cython VM to a ridiculous degree, have a passing knowledge of how Stackless and PyPy work inside, and can go on at absurd length about the brilliance and historical brokenness of Python's import
function. My Stack Overflow reputation is over 12 thousand, and half of that comes from answering Python questions.
The other day I wrote a small utility to analyze my personal projects directory and spit out a one-line description of each project, or "No description found" if it couldn't figure out the description. It took about an hour. During that hour I:
* looked up the documentation for `os.path`
* looked up the syntax for Python's `with/open`
* searched for how to find the HOME directory in Python
* searched for how to set maxdepth on `os.walk`
That is, during that hour, I knew that each of these features existed, but I didn't know how to use them. I have places in my head where the vague knowledge that these capabilities exist resides, but no real library that lets me express myself fully without having to pause and go read some documentation or blog entry an how to do such-and-such.
If you read any advice on how to win customers, the advice is always: details, details, details. In this industry, though, there's almost never time or money for the details. Things move too fast. We develop the minimum viable expertise necessary to create the prototype, at which point the sales department starts shouting, "Ship it!" We never have enough time to learn how to express ourselves in a given development environment before everything changes again and we start the learning process all over again from the beginning.
It is this ability to express our intent that we need to fully develop. We need to slow down and master our development environments before we can earn the time needed to attend to the details. Otherwise, we're simply at the mercy of market forces to go faster and faster, and we're all going to lose that race in the end.