Wednesday, June 11, 2008

The Worst of Crimes

There is no sin so great for a programmer as lack of curiosity. A sufficiently curious programmer can overcome a whole range of deficiencies, including laziness. Traits detrimental to normal jobs such as lack of: intelligence, social skills, or hygiene. Some of the greatest coders I know are lazy, smelly, and not necessarily "smart" in the common meaning. But they are curious about how things work - which is why they're great. These are the people that run into defects, and rather than sit on their hands, find ways to fix them. Curiosity drives research, and from self-driven research comes experience - which can even close the gap to their more intelligent peers.

Industrious coders will stay at work all night because it is their duty to do so. Curious coders will stay at work all night because they can't sleep without knowing why the database is running so damn slowly. Which would you rather hire?

I bring this up, because at my new job we're looking to hire, and I want to ensure that we aren't just going to hire someone with lots of education, or intelligence (both important attributes) but someone who has a general curiosity about how the world works.

Question: What activities do you do outside of work?
I know it's a cliche to say "I want a well-rounded person", but in this case, I do. Not because I particularly care if my co-workers like to play street-hockey, or are into beat poetry, but because curious people tend to have a lot of interests. It's all part and parcel to wanting to know about the world. Even the biggest dullard on Earth has at least one interest. If the best they can say is "I like to watch movie", move on...

Question: What non-school- or non-work- related programming project are you most proud of?
Of course, lots of people have varied interests. This doesn't mean they are necessarily relevant to the job. My buddy Jim mentioned this good question. It's the python paradox in another form: the best programmers do it outside of work. I think it's a misnomer to claim that good programmers program for fun, because I don't care if you have fun or not. I didn't learn Ruby for fun, I learned it because I needed a good scripting language to write code generators for crappy J2EE/EJB 1.0 projects. I wasn't having fun, but I was driven by a curiosity to know how Ruby worked. And that's enough. Again, no answer equals no employment...

Specify a real problem and try and gauge interest.
This isn't a question, but a strategy - and one that I prefer. Body language will tell you when someone is really interested in a problem - they'll sit up straighter, perk up a little, and give an obvious effort to solve the problem. Remember, in theory this person wants to work for you - so trial by fire. OK, at least mediation by lighter. The point is, try explain a specific technical problem you face, just minus the domain-specific jargon. For example: we run Hibernate on top of Oracle and some of the queries are going very slow. It's a good technical question, but don't - as an interviewer - get caught in the trap of just listening for technical correctness. Curious people will ask questions before working out a possible formulation - dullards will either have no answer (take a hike!), or ramble off a list of template answers (indexing, data model, bad query generation). I look for questions, even if it's as simple as "What version of Hibernate are running?". If someone can't get excited about solving a real problem (which involves attempting to understand it) during an interview, how excited will they be after 6 months of 8 [ahem, or 10... or 12] hour days?

Games aside, good technical interview questions and strategies can be useful - but never foolproof. I assume you are a curious person, and are merely seeking to find others of our kind. You only meet with a person for a short time, so like Bram Cohen (creator of BitTorrent) says: "In an interview you can tell if a person is a pleasant conversationalist, and you can give some technical questions to rule out the truly inept, but beyond that you might as well be rolling dice." That's true, but if you look for specific personality aspect - which I suggest curiosity is a must - you can at least get a good feel for this characteristic.

Good to be back!

0 comments: