One of my goals for myself is to build up a complex framework of tools and procedures that allow me to focus as much as possible on higher-level tasks and mostly ignore the smaller things while doing them very efficiently.

This is not a new idea; anyone who has learned to drive a car has practiced pressing the pedals and steering in such a way that she can perform these routine actions automatically and correctly (almost) every time, leaving her free to focus on what’s actually happening on the road, navigate, and maybe carry on a conversation or listen to the radio without getting into trouble. Since I’m a computer scientist, I also think of this in terms of the way computer hardware and software are designed. At a basic level, a computer consists of just billions of switches. The fact that we have succeeded in building up so many layers of abstraction, each becoming largely hidden and automatic beneath the next, such that we can use this pile of switches to accomplish anything productive at all is one of the great miracles of engineering, too often unappreciated.

The key for me is doing the smaller things efficiently. There are certain skills that underlie producing any code or prose and indeed doing just about anything on a computer: moving between programs, editing text, and, most important of all, typing. In particular:

For me, doing things efficiently is its own reward; the practical benefits don’t have to be significant to make me enjoy it. (As the saying goes, an engineer is someone who will spend three hours figuring out how to do a two-hour job in one hour. If that replaces drudgery with creative thinking, and I have the time, then I’ll still go for it.) That said, in most cases, my work has definitely paid off; I have yet to meet a person who can type or edit text faster than me, and have only met one or two who can move around familiar applications faster than me.