After hearing feedback from a fellow Java geek on recent interviews attended, I have to ask myself – Where did all the good interviewers go?
Interviewing a candidate for a technical role, or in fact any role which requires some sort of brain function, is an art. Just because a guy is good at his job, it does not mean he will be good at finding other good people. To start with, let us consider what makes a good employee. There are two main kinds of ‘good’ employees – those that do what they know well and those that can do anything well. The former have an abundance of what I call “book knowledge”. The stereotype went to university, graduated with good marks and enjoys debating on topics they are well read on. The latter are adaptable and are able to figure out an elegant solution rather than rely on something they read. They are open to new ideas, not scared to explore new possibilities and can think a problem through. They often had to learn what they know themselves and may not have a formal education or score well in tests. There are a people that fall into both categories. The important thing to decide is which kind of guy do you want to employ? The former typically do really well in interviews whilst the latter excel on the job.
One of my first mentors was absolutely brilliant yet he failed his Sun certification (SCJP) multiple times – even after I had passed it! There could be a number of reasons for this – English was his second language, he didn’t do well at school so lacked confidence when it came to tests etc… but I would rather work with him than a number of people I have met who have aced their certifications.
It is easy to figure out if someone has book knowledge. Set up an interview and ask them a couple of questions like “How do you implement a hash map?” or “Name and compare the standard implementations of a List in Java”. Generally these questions you can google and find the answer in under 5 seconds. A person who can answer these is as useful is a 5 year old who has learnt to use a search engine. I’m not saying that the people who can answer these questions are bad candidates – I’m saying they are bad questions which test nothing of the candidate’s actual abilities.
A good question is a question that the candidate has to think through and show you some of their thought process. At a previous company we regularly asked candidates to implement a double-linked list. However, we never said “Please implement a double-linked list” – in fact the word “List” was never mentioned. We provided the candidate with the following pseudocode:
class Node {
Node prev;
Node next;
Object data;
}
We would then ask them to implement a method in Node perhaps last() which returns the last Node (ie. the Node where next == null). If they seemed a bit apprehensive, we’d often draw a diagram (or encourage them to draw one) to show how the nodes were linked. We ignored the little stuff (”Oh My Word! That guy left out a ;!! How could he!”) and sometimes even help out with the coding. If we helped out a lot or wanted to further evaluate the candidate, we might then ask a slightly more difficult question like to implement the method reverse() which reverses the order of all the nodes and returns the new first node. We could then tell if they learnt anything from the help we gave them on the first question. Another common question was asking the candidate to reverse a String.
Perfectly acceptable answers in our interviews were “I would check the Javadocs” or “I would google it”. If it was a little info they were missing that they could easily find online that was stopping them answering a question then we would give it to them – in the real world they would always be able to find that info – it’s what they do with it that’s important.
This is also why I honestly believe that face-to-face interviews for technical assessment is crucial! You can draw diagrams and interact in a way that is impossible over the phone. Phone interviews should be kept strictly for getting a feel of the person and perhaps trying to suss out good questions to ask them in a face-to-face. I was asked in the hash map phone interview (see previous post) to discuss one of the most complex problems I had worked on. If the most complex problem I had worked on could be easily explained over the phone, then it really wouldn’t be that complex would it?
It is also important that the interviewer does not have a definite answer to their question in mind. So often there are multiple solutions but because the interviewer is so keen on hearing their specific keywords or solution that they dismiss any other answer. Often the question is ambiguous but the interviewer is so focused on guiding the candidate to their answer that they are not evaluating what the candidate is saying.
Think about what knowledge the candidate can bring to the team. Interviewers generally are so focussed on providing the perfect match for their role that they look for a clone of their current employees rather than adding a fresh dimension to the team. The candidate may not have experience in what you currently work with but your current employees can easily pass that knowledge on and the candidate might just have some other tidbits that help with some of the less common functionality. Don’t forget that anyone’s knowledge will be outdated within a few years and it is more important to find someone who is intelligent enough to learn new things and adapt with the latest technology. Use the opportunity of a new hire to expand the expertise of the team as a whole.
Don’t judge a candidate by their interview manner. I am the perfect example of this. I am an introvert (hello, geeky computer person ) and get very nervous in situations where I need to meet a lot of new people – even more nervous when I know they are meeting me purely to judge me and how they judge me might seriously affect my future (though to be honest if they can’t see my brilliance then their loss and I probably wouldn’t want to work for them anyway ). I have studied Linguistics at a university level yet somehow when I enter an interview room, I lose words and can barely pronounce my own name. I have very little confidence in the interview situation but some people equate this to not having confidence in my work or abilities. If you want to see if a person is a good fit then organise another more informal interview – best way is out of the office. Chat over coffee or a beer – perhaps bring up some controversial topic for a bit of lively technical debate.