Saturday, February 09, 2008

Identifying a great programmer

Over the last few years I have taken quite a few interviews and have been challenged with the task of identifying great programmers. The surprising thing that I have learnt is that the ones that have turned out to be great programmers very rarely impressed me with the quantity of knowledge about the technology that they were being interviewed on. So what is it that made me say yes to the candidate if it was not based on the knowledge? The following list of items is what I go through in each interview and if I am not satisfied after any step I stop the interview.

Same wavelength The candidate should be very down-to-earth when he introduces himself and presents his capabilities. You should be comfortable with him from the time the interview starts. If you are not comfortable there is no point carrying on the interview however great his credentials may be. Remember the person that you are going to be hiring has to gel into the organization. Another thing to look for here is if the person is a team player and will be able to compliment the team that is already present.

About the experience the candidate has The candidate should be comfortable talking about the experience that he has. He has to be able to tell you exactly what he did and how he did it like how many tables, screens, logic and so on. I also like asking questions such as what is the hardest thing they have ever coded and why did they think it was hard and how did they overcome it. Or was there anything they got appreciation for and why was the appreciation given and so on. Anyone who has coded will always have these stories at their fingertips. If the person stammers and stutters here you know they have never done serious programming.

Know the basics It is important that the person know the basics. To check for this there are two parts. In the first part we usually give the candidate a program to write in a language of his choice. The person should be comfortable in writing code. At this point if the person is unsure or not comfortable no point continuing. Writing code is what we do and whether it is on paper or the computer terminal should not make a difference. In the second part we ask questions in the technology that we are hiring for to see how much the person knows. So we start at the basics and then keep increasing the level of difficulty to give us a good idea of how much the person knows. So if it is for a fresher we remain at the A, B, C... of the technology but if it is an experienced candidate we go all the way based on the experience.

Ability to think logically It is very important to have logical and analytical ability. For this I usually give some problems that bring out the analytical thinking of the candidate. For example the problem may be giving me the algorithm to find the two highest numbers in a set of numbers without sorting the list of numbers. Give me the highest and lowest without sorting the numbers and so on.

Ability to learn Some questions that help in identifying this is what is the last thing you learnt and how did you learn it. What are the websites you visit to learn new stuff? How many hours a week do you spend reading on new technology? What was the last thing you read about new technology? What is it about new technology that excites you? You need to get answers to all these questions so that you are convinced that the candidate does not depend on the organization to keep him up to date about the things that are happening around in the technology world. When it comes to on the job learning, doctors and IT professionals are the same as they need to keep doing it all the time or they will become obsolete very soon. Just like you never want an obsolete doctor no one will want an obsolete programmer.

If one has reached so far and is very comfortable with the answers given then you have identified a great programmer. At least that is what my experience has been. Let me know what your experiences have been and is there anything else that you'll look for when identifying a great programmer.

No comments: