A “Good” Programmer

What is a “good” programmer? How does one judge themselves, or more importantly, portray themselves in interviews?

So many interviewers are looking for “rock stars” but they don’t really understand programming. Rock star programmers do exist, but searching for them is like waiting to live your life until you win the lottery.

I read this on the C2 wiki (the original wiki) and it really resonates with me:

It is like the definition of a good pilot: one who uses his/her superior judgement to stay out of situations in which he will need his/her superior skill.

You might be asked how to reverse a string in Java without using StringBuffer#reverse() or similar functions. Why? Why is it not good judgement to use proven code? Cleverness for cleverness sake is just stupid and dangerous. And re-engineering solved problems is usually a waste of time. It reminds me of the all-too-common thinking that using well-known and proven cryptographic functions is somehow dangerous so “I’ll just write my own”. Ugh. I shudder to think how many security breaches have been caused by that line of thought.

So, “good” requires skill but also good judgement. I like it. But also:

…programming is an attempt to compensate for the strictly limited size of our skulls. The people who are best at programming are the people who realize how small their brains are. They are humble.

from Edsger Dijkstra

Honestly, I feel I suffer in interviews far too often as I realize I’m still working toward that “good pilot” definition and try to stay humble about it, while interviewers are looking for (over?) confident “rock star” programmers.

I mean, I wrote a distributed caching system that ran in production for 6+ years with zero bugs, so …

Oh yeah, humble … right. Still working on that part, too, I guess.