In my daily work, I have the privilege to work with talented people. But finding these people in the first place is not always that easy, it seems. I’ve conducted lots of interviews with potential hires over the last five years. Preferably, you would like to learn from the CV whether or not a programmer is good, but this proves to be a tough challenge. Maybe I’ve just had a skewed set of samples, but I’ve made a few observations:
- There seems to be little correlation between experience and programming skills. In my experience, you are as likely to find an experienced developer (10+ years of experience) with poor skills as you are finding one with excellent skills. On the bright side (and further “evidence”), I’ve come across lots of very talented newly graduated students. It seems some people “get it” right away, while some struggle.
- Also, there seems to be little correlation between education and programming skills. I’ve seen self-taught programmers that really humbled me, as well as PhDs with poor skills. (On this topic, check out self-taught James Bach’s book “Secrets of a Buccaneer Scholar“.)
If my experiences are not just due to bad luck, it seems programming skills correlate neither with education nor experience. Then what does correlate with good programming skills?
To be honest, I have no answer. But research published in the article “The Camel Has Two Humps” presents an interesting observation. Maybe there’s a correlation between between consistency and programming skills. True or not, it is an appealing idea: it’s easy to imagine that a consistent person (i.e. a person that repeatedly makes the same decisions in similar situations) should be able to become a good programmer. Correct his flawed thinking once, and he will use his newly found knowledge in many places. An inconsistent person would need correction on a case-by-case basis.
Now if (big if) consistency is key, the question is just how do we device a test for it? I’m not sure how revealing the tests from “The Camel Has Two Humps” would be on real programmers. (They are on the form “int a = 10; int b = 20; int c = 30; a = b; b = a; c = b; What are the values of variables a, b and c?” :))