What does Facebook looks for in new recruit?

 A Research Engineer at Facebook narrates the expectations in new potential recruit.

 This is from Serverside Magazine

First and foremost, the ideal Facebook engineering candidate should be good at coding. I know this sounds silly, but a surprising fraction of the people we interview could improve their coding skills instead of focusing on mastering specific languages or technologies. We look for good generalists able to move freely within the organization.
Feel free to choose your favorite programming language when interviewing. The typical Facebook interviewer accepts a choice of 3 – 6 languages, subject to the ones she’s comfortable assessing coding ability in.


The candidates I personally interviewed used Java, C, C++, C#, Javascript, Python, Ruby, PHP, Pascal, and even pseudo-code. (I recall I recommended “hire” for the pseudo-code guy.)
We do care about one’s ability to code; code is quintessential for us, for engineers from front-end to back-end to system configurators to researchers. You know how you figure someone can play basketball, or act, in a mere few seconds? Same goes about coding – you can tell whether one can code by seeing how they approach implementing some simple algorithm.
Consider for example someone chooses C or C++. Then a good warmup question I might ask is “Implement strstr()”. It has a simple spec (so we don’t waste time with explanations) and allows the candidate to show they can code.
Just do a clean implementation of the brute force algorithm – no need to memorize Boyer-Moore and others. The canonical solution looks somewhat like this:
1
2
3
4
5
6
7
8
9
10
char* strstr(char* haystack, char* needle) {
    for (;; ++haystack) {
        char* h = haystack;
        for (char* n = needle;; ++n, ++h) {
            if (!*n) return haystack;
            if (*h != *n) break;
        }
        if (!*h) return NULL;
    }
}
Using indexes is fine, too, as are myriads of alternatives. Ten people implement it in eleven ways, which is fine as long as things don’t get too complicated or plain broken. The code above is a good baseline because it’s simple – no special casing for “the empty string is a substring of any string including the empty string”, “a longer string cannot be a substring of a shorter string” etc.
The function organizes computation systematically towards achieving the result. Compare with e.g. the more complex solutions at http://goo.gl/U4poN (the short function above implements the optimized algorithm given there).
This question is a Facebook interview classic, known all over the Net (http://goo.gl/glnAz). I ask much more complicated questions when interviewing (some I don’t even know the answer for), but a candidate unable to lift strstr (or similar) off the ground cannot be a Facebook engineer. It is surprising how many fail at it or get it wrong.
I focused above on the coding part because it’s a gating factor. We have other important criteria, such as cultural fit and design / architectural abilities. Even specialists (in e.g. machine learning) must impress when it comes to coding and other general skills, in addition to being great at their specialty (our recruiters pair such candidates with engineers particularly strong in the same area).

The ideal Facebook engineer is a great hacker, a strong generalist (and in addition possibly exceptional depth in some area), and an adaptable person comfortable working in small, fluid teams.
Regarding degrees, Sean Murphy, lead recruiter with Facebook said :
It’s helpful to have a strong CS background but not a requirement. We have many engineers who are doing really well with degrees in math/physics/symbolic systems and other areas or no degree at all. We have some really smart people and some really creative people with no CS background. For foreign candidates, its much easier to get a work visa with a degree but we’ve hired some engineers with stellar experience and no degree.