|
|
To print: Select File and then Print from your browser's menu
-------------------------------------------------------------- This story was printed from ZDNet Australia. --------------------------------------------------------------
|
Hiring help By Jeffrey Kay, Special to ZDNet May 20, 2002 URL: http://www.zdnet.com.au/jobs/news_trends/soa/Hiring-help/0,130056653,120265340,00.htm
Given the stress of software development, should the job interview for a developer position be kind and gentle, or should it challenge candidates to show their stuff? Common sense says the latter. Yet the typical interview goes easy on the candidate. In this article, I'll show why that tactic doesn't workâ€"and I'll give you an alternative approach that does. The classic interview
Frankly, I think that this is one of the worst ways to interview candidates for a software development position. Most of these positions are high-stress, deadline-oriented, bug-fixing endless loops. Developers are always scrambling to meet a project or product delivery. This is why software deadlines are never on Friday, always on Mondayâ€"so that we have the weekend just in case we need it. Given the stress of a job like this, why do we persist in giving candidates a kind and gentle interview?
What you're trying to learn
Although these goals seem obvious, the typical interview doesn't accomplish them. No amount of buzzwords and acronyms will prove that a candidate can withstand the pressures of a software development project. Instead, you need to take a more rigorous approach. The progressive interview
Because the interview process is progressive and interviews may be added, all candidates are asked to set aside four to six hours. Every candidate will spend a minimum of three hours in interviews (two with interviewers plus one with a human resources manager), and the system doesn't work if the candidate is in a rush. Each interviewer will have an hour with the candidateâ€"sufficient time to accomplish a great deal. Here's how that hour breaks down:
Testing the candidate
My favorite problem for senior developers is the memory manager. Given that memory in a heap is modeled as a list of free blocks and memory offsets, write a malloc() routine that allocates memory from a free list. This is a very straightforward coding problem wrapped in the guise of system-level programming; the problem statement is designed in such a way that the candidate has to see through it to realise that the solution is not that complicated. This classic problem has all of the elements of a good test. It requires the candidate to decide how the free list is constructed (array or linked list?), where the free list might exist (as a global variable?), and which algorithm is used to select a free block (first fit? best fit? worst fit?). In addition, it gives the candidate and the interviewer a great deal to talk about. The candidate can write the code in the language of his or her choice. Generally, I don't care much about syntax errors in the codeâ€"that's really not the point of the test. I want to see if the candidate can think on his or her feet and respond to the pressure of a problem.
Here's another good problem to pose:
It's simple but effective. Simply ask what the macro does, whether or not it works, and how to fix the code so it does work. I usually use this problem along with another one, such as asking the candidate to output a binary tree in prefix, postfix, and infix order. Obviously, the problem you pose should match the candidate and the position. Give design and debug problems to senior architects and designers; give code challenges to top developers. Sometimes, you can use logic problems to achieve the same goals.
Deciding whether to add interviewers
After each interview, I caucus with the interviewers. (If a face-to-face meeting isn't practical, each interviewer should send his or her opinion in an e-mail.) The discussion is briefâ€"each interviewer provides an opinion about whether the candidate shows enough promise to add more interviewers. If so, we do it immediately; if not, we end the series of interviews rather than waste additional time. How the interviewers handle it
Not incidentally, the interviewers who'll be most comfortable using this approach are those who went through it when they were hired. Use this technique consistently, and sooner or later your team will find it second nature.
How the candidates react
Some candidates have collapsed under the pressure and have even failed to begin to work the problem. In that case, I'll see if I can get the person started with the problem to help them overcome the shock of the situation. Occasionally, the pressure was too great, and the individual couldn't muster an attempt at a solution. When that happens, I usually send the candidate on his or her way as well. The pressures of the situation are not unlike a challenging, deadline-driven debug session, so the candidate's reaction speaks volumes about his or her ability to handle the job. This approach does more than reveal how a candidate responds under pressure. It's also an excellent way to gauge the chemistry between the candidate and existing team members. Because the interviewers are usually potential coworkers, watching a candidate solve a problem gives the interviewer insight into how they might work together. Is the candidate arrogant? Confident in his or her abilities? Comfortable asking questions? Does the candidate explain the solution as he or she is solving it? Conclusion
Copyright © 2009 CBS Interactive, a CBS Company. All Rights Reserved. |