At Codility we create assessments for hiring programmers. This implies that we also hire programmers to create tests for hiring programmers. It is like two-star pointers or programming squared. Our interview process consists of a Codility assessment in the front, and then good old interviews for the candidates who prove they have the coding fundamentals. I want to share four technical interview questions that we use to assess competences in programming during the face-to-face interviews, using our CodeLive tool.
We ask candidates to solve a simple programming problem which have multiple solutions with different simplicity/scalability trade-offs (e.g. compute prefix sums of a sequence of numbers). We assess whether candidate notices the scalability aspect and whether he/she can deliver the working solution with better scalability.
Time permitting we probe deeper, asking “can it possibly be done better?" This question opens discussion about possible optimisations, sometimes going down to the hardware level, but also about intrinsic limitations of computing machinery, which greatly illustrates whether candidate can apply theory to a concrete problem.
It is not a revelation that an amazingly high number of professional programmers have a lot of confusion about pointers and references. And I don’t mean three-star programming, I mean even simple stuff: if you do “A=B” in Python or Java, what actually happens and do you end with one or two Bs?
We usually ask to solve a simple programming problem that involves pointers/references, like manipulations on single-link lists. As much as we rarely deal with direct lists manipulation nowadays, we believe it shows whether candidate can deal with real-life scenarios where multiple levels of indirection occur e.g. in data models. (And as David Wheeler used to say All problems in computer science can be solved by another level of indirection, except of course for the problem of too many indirections.)
Understanding and handling recursion is a sign of programmer’s fitness.
On some jobs this skill will be crucial, on other jobs maybe not so much, but the fact that you know how to do it shows that you have been doing mental push-ups and sit-downs long enough to be ready to take the triathlon challenge.
The classic moderate question here is to take a simple recursive function and ask the candidate to rewrite it into an iterative one.
Coding is not only a way of communicating your requirements to the machine, but also a way of communicating your intent to fellow team members.
For each programming exercise the candidates solve, both on the automated Codility assessments, online CodeLive interviews, and in face-to-face interviews, we look at the code they write and assess whether it speaks to us clearly. If you look at the code and you immediately know what’s going on, that’s a plus, if you don’t that’s a red flag.