Definition of a Great Programmer - Part One

April 22, 2009

Since I have both a programming and management background, and since software development centers around programmers writing code, I thought I would explore my views on what makes a great programmer. And by great I’m talking about being highly productive, someone who consistently delivers quality results in a timely manner.

A common metric in the software world, based on studies, is that there can be up to a 10:1 difference in productivity between different programmers with the same level of experience. Since programmers want to be regarded as productive, and managers need to understand what programmer productivity is, the question of the day becomes: What goes into making one programmer an order of magnitude better than another?

Other questions that you might have:
  • How can productivity be measured so precisely to determine a 10:1 difference?

  • Dave, isn’t your position that since both the inputs and the outputs of software development are variable, actual productivity couldn’t be measured?
Perfectly valid questions!

First, my list of what makes a programmer great, in priority order:
  1. Motivation.
  2. Critical thinking skills.
  3. An understanding of software design: Architecture and design patterns.
  4. A solid working knowledge of the programming language being used.
  5. Communication and collaboration skills.
  6. Continual learning and exploring.
  7. Domain knowledge of the problem being solved.
  8. Experience.
I’m sure that this list will drive a few comments, and I’ll explore my thinking in more detail in subsequent posts.

What about the question of measuring of productivity? If I’m right and productivity cannot truly be measured, then how did someone arrive at the often-quoted 10:1 productivity difference between programmers?

I provided a clue in the sentence – "A common metric in the software world, based on studies, is that there can be a 10:1 difference in productivity between different programmers with the same level of experience."

My point? You can study programmer productivity and you can determine that differences do exist, but you can’t accurately measure productivity in the real world. To study differences, you need to devise a common programming problem that can be given to a variety of programmers to work on independently, and then judge the results, asking things like: Who finished first? Who solved the problem using the least lines of code, with the fewest errors?

In the real world we aren’t handing the exact same problems to different developers, though, are we? In the real world, day-to-day work inputs and outputs are truly vary, which makes measuring productivity and making completely accurate comparisons a virtually impossible task. However, it is possible to coach people and teams to improve performance.

When talking about individual programmer performance, the secret is to understand the key performance indicators (my list) that allow one programmer to be more productive than another in order to achieve greater productivity.

I’ll explore my list in greater detail in my next post. I’m interested in the opinions of the readers out there!