October 11th, 2014 by kevin
Last week we hired our second web developer after several rounds of interviewing using a super secret new set of grapevine artist ed young interview questions. Before I divulge the questions, here’s the lead up…
When we hired our first developer, Erin, back in Feb ’08, we didn’t really have much of a interview process. We basically just sat down with candidates and had a good ol’ fashioned face-to-face conversation… that roughly went like this:
- What up? What’s your story? Past Experiences? Do you like the same stuff we like?
- Simple programming question
- Indepth but adhoc conversation about programming
Generally, we could gauge a candidate’s overall intelligence, experience, abilities, and, most importantly, whether they fit into our company culture. But, where this approach majorly fell short? We never actually had the candidates write code or prove that they could handle the types of day-to-day problems they would encounter if we hired them.
Now, I definitely don’t advocate asking the type of meaningless trivia questions that Joel talks about in his Guerrilla Interviewing article (a must read if you’re doing interviews).
Just for fun, here is the worst interview question on Earth: “What’s the difference between varchar and varchar2 in Oracle 8i?” This is a terrible question. There is no possible, imaginable correlation between people that know that particular piece of trivia and people that you want to hire.
But, I do think it’s hugely important to come up with a list of questions that reflect the challenges/problems that your everyday programmers would face. It’s pretty damned obvious if you think about it
On to the Questions already!
For us, I came up with a following outline for our more technical questions. (Please note that we generally don’t require problems be solved in any specific language and we always make the candidate write out and talk through their solution on a whiteboard):
1. Simple Programming Problem
This is mainly to get the candidate started. They should be trivia problems for anyone to solve. Though, there are some who can’t solve them – buyer beware. Examples:
- Write a function that computes the area of a circle given its radius (Pi * r²!)
2. Looping Problem
Some sort of problem involving a loop. Again, this is going to be pretty dang easy for most. Examples:
- Write a method to reverse the characters in a string: “the dude” to “edud eht”
- Write a method that iterates over an array and adds up all the values
- The ubiquitous fizzbuzz problem
3. Recursion Problem
This is where it things might get difficult. Recursion can be hard to conceptualize, especially on the fly in front of an audience, so don’t let them feel too bad if they can’t quite solve these. Examples:
- Write a function to reverse a linked list
- Write a function that traverses over a Tree structure (XML or instance) and searches for something
4. Regular Expression Problem
Regular expressions are freakishly handy and we use them all the time, especially in web programming. Sadly, a programmer without knowledge or understanding of regular expressions is going to be at a huge disadvantage. I know far too many programmers who don’t know regular expressions, and it pains me every time they want to do some simple string replacing, matching, or grouping. That being said, examples:
- Create a function that parses out all periods from a string
- Write a simple regular expression to make month, day, year groups from the string “12-12-2008”
The following questions are more specific to web programming, so feel free to swap these out with whatever type of programming work you may do.
5. General Web Programming Questions
We do this so we can guage the candidate’s overall understanding of the basic principles of the web. GETS, POSTS
6. Design a Simple Database and some Queries
The goal of this exercise is to demonstrate a general knowledge of how your average web application’s database is going to be structure. Important to note the usage of Primary and Foreign Keys and how they interact. Similarly, knowing how to do a few queries against this database is also hugely important.