3 ms·
There are two kinds of programming work. First kind is that of translating application logic into code using the pre-established frameworks and patterns. This
by vinay_ys 7y ago
There are two kinds of programming work.
First kind is that of translating application logic into code using the pre-established frameworks and patterns. This involves application domain understanding and modeling of domain into system concepts exposed by the application platform's underlying frameworks and components.
Second kind is building these frameworks and components and assembling them into productive platforms with right system concepts that nicely solves for the application domain.
Why these two kinds? Because the nature (volume, churn, complexity axis) of the work differs significantly across this cut so much that the background experience and skills needed by the programmer for these two are very different.
In an interview, you cannot really verify the direct skills needed for either of these two types of jobs directly. Instead you can look for proxies. What are those:
1. Programming proficiency in a programming language of candidate's choice – you can verify this with an in-person 2-hour coding round within the interview loop. Goal of this round is to ask the candidate to demonstrate his mastery over the programming language of his choice by converting a given application logic into functioning programming. You can do this by giving a programming environment (developer laptop with Internet connection) with a written down problem statement with application logic and test input/output samples. After the candidate has spent 60-90 minutes on arriving at a working solution on their own, spend another 30 minutes doing a live code review and then asking the candidate to make one or two modifications (enhancements) which they can take another hour to complete. Clearly state the evaluation criteria – completeness of functionality, test cases, readability of code (passing a basic code review) etc. For candidate it is 2.5 hours, for interviewer it is 1-hour.
2. Expertise in relevant area – if the candidate has previously worked on either the same/similar application domain or built platforms for same/similar problem space, then that can be explored through multiple whiteboard discussions focusing on specific aspects of this supposed expertise.
3. Learnability and Problem-solving – most important skill in software industry is ability to figure things out from vague undefined scenarios and learn new things needed for doing so. Problem solving is being able to reason through a set of stated and unstated conditions/constraints to arrive at an acceptable way forward in any situation. These can be assessed through interview conversations as well as reference checks, and inferred from their work experience and accomplishments.
The above skills list is in increasing order of priority and their relative importance ratio increases for more senior developers.
The problem with automated coding tests is they only test for the basic programming skill and the evaluation criteria is not nuanced and the decision is usually harsh/hard/final. This is a waste of everyone time, but it definitely far worse for the candidate. Hence any smart and reasonably senior candidate would refuse to participate in interview loops that have these automated tests.