Wed 25 Apr 2007
Who’s the best programmer you ever saw? If you are like Gordon Cooper, Mercury astronaut portrayed in The Right Stuff, you might answer, “You’re looking at him!” For most of us, the image of a coworker will come to mind. If you have been a programmer long enough you will likely have a group of candidates for this title, many of whom share several characteristics in common.
At one time, we might have used the word “hacker” to describe these people. Unfortunately, this term has become confused with those who break into computer systems, and its meaning has been weakened with connotations of inelegant or unskilled approaches. Instead, let’s call them “Power Programmers” for their particular approach to programming.So, just what is a Power Programmer? A Power Programmer is a person with a passion for coding, expertise in key areas of programming knowledge, and a bias toward working in the fastest, most efficient manner.
Passion for Coding
Power programmers love to code. They code at work. They code at home. They code for the sheer thrill of making something run. Because of this passion, they have generally written a lot of code, far more than someone who is just doing it for a living.It is, perhaps, the volume of code that they write that drives much of the rest of their traits. By writing so much code they have been exposed to a broader range of problems than other programmers, giving them a greater repertoire of ready solutions. They are also faced with the same problems over and over again, giving them a greater opportunity and justification to seek the best solutions to those problems. Experience allows them to solve problems more quickly.Together, passion and practice often produce expertise, and expertise is an essential characteristic of a Power Programmer.
Expertise in Relevant Areas of Programming
Expertise produces highly effective results, programs that are robust and efficient, not just something that runs. It is this expertise that puts the “power” into power programming.Programming knowledge covers a very large area, and one that is increasing every year. There is general knowledge, like knowledge of a particular language. And there is more specific knowledge, like knowledge of a particular API or a technology, like XML. You cannot say that knowledge of any specific language or technology is a requirement to be a power programmer, but you can say that there are key areas of programming knowledge that are required.
Mastery of the Programming Domain
Define a programming domain as the combination of language(s) used and the APIs for the target platform. Someone can be a master of one programming domain, like writing C++ using the Microsoft Windows APIs, yet have no knowledge of another, like coding in Carbon on the Apple Macintosh. Though no single domain can be listed as required knowledge to be a power programmer, mastery of the domain in which you work is required.Power programmers have a mastery of the syntax and idioms of the programming languages they use and are sometimes referred to as “language lawyers”. If you want to know about effective parameter passing or when to favor an iterator over a for loop, go ask a power programmer. Ask an object-oriented power programmer whether they would ever make a destructor virtual, and they won’t just answer “Yes”, they’ll answer “Heck, yeah!”Programmers love to debate the relative merits of different languages, platforms, and APIs. You can still find vigorous debates over big endian versus little endian. However, no one programming domain has a monopoly on power programmers. You will find them everywhere.
Knowledge of Computer Science Theory
Knowledge of the underlying principles of computer science is applicable to virtually any programming task. Power programmers show an unusual affinity for this knowledge.One important aspect of this is knowledge of data structures and when each is applicable. Power programmers love data structures. You will rarely see them so happy as when they are pondering the relative merits of a hash table versus a red-black tree. And it’s not enough for them to know how to use data structures; most are compelled to know how to implement them as well.Power programmers also have a burning interest in algorithms. They can tell you the Big O notation for all of the common sorting algorithms. They understand what makes code run faster and how to isolate and fix performance problems. Few things are as upsetting to a power programmer as an inelegant algorithm.There are certainly other important areas of knowledge to power programmers, but the core knowledge can be identified by applying the Knuth Test: if it appears in one of Donald Knuth’s volumes in The Art of Computer Programming, then it’s probably important to a power programmer. In this area of knowledge, Dr. Knuth is probably the ultimate power programmer.
Knowledge of the Tools of the Trade
For programmers, the tools of the trade include editors, compilers, debuggers, make systems, source control systems, and various utilities like grep or diff. Power programmers show a mastery of these tools.Since the editor is where programmers spend most of their time, power programmers are unusually particular about their editor. Often, they have gone to great lengths to customize it to work the way they think is best. They look for facilities in an editor to avoid using the mouse, to reduce keystrokes, and to automate common operations. For a power programmer, the editor is an extension of their mind, allowing them to manipulate code with little thought about the actual mechanics used.
Hunger to Learn
Regardless of the programming domain, power programmers show a hunger to learn. They suck up programming knowledge like a black hole swallowing star systems. They are often trying new techniques or experimenting with new programming languages. You frequently see them reading books about programming. This learning fuels their passion for programming and provides them with the knowledge to be more effective.
Working in the Fastest, Most Efficient Manner
If you watch a power programmer work, you see a whirlwind of activity: windows opening and closing, text being manipulated, scripts being run—all at an incredibly rapid pace. This pace is possible due to their mastery of the tools they use, and it is driven by their passion for coding.Power programmers love to code. But this love is not for the act of coding—the actual typing of keywords and symbols—but for the thrill of creation. The act of coding, itself, is often viewed as tedious so they look for ways to automate frequent operations and eliminate repetitive typing.By working faster, power programmers are able to write more code. This creates a feedback loop. By writing more code, they learn more and become more effective, which allows them to work faster and write more code…If you ask a power programmer if they prefer to write fast code or write code fast, they will always answer “yes”.
Am I a Power Programmer?
It is not our place to decide whether you are or are not a Power Programmer. That’s for you to decide, just as it is for you to decide your own criteria by which to judge this. The act of introspection is more important than whether or not you meet any single definition of Power Programmer. Growth in any field of endeavor depends on examining your knowledge and abilities and setting goals for areas of improvement.So, who’s the best programmer you ever saw? Even if you have a long way to go, you’ll be able to answer, “You’re not looking at him, but I’m on my way!”