First off, by coding skill, I mean the ability to translate an abstract description of a solution into clean, efficient, and working code.
In all of the tech-heavy interviews that I have conducted for junior engineer and research assistant positions, I haven’t explicitly checked for coding skills. Instead, I have done the following.
- See if the candidate had CS education/training. If so, then they often will be able to hone their coding skill if they come thru the interview as smart problem solvers with good grasp of fundamentals. Of course, as the interviewer, I have vetted the mentioned CS education/training is a sufficient indicator of the required coding skills.
- Examine the candidate’s software project portfolio. If they don’t have CS education, then I have asked for their software project portfolio, spent time examining the portfolio, and discussed the code (i.e., logic, code patterns, code structure, language features, libraries) in the portfolio projects. I have also asked about development practices, problem constraints, and alternative solutions, and if and how these influenced the code and their coding decisions.
Ask the candidate to study our code base. Not everybody has a software project portfolio. Also, neither of the above approaches may provide the required signals, e.g., the candidate hasn’t done Android programming and our code base is all about Android. In such cases, I have shared our code base (of course, being conscious about IP rights) with the candidate and given her ample amount of time to study it along with opportunities to contact my team or me with questions about the code base. Subsequently, I have discussed the code with the candidate to gauge her understanding of both the code and the system at large.
While this approach cannot directly assess coding skills, it can help assess a candidate’s willingness and ability to read and understand code; specifically, other’s code. It can also help assess a candidate’s ability to reason about and have intelligent conversations about existing systems. Candidates with these skills can easily hone their coding skills (provided they are open to learning new things).
Looking back, the above approaches have worked well for me :)
While I have not given take-home coding assignments, I like this practice as it allows candidates to demonstrate their development skills as they would on the job by using commonly used tools and information sources. However, for this to be effective, the interviewer should examine the candidate’s solution. If the solution is good enough, then she should discuss it with the candidate as part of the interview.
On a related note, here are the basic skills that I think are necessary to be a good software engineer.
Originally posted on Medium