First question: "So, if a monster attacked Manhattan, how would you evacuate it?"
Last question: "So, you have a scale and nine identical looking balls. One of the balls is slightly heavier. Using only two weighs, how would you determine which ball is the heavier ball?"
(Three or four minutes of scribbling. Interviewer radiating obvious impatience.)
"Um... it's impossible."
"Are you sure?"
"Yeah, it can't be done, look at—"
"Okay, okay, just look at the scale."
(Draws a set of scales on the whiteboard.)
"Oh, THAT kind of scale."
"What did you think?"
"A drug(cough)postage scale."
"Oh, sorry about that."
Result: The whole interview was like this. Guess I didn't save enough bankers from Godzilla.
Wrong kind of problem solver
"So we like to describe real problems we've worked on during interviews. Do you do much database work?"
"Not really, no."
"Well take a crack at it anyway. So we had an issue with table locking and some race conditions, so yadda yadda blah blah...." (This goes on for about two minutes as he describes the problem.) "... So how would you solve this? You can be general about it, you don't have to write actual sql."
"Use InnoDB tables."
"All you need is row-level locking. Use InnoDB."
"Oh. Huh. That's much better than what we did."
Two hours and three interviewers later:
$ date > today.txt
"Well. Okay then."
Result: "We don't feel you have the right skill set." To be fair, I didn't know what closure was back then, but not like I didn't know it two hours after the interview.
Did you look at my resume?
"What do you think we're trying to do here?"
(I describe their exact business model in elevator-pitch style. I receive a condescending glare.)
"We're trying to make the world a better place."
(I stare at him, thinking, "Dick.")
"How would you implement a hash table in C?"
(I stare at him, thinking, "I'm applying for the privilege of cutting up your designer's Photoshop documents. I don't know C and my college major was Film Theory. At this point in my career I'm not 100 percent sure I can tell you what a hash table is. Dick." Fifteen minutes later, with a little coaching, I manage to do it anyway.)
Result: "We don't feel you're ready." ... to do things I wasn't qualified to do in a job that didn't require me to do them.
Let's make sure to waste everyone's time
This time I was sitting in on an interview. We were interviewing a guy for a junior html/css position. He has clearly stated that he is a novice programmer, really just starting to get a handle on jQuery. My direct supervisor grills him on a list of buzzwords. My supervisor's supervisor then asks: "How would you implement a load balancer in php across eleven servers?"
I made an excuse to leave, and mouthed "I'm so sorry" to the applicant when I shook his hand.
"Reverse this array in php on this whiteboard."
"Without using any php libs."
"Then why am I using php? You know the dollar signs aren't real money, right?"
One month later:
"Reverse this array in php on this piece of paper."
"Can I use libs?"
"What do you mean? However you want."
Me, reversing my tenth array in five weeks:
$x = [1,2,3,4,5]; for($i=0,$e=count($x)-1;$i<($e/2);$x[$i]=$x[$i]^$x[$e-$i], $x[$e-$i]=$x[$i]^$x[$e-$i],$x[$i]=$x[$i]^$x[$e-$i],$i++);
"Uh... I'll look at that later to see if it runs."
Result: "We don't think you're quite qualified. Also you're a dick."
pete: so that was a weird interview
pete: 20 minute walk from court square to Nowhere LIC
pete: warehouse building
pete: takes me into a giant room, like okcupid sized, with one desk in it.
erik: wtf that's pretty odd
pete: small talk introductions, he's this very soft spoken, intense middle eastern guy
pete: first asks me to critique their new design
pete: easy enough
david: holy shit you interviewed with the MIB?
pete: heh. I wish. then he draws two squares on a sheet of paper a dress in one and a person in the other, and asks me how I would set up a drag and drop, resizable interface that would save to a database
erik: erm wtf
erik: that's kinda odd
pete: then he tells me to write a mysql join query among three tables
erik: not too bad there
pete: which I do, and he says good, but you don't need this clause. so I'm like yeah, good point. He says it will slow it down, and I'm like yeah, yeah, then he says "Do you know how much slower?"
pete: and I'm like, uh, what?
pete: then he starts writing out strings and asking me how to parse them into arrays
pete: first one is easy
pete: second one I need to clear the white space, and I say, well you could explode it and trim each item, but it'd be faster to just do a string replace of white space to nothing then explode it
pete: And he says, "Do you know how much faster that would be?"
pete: uhhh.... no?
pete: then we get to one I can't do off the top of my head, and I say I'd need reference to work it out, so he says what do you use?
pete: me: google
pete: he turns to his computer, pops up google and says "What would be your first query?"
pete: uhhh... tokenize string php
pete: and that probably would have done the job, but he skips past the page and asks me two more queries, nothing's coming up, so he shuts it down and says, "It's okay, I don't know how to do it either, but the pseudo code would look like this."
pete: then he says "so you don't do much sys admin stuff, right?" and I say I manage a couple of servers
pete: him: what's your favorite?
pete: me: don't really have one
pete: him: what do you use?
erik: heh "whatever gets the job done"
pete: me: gentoo, freebsd, ubuntu
pete: him: why?
pete: me: what?
pete: him: which is your favorite?
pete: me: probably freebsd.
pete: him: good.
pete: there was another point where I was describing the image distribution thing I wrote for the online editor and he said, "interesting. how much better is it than something else?"
pete: me, again: what?
pete: then, immediately: how would you do the same thing with a modulo operation?
pete: me: what?
pete: him: here's a hint...
pete: then he does it, and it's cool, so I say so, and he says "Now, why not just save the binary data of the image in the database?"
pete: me: that's a terrible idea.
pete: him: why?
pete: me: wouldn't cache, would strain the hell out of the DB, the queries would be ridiculous.
pete: him: good
pete: him: how much faster would it be as a file over the db in a first load?
pete: me: dude, I have no idea.
pete: probably not a bad way to interview.
pete: sort of like walking into a police academy and being handed a gun and told there's a 10-71 in progress two blocks away, good luck
Result: Got an offer but didn't want them to erase my brain if I moved on.
"So I know these ten things that I think make me clever, I will judge your grasp of the entire field of computer science based on whether you also know these ten things. But first, tell me a little about yourself."
Tell me a little bit about yourself
A sentence you might hear four times in the same interview as they cycle people in and out, none of whom appear to have read your resume or cover letter.
What interviewing should be, since nobody seems to know how to hire anyone in this field
1) See if their resume has anything to do with the job.
2) Call them and have a chat to make sure they're not a moron.
3) Call their references to make sure they're not a dick.
4) Try to find someone who doesn't like them and ask why.
5) Bring them in for a few days, see if they can set up the dev environment, assign them some bugs nobody else wants to fix, have them meet everyone.
6) Pay them.
7) Decide if you want to keep paying them.
After the weird amount of attention given to this basic bitching post, I thought I should address some valid and invalid complaints.
First, to be explicit, the fundamental problem with programmer interviewing is the cult of intelligence. Nearly everybody who has been pulling paychecks from this nascent career has entered a room thinking they're the smartest person in it. On some level, everybody does this: you have to believe the means with which you view the world are valid, or you end up drinking a lot. I do both. In programming, we confuse the ability to do a job with the magical all-consuming, context-independent Intelligence that has repeatedly been shown not to exist, and we tacitly assume the people who have proven they can do a particular job are the best people for identifying other beautiful minds via brain teasers. I'm a modest Go player, and as much as I'd like to think it demonstrates some Platonic intelligence quotient, it doesn't. My game ramped up when I read some books on Go, and none of them did jack shit for my programming ability.
A take home programming test is not a bad way to do things. Some people say well there's no guarantee they didn't ask they their friends for help. WHY WOULDN'T YOU? I ask my programmer friends for help at least once a week. Programming is an impossibly vast field; after twelve years and twelve languages, plus all the frameworks and styles and paradigms or whatever the hipsters call it, I can speak with authority on a college degree's worth of comp sci subjects, yet still not know what "node" refers to in half the conversations my friends have.
The biggy is "Bring them in for a few days" which is apparently a conversation that people have been having for a while. I thought a lot about this sentence, because initially it was "Bring them in for a day" but then I remembered long ago a guy that seemed great but turned out to be an insufferable asshole, and I wished for a longer vetting process. But the truth is people can hide their inner asshole for far longer than a reasonable interview process.
One day of actual work should be evidence enough to tell you if a person can do the job you might hire them to do, and this is not an unreasonable request. People with jobs set aside a day to interview for a new job, because the interview process as it stands takes far more hours than a lunch break or a sick cat can excuse.
And no matter what, you might still hire a dud. You might hire a polymath who solves all your problems for three months then gets bored and sucks payroll for the rest of the year. You might hire a coke head who spouts seven-digit primes in his blackouts but corners your interns for hours trying to convince them that Yes was the end of artistic achievement. There's no perfect way to hire anyone for anything, but the programming world should stop pretending that it's full of perfectly competent geniuses with a genetic predisposition for identifying other perfectly competent geniuses with their special sauce questions.