Picks and Keyboards
I read an article a few years ago, I believe in Guitar World, written by famed Phish guitarist Trey Anastasio. In it, he explained that one of the keys to being great at guitar is to know how to get to ‘C’ from any other note on the fretboard. Once this is known, he explains, this knowledge can be transferred to every other key.
So what does this have to do with programming? A lot I believe. As programmers, many of us may know how to play a song or two. We can program in Java, for instance, or write a web service in Ruby. But, the ability to play a song does not the master make. How many of us can get to ‘C’ from anywhere on the guitar? How many of us can honestly say they know how to build an array from scratch in any language? How about create an object? Sure, we can all use Array#new or class Bob { }. But, could we make our own Array#new if necessary?
It is knowledge of this sort that separates the good programmer that knows how to use tools from the great programmer that knows how to make them. The great programmer, confident in his ability to build tools to suit his needs, can be comfortable using any language thrown in front of him. The good programmer on the other hand, shouts like a fanboy about the greatness of his languge, be it ruby, java, or python, out of fear that he may need to learn new tools.