Answer by Janko Jerinic:
Oh, there are plenty of them, and they're a lot less exotic than you might think. If you're expecting names you might have read about on GeekWire, or something, go away, because you won't be impressed.
I know many guys and gals who satisfy your condition of being rejected by these companies – really, really good engineers, who did not get famous because they built a few useful things, but otherwise can't invert a binary tree (or some equivalent high-school level problem) when instructed to do so. Instead, these would be capable, versatile, well-educated guys who have spent years earning respect and reputation in big tech companies, and yet failed to get offers from one company or the other.
Interviews can be slippery. They are not deterministic processes whose outcome is known in advance, based on observations on the candidate's capabilities and education.
People get sick. They can be tired, or get nervous, or confused, or can be occupied by different things. We are not Turing machines.
By people I mean both interviewees and interviewers. They don't click, they don't understand each other well, their expectations are different.
A number of stories come across my mind which I could share in support of this, but I'll share the one I know best – mine.
Facebook recruiter contacted me via LinkedIn, and I was offered to come for onsite interviews after clearing a phone interview, and I didn't get an offer. What a blow to ones ego, eh? So, how did it happen?
- I didn't prepare answers to behavioral questions (which I actually never do, by the way, because you should be able to talk about your career at any point in time) but, unlike most of the times, I wasn't concise and coherent in one of the behavioral interviews, and the interviewer just didn't get me. Her feedback was – I see tons of confidence and energy, but I just didn't understand clearly the stories behind some of his answers – and that's fine. I went too broad and she lost me, it happens.
- Other interviewer objected to not hearing some of the things he wanted to hear during a system design interview – without actually asking these, specific, questions. I talked about many other things I thought were more important, I even knew answers to the questions that were never asked and I gave him a lot more than he bargained for in many different areas. Still, he didn't get what I was (apparently) supposed to talk about and gave me a no hire. That's also fine – mismatch in expectations. I should actually prepare, next time.
So, do these failures in communication make me a bad programmer? Well, I don't think so, and yet Facebook rejected me. How can I know that I'm not a bad programmer? Here are some ideas:
- My technical interviews were great, so was my other behavioral/technical interview.
- My interviews at Microsoft were an order of magnitude more demanding – almost 8 hours of programming and maths, up to 1 hour of that behavioral jazz. Piece of cake.
- My interviews at Amazon were also a lot more difficult – 5 hours in a hotel room with a whiteboard, barrage of technical, programming and system design questions with some behavioral questions, in a very unusual setting. No problem.
So, I'd say I handle interviews quite well and can't be all that bad. Yet, that day, I failed at Facebook. I haven't tried Google yet.
There are many great, even brilliant programmers, who are incurable introverts. Lone wolves with infinitesimally small levels of social, or, God forbid, soft skills. Terrible team players. Yet, absolutely brilliant guys, who know so much and produce glorious code, straight from their minds. These guys fail interviews frequently.
Also, there are engineers with tons of industry experience, who were far and long enough away from Introduction to Algorithms, so that it simply faded from their caches. These guys are having a hard time wrapping their heads around the idea that they actually need to prepare for their interviews. Slight influence of ego. (Plus, when you see a problem for the first time, you stand a better chance at solving it, then if you had seen it before and instinctively try to remember the approach)
Some people suffer from incurable stage-fright. They freeze when under a spotlight. You stand in front of that whiteboard, you can feel the seconds tick while you try to focus on actually thinking about a solution. You can feel the weight of the interviewer's gaze, while you try to steer away the thoughts which try to evaluate their thoughts and impressions about you, and, again, focus on the problem at hand. You feel your heart, your throat thickens and your chest feels too small for you lungs.
This is quite natural, and the ability to handle and overcome these situations has zero correlation with programming skills. Some people handle it well, some don't. Again, we're not (Turing) machines and I believe that handling emotions well can be of much more significance in handling stressful interviews well, than sheer programming skills.
So, if we assume that both the level of programming skills and the level of emotional intelligence follow a normal (Gaussian) distribution and if we assume that the two are relatively uncorrelated, we conclude that there must be relatively many above-average programmers who have failed at job interviews with a top tech companies, due to reasons that have nothing to do with how good programmers they are. Conversely, we may also deduce that there must be relatively low-skilled programmers who have been able to get hired by top tech companies due to their superior emotional intelligence and/or soft skills.