Technical interviews and coding challenges often focus on skills: how fast can you implement a reverse proxy in Golang? Here’s a piece of paper, can you sketch a webapp in Express? Skills are necessary, but only half of the game. And since I believe that basically anything is learnable, I’m more interested in questions such as: How fast can you learn? Do you like learning? Is problem-solving fun for you?
So, how do you test for that? Ideally, I wanted to come up with a small but challenging pre-screening test that roughly selects people I want to work with: People who love to dig into new concepts, who won’t quit until a bug flips on it’s back and all six legs point upwards. Here are my thoughts on this kind of test:
If you want to know if someone enjoys learning for learning’s sake, then you can’t be using something useful for daily work. Pick a fun tool or language that has interesting concepts or ideas, but that they’re unlikely to know already or use in the future. I picked Hy, a “wonderful dialect of Lisp that’s embedded in Python.” Every Lisp dialect has it’s own wonders, and so does Hy. At the same time it’s sufficiently niche and small that most people are unlikely to have used it—and if anyone applying has, well, that’s not a problem then, is it.
Make it sufficiently difficult for whatever level you want to hire. If it’s something that anybody can do already, than it’s not a great selector. In this case, Hy is sufficiently peculiar and the interaction with Python comes with quirks that make this non-straightforward, even if you know about Lisp. For people who don’t, the idea of macros will be fun, challenging and possibly eye-opening.
The challenge I came up with in the end is to implement a tiny DSL for Flask in Hy. You can find it on GitHub.