We’ve been actively recruiting for four months now, and if there is one thing we’ve learned, it’s that Jeff Atwood wasn’t kidding about FizzBuzz.
Among our friends in the startup community, RethinkDB has the rep for having the toughest interview process on the block. And it’s true – the interview process is something we won’t compromise on. We’re prepared to turn away as many people as it takes to build a superb development team. We wrote that much in an earlier post. In the past few months we ran into people that thought we have ridiculously high standards and are hiring rocket scientists who also double majored in quantum mechanics and computer science. We don’t. We just won’t hire programmers that can’t code.
In the interest of openness, we’ll post the smoke test that makes us turn away 19 out of 20 candidates within half an hour of a phone conversation (and that’s after screening the resumes). We don’t ask people to code a solution to a complex algorithms problem. We don’t ask to solve tricky puzzle questions. We don’t ask to do complex pointer arithmetic or manipulation. Here is the question that the vast majority of candidates are unable to successfully solve, even in half an hour, even with a lot of nudging in the right direction:
Write a C function that reverses a singly-linked list.
That’s it. We’ve turned away people with incredibly impressive resumes (including kernel developers, compiler designers, and many a Ph.D. candidate) because they were unable to code a solution to this problem in any reasonable amount of time.
We ask other questions, of course. What’s the worst case complexity of inserting N elements into a vector (or an ArrayList, or whatever your language of choice calls dynamic arrays)? We don’t care if you know, we just want you to try and figure it out. We’ll explain how a vector works internally. Hell, we’ll even accept O(N log N) as an answer.
How would you implement a read-write lock? You don’t actually have to code it over the phone. Mentioning starvation issues is bonus points. For heaven’s sakes, just give us something.
We try to ask about the difference between cooperative and preemptive multitasking. We try to ask about condition variables. 19 out of 20 times there is silence on the other end.
Why do we ask these specific questions? Because they’re part of a core body of knowledge taught in any undergraduate curriculum worth its salt, and because in some form or another, they came up in our daily work. And in four months we found out that if you understand the difference between threads and coroutines, can reverse a linked list, and have a basic understanding of condition variables, chances are you’re probably a much better programmer than most who are looking for a job, and a huge chunk of those who aren’t looking as well.
We’re hiring people who can do more than what I listed above, but I don’t think we’re asking for too much more. Just a solid understanding of the fundamentals, the drive to accomplish great things, and a little genuine love for your craft. To quote one of my colleagues who heard about FizzBuzz for the first time, “If they can’t do FizzBuzz, what can they do?”. After spending hours reviewing resumes, it takes twenty interviews to get to the candidate that can pass the smoke tests. At an average of 45 minutes per interview, this works out to fifteen hours of work. That’s a lot of time to find one candidate with a basic understanding of software engineering.
Will the real programmers please stand up?
Interested in working at RethinkDB? We’re hiring – please see our jobs page for more details.






[...] This post was mentioned on Twitter by Codeboffin and Code Anthem, RethinkDB. RethinkDB said: Will the real programmers please stand up?: http://bit.ly/94HBX5 [...]
[...] RethinkDB wants to know where all the real programmers are. I do too. While I can commiserate with their [...]
[...] RethinkDB – The database for solid state drives.rethinkdb.com [...]
[...] more here: RethinkDB – The database for solid state drives. 29 June 2010 | Uncategorized | Trackback | del.icio.us | Stumble it! | View Count : 0 Next Post [...]
…
RT: @ignatandrei: I’m not a programmer ! …
[...] June 30, 2010 by phocus1234 in Uncategorized. Leave a Comment RethinkDB just claimed that they can find real programmers which is bullshit if you ask me. All this crap with “our [...]
[...] Jul.02, 2010, under PHP, Programming, Tech Two days ago I was reading in RethinkDB’s blog the “Will the real programmers please stand up?” which took me to the blogpost of Coding Horror “Why Can’t Programmers.. [...]
[...] with the hiring theme, RethinkDB blogger Slava asks the real programmers to stand up. The post is essentially a reaffirmation of the FizzBuzz problem. I’ve always been an [...]
[...] the real programmers please stand up? automated edition July 3, 2010 // 0 A recent post on the RethinkDB blog mentions a simple programming problem that is asked of applicants for programming jobs: Write a C [...]
[...] not a programmer ! http://www.rethinkdb.com/blog/2010/06/will-the-real-programmers-please-stand-up/ [...]
[...] en rethinkdb.com acerca del proceso de contratación de nuevos programadores. No me habría extrañado tanto si no [...]
[...] 无独有偶,国外一家技术公司RethinkDB在其官方博客上也谈到这个问题,抱怨了找到一个真正符合要求的程序员是多么艰难。外刊IT评论编译了这篇博文,全文如下: 我们积极的对外招聘已经有四个多月了,如果要问从这次经历中有哪些收获,我只能说,我终于明白,Jeff Atwood在FizzBuzz这篇文章里说的并不是玩笑话。(译者:这篇文章里说程序员不会编程)。 [...]
[...] this post at RethinkDB I decided to take my chances at solving the problem they present to the candidates to work with [...]
[...] a read to “Will the real programmers please stand up?” posted at RethinkDB. Think about the questions as you make your way through your academic [...]
LOL, talk about sad comments. Does anyone do anything with blog posts anymore other than post them to Twitter with a 100-character comment? Obviously I’m a little late to the party though, having found this post via Slashdot, and I’m lamely commenting instead of tweeting.
I understand your pain, for I have had some similar troubles interviewing. I appreciate your posting some of your interview questions though. I think they are better than some of mine, so I will be stealing some of them.
I can’t believe no one has posted this yet, but maybe that’s because it’s too long to fit into a tweet:
struct node *reverse (struct node *head)
{
struct node *p, *q, *r;
if (!head)
return NULL;
if (!head->next)
return head;
p = NULL;
q = head;
do
{
r = q->next;
q->next = p;
p = q;
q = r;
}
while (r);
return p;
}