What are some ways to measure a job candidate's technical acuity? Justin James gives some advice for those who are hiring programmers.
I've heard from many IT managers who need some advice on what kind of technical questions they should be asking job candidates. From time to time, I'll ask someone in the field to recommend technical challenges according to specific disciplines.
First up: Programmer. Justin James, himself a programmer and a blogger for our Software Engineer blog gives his advice for technical testing:
When creating a technical challenge for potential developer candidates, you should customize for the specific job. For example, if you are hiring a C# developer, handing someone a piece of Ruby code and telling them to "find the problems" just is not going to work well! That said, there are some challenges that can test the kinds of things that all developers should know. One of the most popular ones in recent years is FizzBuzz. The problem with FizzBuzz is that it has gotten so much attention in recent years, that even people who would probably fail it now understand it (it really is not that hard anyways). That said, I believe that FizzBuzz style challenges are a great way to perform an initial capabilities filter.
Let's look at the FizzBuzz-like challenge. The idea is to ask the developer to write an application that performs a task that covers the basics of development. The application can be written in any appropriate language, or even pseudo code. There are no tricks involved, but the challenge should require the same kinds of thinking that most business logic requires: conditions, loops, and filtering. Here are some examples (they all start with, "Write an application that..."):
- ... takes an array of numbers representing credit scores and prints the loan interest rate that they should be offered based on a chart. If the score is under the minimum value, display "No loan allowed."
- ... calculates the factorial of a number.
- ... examines a two-dimensional array of data. If the data at each coordinate is even, then display "EVEN" otherwise do nothing.
- ... has a string of text, and a list of strings. For each string in the list, it displays the number of times it appears in the single string of text.
As you can see, none of these should be very hard. But unfortunately, we've seen such a decline in the quality of developers, that far too many of them struggle with what should be trivial work. And the way the candidate solves these problems can teach you a lot about their style of code. How complicated do they make their solution? Is it "elegant" to the point that it cannot be maintained?