When You Pick Your Tools, Pick Those That Can Build Tools

This morning I was listening to Karl Fugel talk about tools developers need and thought about Doug Kaye. Here's why...

Yesterday Doug sent out a note to a few friends asking what editor they used to writing code on OS X. I use emacs. not only do I use emacs, but I thrill to emacs for one simple reason: it's infinitely malleable. It can be made to do almost anything and has. I use it for just about everything I do.

Programmers should be tool builders. If you're not building tools to make your life easier, you're wasting time. That was really the point of Karl's talk. Although he was making the point in terms of open source projects, the concepts apply universally.

Now, back to Doug and emacs. Doug is, unknowingly, responsible for me getting back on the tool building wagon. I'd fallen off and was plugging along, making do. At ETech last year Doug saw me editing HTML in emacs and made fun of me. He was right. It wasn't that I was writing HTML by hand, that's perfectly reasonable. It was that I typing all the tags by hand when there were easier ways.

Emacs has several HTML modes. I'd used them off an on, but unfortunately, it seemed that every time I reinstalled emacs, for whatever reason, I ended up with a different version, with different key bindings, and I just got out of the habit of using the tool.

When Doug gave me a bad time I realized I was losing productivity because I was unwilling to spend an hour sorting out the situation. I spent a little time researching the various HTML modes and when I found one that I liked and understood (so I could modify it), I put it in my personal elisp directory and made sure .emacs was set to load it.

Next, I spent some time customizing it to add features I wanted. For example, I frequently reference books in my blog and want links to Amazon. One action takes an Amazon product code and creates the link for that book, including my Amazon Associates ID. That alone has saved me a ton of time.

Another small example: I recently built a tool in Perl for generating course schedules from a specification. Students like to see the course schedule on the Web, but it's a pain to do since the dates change every semester. My tools allows me to create schedules like this from a simple textual specification. Tools aren't always just for productivity. Frequently the result in a better product because the tool automates its creation.

I've been spending a fair amount of time with Rails lately. This is a perfect example of this idea. David Heinemeier Hansson built tools to make his job easier and made them good enough that they've sparked a revolution.

I like emacs and Perl because they're great platforms for building tools upon. I like OS X because with it's Unix at its core, it comes with good shells and a full compliment of programs like awk, grep, find, and so on that frequently find their way into tools I make.

I was thinking about this the other day and concluded that it must be awful to not know how to program. You're at the mercy of other people to build your tools. I'd hate it. It would be like not knowing how to drive.

Anytime you've got to do the same thing more than once, consider building a tool. And when you pick tools, be sure to pick tools that allow you to build your own tools and can be customized to meet your needs. If you get into the habit now, you'll be more productive down the road--guaranteed.