Interviewing is Broken

Composed on the 30th of December in the year 2015, at 12:19 PM. It was Wednesday.

Dumb puzzles

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."

"What?"

"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:

"So, using whatever language you want, php, python, perl, javascript, program something that gets today's date and time, then writes it to a file."

Me:


$ 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

"Reverse this array in php on this whiteboard."

"array_reverse."

"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."

MIB

pete: so that was a weird interview

erik: oh?

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?

erik: hah

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: no?

pete: then he starts writing out strings and asking me how to parse them into arrays

erik: lol

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

david: lol

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: okay...

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.

erik: lol

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.

Most interviews

"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.

UPDATE: 1/8/2016

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.

The one piece of technology I still use that hasn't changed since I was born.

Hi there! You should totally go buy my book for the low low price of 6.66! It's like buying me a beer at an out-of-the-way dive bar in Brooklyn! Not in Manhattan. Manhattan prices are ridiculous, though there are a couple of decent Irish dives where you can snag a drink for five bucks. Otherwise, you're looking at a two or three book beer.
×