How would you test for coding skills?
First off, by coding skills, I mean the ability to translate an abstract description of a solution into a 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 a 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 codebase. 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 codebase is all about Android. In such cases, I have shared our codebase (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 codebase. Subsequently, I have discussed the code with the candidate to gauge her understanding of both the code and the system.
While this approach cannot directly assess coding skills, it can help evaluate 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 quickly hone their coding skills (provided they are open to learning new things).
Based on my experience, the above approaches have worked well for me :)
What about take-home coding assignments?
While I have not given take-home coding assignments, I like this practice as it allows candidates to demonstrate their software 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.