How to interview a programmer?
Thomas Menguy | October 30, 2005I’ve came up with this question recently : I need a new team member, but How to choose him/her? What are the good criterions? The right interview questions?.
With my point of view in mind, I’ve made a first interview and, after the interview, found this post at lifeHack.org which emphasizes on reading code from the candidat (I can’t disagree more), but point to a nice entry from artima (?).
For me an interview has to be fair: When I was myself a candidat I enjoyed my interviews (ok, difficult to really enjoy this bright stress moment for a junior) when I had the feeling that I shown what I was ABLE TO DO, that I understood QUICKLY what the interviewers explained, that I had no issue COMMUNICATING with them … But it was no all the time like that, and many interviewers were only looking at my diploma (a good one in France) or my communication skills, really never going down to the code, algorithm, scientific/technical culture etc: even if this last interview category led to some job proposal, I had a mixed feeling about the company: Why did they choose me? They don’t know If I’m goog or bad, Are they all like that? …and so what are the core values in that company? certainly not technical, so “political”?
So I’ve took some times before the interviews, and here are my own tricks to have the feeling to not loose my time and the candidat one’s :
- What profile do I really need? … a good question isn’t it? In my case I need a programmer…
- …but it’s not enough, here a some more precise profiles:
- An Executant: someone able to execute well defined tasks, great organizational and coding skills… the “process” kind of guy, able to finish cleanly a product.
- A Communicant: this one is able, and like, to be in front of client, write docs and presentation.
- A Creative: someone able to bring new ideas to the table, able to impose those ideas, invent new things (certainly not an executant…), this one will defines what he has to do.
- The guy who fiddles around: give him something, it will work … but forget about testing and process…
- Background : this one is not a profile, but is a measure of the scientific and technical culture of the candidat.
- Knowing those profiles I try to give a % to each profile for the best match I’m looking for (ex : Executant: 70% Communicant: 5% Creative: 5% Fiddle: 20% for a good release manager ). Giving that it’s now possible through questions to “extract” this profile … and see if it is matching.
- …but it’s not enough, here a some more precise profiles:
- Execution Skills
- Asks for process vision: versionning tools, branching process.
- Testing: Testsuites? is it something normal for him? who has to test a code.
- Release view and policies: When could he say that his code is ready to be externalized, what citerions did he choose?
- C/C++ Code questions (we have a pretty good question list here in Open-Plug ): Synthaxe questions, memory management, etc…
- Creation Skills: Find some good exercises (I have some good one .. thanks Cadence!), be sure the candidat doesn’t know the exercise before, and listen carefully to the ideas, good and bad he is trying to complete (or not) the exercise.
- Communication Skills:
- Let him explain a big and complexe project he has been involved in, if you don’t understand … the candidat has perhaps a communication issue .. or worse few synthetic skills.
- Talk a little of his passion, hobbies, etc.
- Try to put him in “bad and stressfull” situation (the exercise given to check its creative skills can be enough )
- Fiddle Skills: See if he had done some “personal” technical project, from the ground and how he made it working. How autonomous he can be?
- Technical Culture: Let him talk about its skills … and ask anything that are (or not) related to your own expertise field, just to see if he is curious and a self-teaching kind of guy.
For me the idea to see some of the candidat own code can be a “false good idea”: Now that I’ve worked with a lot of different coders, on different projects, I can safely affirm that no one code as any other one, and that at first sight I’ve never liked ANY code not written by me, and many times for bad reasons. The only important thing are architecture, algorithm and professionalism (CPU and memory care, readability, testing coverage), but to judge a snipet of code in few minutes we tend to only focus on synthax, programming style and tricks and so only on the style, not the content…bad idea to say the least.
Thomas
Update: Sergiu gave me some nice references for technical questions (mostly C++) :
- http://www.beyondcode.org/articles/interview.html
- http://www.techinterviews.com/?p=238#more-238
- http://www.geekinterview.com/Interview-Questions/Languages/C-Plus-Plus/
- http://www.duke.edu/web/ACM/interview.html
- http://www.possibility.com/epowiki/Wiki.jsp?page=CppInterviewQuestions
- http://oneparticularharbor.net/sam/interview.html