Finding Awesome Developers in Programming Interviews: Part I: Testing Assumptions From The Resume
Finding Awesome Developers in Programming Interviews: Part I: Testing Assumptions From The Resume
Finding Awesome Developers in Programming Interviews: Part I: Testing Assumptions From The Resume
In a job interview, I once asked a very experienced embedded software developer to write a
program that reverses a string and prints it on the screen. He struggled with this basic task.
This man was awesome. Give him a bucket of spare parts, and he could build a robot and
program it to navigate around the room. He had worked on satellites that are now in actual
orbit. He could have coded circles around me. But the one thing that he had never, ever
needed to do was: display something on the screen.
Some people have a knack for asking the right questions to spot awesome developers in a
job interview. Other interviewers dread it, come in with their tail between their
legs, ask a few questions from the Internet and just go along with the group
decision. But interviewing is an essential skill for most developers. A bad hire has terrible
long term consequences, because eventually a sub-par employee may bring others into the
organization. On the other hand, unfairly excluding an awesome candidate also hurts.
A programming interview includes at least three parts. In part I, we prove any assumptions
we have after reading the resume. In part II, we get a sense for how much true experience
the candidate has. Finally, we test this experience using a few spot checks and a coding
question.
For each relevant item on the resume, I first try to get a sense of what the candidate
actually did. Then, I get him or her to prove it by talking about it.
But not all experience is the same. It is certainly possible for someone to gain solid skills
in a couple of years, simply by working on lots of different things, writing and rewriting
countless lines of code, and making many mistakes. On the other hand, it is also possible for
someone to spend a decade writing one-line changes to a single project, without learning
anything new.
Density of Experience
Many awesome programmers do all of their coding at work. These are great, well, rounded
individuals that you should definitely hire. However, doing personal programming projects
outside of work or class is a pretty good indicator of awesomeness. A candidate with
personal programming time simply has more flight time under his or her belt, and will be
better for it. No personal projects? These other indicators will also count for some points:
The specific topics depend on the job requirements. Nevertheless, some example areas are:
First, one must choose a question based on what the candidate has had experience with.
You may have a clever problem that becomes easy if you think of converting everything to
intersecting 3D planes. Save it for the lunch hour with your colleagues. If the job does not
involved 3D graphics, candidates would be unfairly excluded.
The question must be precisely worded. "Write a function to shuffle a deck of cards" is
woefully ambiguous. Provide the function header and avoid misunderstandings, which are
all too common. If you are not careful, the candidate will answer a harder or easier problem
than the one you asked. The harder one is nice, unless it causes him or her to freeze up. The
easier one provides no information. To prevent a huge waste of time, ask for a verbal
outline of the solution after a few minutes, to check if the candidate is on the right track.
Going further
The guidelines above do not address everything. They focus on experience, and they might
miss awesome developers that have little experience, but a lot of innate ability. In
particular, interviewers may want to test problem solving ability using puzzles that don't
require any coding.
The interviewing technique that I have described here is based on proving a hypothesis,
probability, and gut instinct. The hypothesis is that the candidate is an awesome developer.
What traits does an awesome developer have? You cannot directly measure those traits, so
you have to instead ask: What is the probability that the candidate has those traits given
that he or she can answer a particular question quickly? It is not possible to assess a
candidate within an interview with 100% success, but by asking thoughtful questions, you
can come close.
Further Reading