[This is a translation of an article from the blog of RethinkDB , a California startup that develops a MySQL storage engine optimized for SSD disks. The original article can be read here ]In recent months, RethinkDB has been actively hiring new employees, and during this time we were firmly convinced that Jeff Atwood in his
article on FizzBuzz has not moved a
bit from the truth.
Without too much boasting, I can say that we place very high demands on job seekers. And we absolutely do not intend to lower this bar. Moreover, we are sure that the more weak programmers we filter, the better and stronger our team will end up. Some, however, note that only PhD holders in computer science with a second degree in quantum mechanics will soon fall under our requirements.
')
Of course, all these are vile insinuations. Our basic rule is not to hire people who do not know how to program.
In order not to be unfounded, we will publish our main test, screening out 19 out of 20 candidates at the telephone interview stage (despite the fact that before the telephone interview we allow not everyone, but only those whose resume we liked).
We do not ask to solve complex algorithmic problems. We do not force candidates to puzzle over puzzles. We do not give furious tasks on arithmetic with pointers. The task, which is beyond the power of the overwhelming majority of our candidates, looks like this:
Write on C a function that rearranges the elements in a single-linked list in the reverse order.Everything. Point.
Among those who did not solve this problem were people who had the summary stated “wrote patches to the Linux kernel” and “participated in the development of compilers”. There are quite a lot of PhD holders in computer science who have stumbled over this task.
Of course, this is not the only question that we ask. We are also interested to know
what is the maximum complexity of inserting N elements into a vector (or in ArrayList, or
whatever your favorite language is called a dynamic array). If you do not know - not scary, let's try to think together! We will be happy to explain to you the internal implementation of the vector. Heck, we'll even count O (N * logN) as the correct answer!
How would you implement read-write lock ? It is not necessary to write code, explain at least the basic idea. Oh, are you familiar with the concept of starvation? It's great! Not? But what is this, tell us anything!
We ask about the differences between
cooperative and preemptive multitasking . We ask about
conditional variables in inter-thread communication. In 19 cases out of 20 in the handset only silence.
The meaning of these questions is very simple: they allow you to find out how well the candidate learned the most basic things that he was taught at the university. In addition, all these things are somehow found in our work. Our experience in conducting interviews shows that if you know the difference between threads and coroutines (threads vs. coroutines), if you can turn over a simply linked list and if you know a little about conditional variables, then your level is much higher than that of most applicants. programmer jobs.
Of course, our interviews are not limited to these simple questions. From the people we want to work with, we require much more knowledge. But we do not demand the impossible. We want our employees to have good fundamental training, that they are eager to create cool things and that they sincerely love their profession.
My colleague, having read the article about FizzBuzz for the first time, asked: “If they cannot write FizzBuzz, what can they do?”. I repeat: the initial screening throws out 19 out of 20 candidates. Each telephone interview takes me about 45 minutes. Except for a few hours to preview the resume, then talking on the phone with 20 candidates in total takes about 15 hours. And all this is only to find one (!) Person with basic programming skills, and only then proceed to a personal interview with him.
Where are you, real programmers?
UPDATE. A small explanation: a phone interview (phone interview) implies not just talking on the phone, but also some shared web-based notebook in which the candidate can write something, but conducting the interview, respectively, to see what is written. The author does not require the candidates to dictate the code in the tube.