How do you identify a good programmer?
I think a good programmer needs to show certain core characteristics:
— Being smart
— Being creative
— Fast learner of relevant topics
— Breadth and depth of experience
— Continued interest and high investment of time and energy
— Focussed on current and future important technology and on broader problem spaces in general
Daniel T. wrote an interesting article on "How to recognize a good programmer". The positive and negative indicators he states are intended to show that a candidate possesses all necessary core characteristics.
— Passionate about technology
— Programs as a hobby
— Will talk your ear off on a technical subject if encouraged
— Significant (and often numerous) personal side-projects over the years
— Learns new technologies on his/her own
— Opinionated about which technologies are better for various usages
— Very uncomfortable about the idea of working with a technology he doesn't believe to be "right"
— Clearly smart, can have great conversations on a variety of topics
— Started programming long before university/work
— Has some hidden "icebergs", large personal projects under the CV radar
— Knowledge of a large variety of unrelated technologies (may not be on CV)
— Programming is a day job
— Don't really want to "talk shop", even when encouraged to
— Learns new technologies in company-sponsored courses
— Happy to work with whatever technology you’ve picked, "all technologies are good"
— Doesn't seem too smart
— Started programming at university
— All programming experience is on the CV
— Focused mainly on one or two technology stacks, with no experience outside of it
In my opinion there are additional, general criteria you should check as well:
— Discipline / Work ethic
— Open mindedness
— Communicative / Does all necessary documentation
— Self organised
Now, how can you find out in an interview whether a candidate has the necessary core characteristics and whether he fulfills the additional general criteria? I think you can ask him for explicit examples on positive indicators. The general criteria you might want to check with some questions like Kurt Einstein's 20 Most Revealing Interview Questions.
Of course a good programmer does not need to have all positive indicators. And of course a weak programmer can also show one or two of the positive indicators. Let me reflect on the positive indicators:
Passionate about technology
A good programmer will not easily accept a substandard technology. In his areas of expertise he will know the technology quite well and he will keep his knowledge up to date.
Programs as a hobby
A good programmer will get fascinated by a topic and start to work on it in his spare time. If I look back, I created some small programs and I published them in a computer magazine (Z80 assembler, Basic). Later I programmed a game similar to Acquire with Excel © VBA - just for the fun of it.
Will talk your ear off on a technical subject if encouraged
I will have to test that one. My personal experience is that I should not talk too much about technicalities. Non–programmers tend to take the technique for granted and do not like to listen.
Significant (and often numerous) personal side-projects over the years
I find this one interesting. I have translated Jon Bentley's Programming Pearls into German to become acquainted with MS Word © - Just transcribing a book would have been too boring, and writing a book on my own too much effort. Later I started to run this web site.
Learns new technologies on his own
That's true. Donald Knuth mentioned that it takes only a week to learn a new language. Ok, that might be true for him. I think normal good programmer can come close to that if the new language does not introduce a new paradigm. On the other hand I think it is sort of a vacation if I can get a course on a a new technology - I can learn it then without all the normal business interruptions and disturbances which happen every day.
Opinionated about which technologies are better for various usages
Right, technologies have been designed for special purposes. You do not manicure with chain saws.
Very uncomfortable about the idea of working with a technology he doesn't believe to be "right"
That's a rephrase of the previous one, I guess.
Clearly smart, can have great conversations on a variety of topics
Which programmer would disagree here? But I really agree: All the amazingly good programmers I met could easily join Mensa, I think.
Started programming long before university/work
Nowadays that is true. I bought my first computer when I finished school - just before I went to university. But that was 1981 and computer cost a small fortune.
Has some hidden "icebergs", large personal projects under the CV radar
And these large projects can be only indirectly linked to programming, I think.
Knowledge of a large variety of unrelated technologies (may not be on CV)