Using Dynamic Programming Problems to Evaluate Tech Talent
December 1, 2016
You should test the skills of anyone that you hire, but this is especially important when evaluating tech talent. The way that you test the hard skills of candidates (in person, online/screen share, assignment based, etc.) should always be chosen to make things easier on your candidates, but the content of these tests should always be challenging enough to be an effective screening tool.
Along with understanding the theoretical side of things, your tech hire will need to have just as much in the way of experience as they do in knowledge. The work they will be doing is time sensitive, and you should never rely on tech talent that you haven’t seen in action.
Dynamic programming is a method for problem solving and is a common topic for questions aimed at tech talent during the interview process. Dynamic is most frequently used to create algorithms, optimize processes and optimize processing speed. Direct applications of Dynamic Programming are typically associated with senior tech roles like software architect and lead developer, especially if they will have to create and/or update some of the tools that your programmers use. Dynamic is also used in highly technical networking/internet provider positions as well as in scientific research, especially when working with complex data sets like the human genome.
Here’s Wikipedia’s definition, just so we’re all clear:
“Dynamic Programming is a method for solving a complex problem by breaking it down into a collection of simpler sub-problems, solving each of those sub-problems just once, and storing their solutions – ideally, using a memory-based data structure.”
Now, not every programmer or tech hire will use Dynamic Programming in their job. Many tech hires will only use algorithms, not create them, but understanding Dynamic Programming is still valuable for any level of tech hire. Dynamic problems should not be the main focus of any tech interview, but testing your tech hires with these types of problems evaluates their general problem-solving abilities as well as their comfort level working with matrices and data sets under a set of constraints.
Gayle Laakmann McDowell, author of “Cracking the Coding Interview,” had this to say about Dynamic Programming when answering a question about dynamic’s role in Google’s hiring process:
“I’ll probably annoy some algorithms people by saying this, but, dynamic programming is little more than recursion that uses a hash table. It’s not this big scary concept. Fibonacci, if implemented recursively (and efficiently), uses dynamic programming. So that’s the first thing to realize: if you’re a smart programmer, you should already understand dynamic programming.”
So, while coding interview expert Laakmann McDowell doesn’t believe that dynamic is a cornerstone of Google’s interviewing, she still thinks that understanding dynamic is an indication of high candidate quality.
We gathered some example Dynamic problems that you can use to evaluate tech candidates. You should not make Dynamic Programming the focus of your practical interview unless the role relies heavily on this skill, but these are still valuable questions to ask. Any tech candidate who will be working with algorithms, networks, data storage and/or process/program optimization, would benefit from an understanding of Dynamic and testing for this skill will demonstrate knowledge and experience in these areas.
GeeksforGeeks is a database of practice problems for programmers to hone their skills and prepare for upcoming interviews. They have a wide array of technical questions, including many on Dynamic Programming, and here are some examples:
Another great resource for dynamic programming questions is Career Cup, one of the largest resources for software engineers to prepare for interviews. Though many of their questions are generated by users, many more are pulled directly from the interviews conducted by major companies like Amazon.