A code challenge is a fun, satisfying way to learn new technologies and rapidly develop your skill set. You decide the requirements and the amount of time you’d like to spend on it, and when you’re finished you’ve learned something new and learned it more quickly than you thought you could.
You’ve got four hours. Go!
I was recently contacted by a California company about possible iOS work. As part of the interview process, and very early on, one of their tech leads asked me to participate in a code challenge. Of course I said yes, and of course I had no idea what it involved. The lead explained they would send me an email at a designated time and that I would have four hours to complete the challenge. That was it.
I fretted a bit about it, expecting some esoteric, lateral problem solving challenge, or something with QuartzCore and CoreAnimation that involved innovative 3D transforms that might very well be beyond me. I worried I had put myself in a position to fail, and fail embarrassingly.
Come 1pm a few days later I received the instructions. The challenge was eminently practical. It required me to connect to Facebook from within an iOS application using the public Facebook SDK and perform a small task using information from the Graph. They had spec’ed the app out nicely, quite informally, and included a lo-fi screenshot.
While the challenge itself was neither esoteric nor complex and wouldn’t need more than a couple custom classes, it did require I learn Facebook’s iOS SDK. I confirmed receipt of the email and wrote back that I was unfamiliar with the SDK but would be happy to have a go at it. They explained that the challenge was largely a test of a candidate’s ability to learn and employ a new technology in a short timeframe.
Approximately three and a half hours later, I emailed them a finished copy of the challenge. To my disbelief, I had completed the application to specification. Working under a strict deadline, I had researched, designed, developed, tested and deployed an application using technologies which I hadn’t know anything about just hours before.
Wait a minute, that was fun!
Needless to say, the experience was extremely satisfying. And reflecting on the challenge a few days later it occurred to me that this was a great way to learn new technologies. Rather than just fooling around with an API or design pattern in a haphazard way, a code challenge presents a concrete set of goals to be met by a specified deadline. You know exactly what you’re going to learn ahead of time and then you actually learn it, with established metrics for gauging the success of your effort.
Moreover, a code challenge pushes you outside your comfort zone, placing demands on your abilities as a programmer. It keeps you from becoming stuck in the rut of the familiar, and it develops skills which may turn out to be invaluable later on. As it turns out, I’m now working on an application for a client which supports log ins over Facebook. The challenge also led to my own improvements to the Facebook SDK which I’ve made available as open source.
Code challenge: DIY
The experience convinced me that code challenges should be a regular part of a programmer’s routine. Give it a go yourself. Have a technology you’ve been meaning to learn for the longest time? Another programming language? An SDK or API? — which make great candidates, by the way. Or maybe even something you haven’t given a lot of thought to but keep hearing about?
Pick something, anything, and do a little research on it. Spec out a small application and mock up a screenshot or two if it’s appropriate. Be realistic about what you can accomplish, but don’t go easy on yourself either. Set a couple of concrete goals that you think are feasible but will really require you to put in the effort. Then set aside a few hours one afternoon and build it.
As you undertake the challenge, step through every phase of a complete iteration, with a timeframe for completing each one. Spend thirty minutes on the specs and mockup you prepared and complete your research. Develop the first feature in an hour, and the second in another. Use the next forty-five minutes to test and factor your code, and then go for actual deployment with the final forty-five minutes.
You’re going to be astonished at just how much you can accomplish in four hours when you push yourself. When you finish, you’ll be familiar with a new technology, and who knows, an idea might already be growing for the next awesome app that takes advantage of it. If nothing else, you’ll have another tool to add to your belt and an immensely satisfying sense of accomplishment.