Opinion: The proof is in the programming
LATEST NEWS
SUBSCRIBE
Computerworld is New Zealand's only specialised information systems fortnightly. Subscribe now for $100 (23 issues) and save more than 37% off the cover price!
SIGN UP
Otago University head of Computer Science Brendan McCane explains how to spot a good programmer
By Brendan McCane | Auckland | Thursday, 18 August, 2011 | 11 Comments
In my previous column, I discussed the advantages of hiring good programmers. Good programmers are 10 times more productive than poor programmers and therefore it is much more important to hire a good programmer than one who happens to have exactly the knowledge required for the position. That is all well and good, but how can you tell if someone is a good programmer?
First, let me identify the attributes of a good programmer. The most important attribute is a passion for programming. Good programmers love to program. They do it for money. They do it for fun. They probably even occasionally dream about programming.
Second is problem-solving ability. Good programming requires good problem-solving ability.
Third, good programmers are very thorough. Their code is well-tested and they program defensively. These are the three Ps of good programmers: passionate, problem solvers, particular (thorough). Given these attributes, is there an easy way of sorting out the good programmers from the bad? Let’s examine the usual mechanisms for sorting.
Do you need a degree to be a good programmer? No, but I think it certainly helps. I sometimes hear that the topics studied in a computer science degree at university are useless for work in the real world. After all, who ever needs to implement quicksort or a red-black tree in industry?
True, hardly anyone, so why teach those topics at all? Other than just good practice, these topics expose programmers to the notion of complexity and scalability.
Good programmers have a good understanding of the complexity of algorithms. You might think that understanding complexity is only important for advanced applications, but you would be wrong. Consider a typical website with a back-end database. Choose the wrong SQL query to return a result, and it might come at a cost of N^2 in the size of a database, whereas the right query costs only N. Not a problem if you only have a few thousand records, but what if the database has a few million or a few billion records?
What about commercial experience? Do you need x years of commercial experience to be a good programmer? No, but again it probably helps. It helps for reasons that are different to what you might think.
It isn’t the “commercial” part of “commercial experience” that is important, it is the “experience” part. Basically, the more practice you’ve had at programming, the better you are likely to be.
Commercial experience will tell you things that are harder to tell from other contexts though: how well does the person work in a team environment? can they meet deadlines? and so on. So commercial experience can be an indicator of important personality attributes, but it probably doesn’t say much about programming ability.
As such, good programmers often have a degree and always have experience (but not necessarily commercial experience).
Unfortunately, bad programmers some times have a degree too, and a bad programmer with commercial experience is still a bad programmer. So how do we tell which is which? I think the answer is fairly obvious. If you want to know if someone is a good musician, you listen to them playing. If you want a good builder, you look at what they’ve built before. If you want a good programmer, then you have to look at their programs!
There are two obvious ways of getting a look at a programmer’s programs, and in a recruitment situation, I think both should be used if possible. First, remember that good programmers usually program for fun. Therefore, they probably have programs they have written in their spare time that aren’t encumbered with commercial sensitivities (for example an open source project). If such a program is available, an interviewer can ask to have a look.
The second way is much more direct: have a programming exercise as part of the interview process. I don’t mean a blackboard exercise, and I don’t mean the interviewer asking particular questions about programming techniques (for example “Can you explain what the decorator pattern is?”) as I don’t think those reveal much. Better is to plop the interviewee in front of a computer with a non-trivial programming problem to solve.
If you want to find a great programmer, preferably ask for a solution in a language they’ve never used before. But don’t handicap the environment - let them use the same environment they would every day - reference books, internet, language help and so on.
How can you identify a good programmer? Ask them to program.
Comments
Honesty
Honesty about oneself and one's experience is also an important attribute for a programmer. However it is almost impossible in our recruitment culture to get a job as a programmer without being dishonest.
For example I am a brilliant Delphi programmer but I missed out on an interview for a job because the client specifically asked for someone with experience in Delphi 6. At the time I had a lot of experience with Delphi 1 through 5. I could have lied but instead chose to maintain my integrity and move on. The client will have got someone who is either less experienced or less than honest about their experience.
Posted by Matthew Jenkinson at 16:39:51 on August 18, 2011
For example I am a brilliant Delphi programmer but I missed out on an interview for a job because the client specifically asked for someone with experience in Delphi 6. At the time I had a lot of experience with Delphi 1 through 5. I could have lied but instead chose to maintain my integrity and move on. The client will have got someone who is either less experienced or less than honest about their experience.
Posted by Matthew Jenkinson at 16:39:51 on August 18, 2011
Interview Testing
I'm not sure about asking a candidate for a programming job to solve a non-trivial problem in a new language. Maybe if you have a day to spare and are attempting to find the best from a select crop of graduates. As an experienced developer, if anyone asked me to do that at an interview, I'd think that they were an idiot; OTOH, I would expect to be asked about Design Patterns!
Posted by Anonymous at 15:33:19 on August 18, 2011
Posted by Anonymous at 15:33:19 on August 18, 2011
Interview Testing
I know nothing at all about Design Patterns, but if I thought that I was going to be asked about them I would simply use the web to research them before the interview.
If we both go for the same job then the challenge for the interviewer is to distingush between your in-depth knowledge and my short term memory.
Posted by Connor at 15:58:23 on August 18, 2011
If we both go for the same job then the challenge for the interviewer is to distingush between your in-depth knowledge and my short term memory.
Posted by Connor at 15:58:23 on August 18, 2011
Programmer vs Senior Programmer
I think that the best programmers have a few key elements missed here;
1. Time management - primarily around estimating how long it will take to complete tasks and the discipline to break large tasks down into smaller ones. Once that is done, the ability to self-manage to those tasks is GOLD, and significantly reduces PM overhead and project risk.
2. Commercial understanding, an ability to know that spending 40 hours working on a fun technical issue to come up with a creative solution is NOT money well spent if it doesn't deliver functionality that is NEEDED. Often the difference between a programmer and a senior programmer is this understanding - which comes from experience and often learning from past project budget blowouts.
3. Proven understanding of good development standards, processes and methodologies. Understanding the process desired for the team/project (waterfall, iterative, rapid, etc) and how to effectively put it into action keeps everything on track. A "talented" programmer who works contrary to the team or writes code differently to everyone else will create a massive overhead in terms of teamwork or future support-ability.
Technically good programmers are one thing - reliable, self-managing, accountable professionals who create the required functional and business outcomes are MUCH better.
Posted by David Reiss at 13:19:54 on August 18, 2011
1. Time management - primarily around estimating how long it will take to complete tasks and the discipline to break large tasks down into smaller ones. Once that is done, the ability to self-manage to those tasks is GOLD, and significantly reduces PM overhead and project risk.
2. Commercial understanding, an ability to know that spending 40 hours working on a fun technical issue to come up with a creative solution is NOT money well spent if it doesn't deliver functionality that is NEEDED. Often the difference between a programmer and a senior programmer is this understanding - which comes from experience and often learning from past project budget blowouts.
3. Proven understanding of good development standards, processes and methodologies. Understanding the process desired for the team/project (waterfall, iterative, rapid, etc) and how to effectively put it into action keeps everything on track. A "talented" programmer who works contrary to the team or writes code differently to everyone else will create a massive overhead in terms of teamwork or future support-ability.
Technically good programmers are one thing - reliable, self-managing, accountable professionals who create the required functional and business outcomes are MUCH better.
Posted by David Reiss at 13:19:54 on August 18, 2011
Programmer vs Senior Programmer
I enjoyed reading your comment much more than the article to be honest. All of your points are skills that I regularly see missing from supposedly well experienced developers.
Posted by Anonymous at 23:49:38 on August 19, 2011
Posted by Anonymous at 23:49:38 on August 19, 2011
Testing is paramount
I see far too often these days that programmers deliver sloppy code because either they don't know how to test it, can't be bothered because someone else will find the bugs or don't understand why it has to be tested.
A set of unit test cases that proves the code works will also help reveal how good they are.
Posted by Anonymous at 10:42:26 on August 18, 2011
A set of unit test cases that proves the code works will also help reveal how good they are.
Posted by Anonymous at 10:42:26 on August 18, 2011
All good points - but
the key downfall for hiring managers in the fact the majority cannot articulate themselves well in an interview situation. In the big bad world being able to code is of course essential, but not as critical as written and verbal communication skills - there are many A+ students who regularly bomb interviews spectacularly.
To this day the recruitment industry is amazed that after plenty of lobbying, the universities still do not do anything to prepare grads to sell themselves in interview situations.
Posted by Anonymous at 10:41:46 on August 18, 2011
To this day the recruitment industry is amazed that after plenty of lobbying, the universities still do not do anything to prepare grads to sell themselves in interview situations.
Posted by Anonymous at 10:41:46 on August 18, 2011
Skill of interviewer as relevant as interviewee
I suspect that one of the major reasons for poor software related hiring decisions is that for many organisations (that aren't specialist software development businesses) the HR team and recruiters don't know enough about programming to assess an applicant. Thus the unfortunate, simplistic, and apparently widespread reliance on secondary information: previous experience, school reports and certifications.
It's possible that the best way to identify a great programmer is to have good programmers assessing the candidates.
Posted by Dave Lane at 10:06:44 on August 18, 2011
It's possible that the best way to identify a great programmer is to have good programmers assessing the candidates.
Posted by Dave Lane at 10:06:44 on August 18, 2011
References
Good article, but another key point to consider when interviewing anyone in IT is talking to credible references. Often information is gleened from these sources which enables decision making. If the applicant is reluctant to provide references, you have already been provided an insight into there experience/skills to some degree!
Posted by Anonymous at 8:53:45 on August 18, 2011
Posted by Anonymous at 8:53:45 on August 18, 2011
Anecdote
A short anecdote that supports the suggestion in the article - have a programming exercise as part of the interview process:
Many years ago, at an interview for an Oracle Forms developer role, I was given a short specification for a relatively simple Oracle form, sat at a PC and given 30 minutes to create the form.
On starting work, I found that someone had left copies of the cvs of the applicants invited for interview in one of the drawers of my desk. Reading through them I was amazed that I got the job, as my competitors all appeared to be superstar Oracle developers, with way more experience and technical ability than me.
However, over drinks in the pub a couple of weeks later, a colleague told me that none of them could complete the simple task, and apparently one of them had spent the entire 30 minutes staring blankly at the screen.
Posted by Colin at 8:19:55 on August 18, 2011
Many years ago, at an interview for an Oracle Forms developer role, I was given a short specification for a relatively simple Oracle form, sat at a PC and given 30 minutes to create the form.
On starting work, I found that someone had left copies of the cvs of the applicants invited for interview in one of the drawers of my desk. Reading through them I was amazed that I got the job, as my competitors all appeared to be superstar Oracle developers, with way more experience and technical ability than me.
However, over drinks in the pub a couple of weeks later, a colleague told me that none of them could complete the simple task, and apparently one of them had spent the entire 30 minutes staring blankly at the screen.
Posted by Colin at 8:19:55 on August 18, 2011
MOST POPULAR
- NZ game industry: Govt support for development increasing
- Raspberry Pi arrives in New Zealand
- Video, connection costs major factors in broadband uptake: ComCom
- Spotify launches in New Zealand and Australia today
- NASA on 'brink of a new future' with SpaceX launch
- No more risk to privacy on Facebook, than web: MED
Social Media @Computerworld NZ

Computerworld NZ has now reached LinkedIn! Join to expand your networks and meet others interested in information systems.






