Some questions to ask when recruiting Java programmers
I had the fortune to participate in interviews for some contract Java candidates recently for my client. These were, as the market goes, between average and high daily rate people – typically 5+ years Java experience, 10 years in the IT at least.
I set them a few Java questions just to see what level of competence they have, and what their OO skills are like, as these transcend a specific language and somebody with a solid grounding programming will typical shine on these irrespective of their current language mindset. However all were presented in a Java context for these Java candidates.
The correct answer was not so important as the actual answer and explanation given. This gave an insight into mindset and attitude, and willingness to learn.
The questions were:
- What is the primary performance difference between Vector and ArrayList
- How do you avoid deadlock with synchronized blocks when you need to acquire multiple lock objects?
- What issues if any are there with calling virtual methods from a constructor?
- What is the quickest way to divide an integer by 8?
To my amazement not a single person got them all right, in fact the highest score was one, and the only question anybody got right was the first. This was after me proferring some decent hints in many cases – I don’t like to make people sweat.
To be frank I wasn’t expecting anything like such poor responses. I’ve been tested previously in interviews on 68000 assembly language constructs I haven’t used for 10 years when going for a Windows C++ job, and had no problem. I am by no means a genius in this industry – there are a great many people smarter than I!
The interview environment certainly caters for some lack of mental clarity, and I will certainly allow for that. Also the wording of some questions could present people with problems. However it is just amazing that experienced programmers cannot instantly answer question 4 without hesitation, and pretty surprising if a Java developer can’t get question 1 right – it’s basic stuff.
Question 4, the answer being a simple logical shift of 3 (n >> 3), is such a fundamental concept of computer programming you have to worry about people who can’t grasp it. “I never had to use it” is not an excuse – this betrays the way you have learned about computer programming. It implies that you may not fully understand bytes, memory addressing, binary operators and so on.
Questions 2 and 3 are certainly more advanced. 2 is interesting because it reveals any insights they might have into concurrency. 3 is obscure but shows OO skills for people that pick it up. When you get responses like “What is a virtual method” or just blank looks you know that you’ve an “IDE Wizard Jockey” on your hands and not a true OO developer.
The ultimate outcome of the experience was personal dismay and a feeling of inevitability with regard to the often poor quality of many large IT efforts. It’s amazing that some people are getting jobs that pay circa £400-£600 per day and they don’t even have some fundamental programming knowledge.
It reminds me to go and re-read the “Beware the Evil Wizards” chapter in The Pragmatic Programmer.
Recent Comments