The Problematic Developer/Programmer Interview Process

Annoying Orange Fan Art, Copyright The Annoying Orange
Annoying Orange Fan Art, Copyright The Annoying Orange

I was going through Dzone and bumped into this article by Bozhidar Bozhanov explaining his frustration with the interview process at Facebook after being rejected after 3 phone interviews. In the article Bozhanov explains that the interview process consisted of algorithmic skills and general computer science test (recursion, binary search, basic data structures), basically “easy” stuff that any computer science grad should be able to solve and that is the rub that I personally have with those types of interviews. As Bhozanov puts it (better than I could have):

  • what you do on these interviews is something you never, ever do in real life: you write code without using any compiler or debugger. You do that in a limited time, with people watching you / waiting for you on the line. But let’s put that aside for now. Let’s assume that writing code without being able to run it is fine for interview purposes.
  • the skills that these puzzles are testing are skills that the majority of developers have never needed. Most people are writing business software, and it does not require red-black trees. What was the last time you used recursion in your business software? So the last time you’ve done anything like that is in college. And many of these problems are really simple if you are a freshman, you did them as a homework just the other day. But then it becomes a bit more tedious to write even things as simple as a binary search. Because you just didn’t do it yesterday. Of course you will be able to do it, but for a little more time, so that you can remember, and for sure by using a compiler. (By the way, the puzzles at facebook were really simple. I didn’t do them perfectly though, which is my bad, perhaps due to interview anxiety or because I just haven’t done anything like that for the past 3 years)
  • the skills tested are rarely what you will do in your daily work anyway. Even in these cool companies like Google and Facebook, there are still pretty regular projects that require coding to APIs, supporting existing code, etc. I don’t think you will be allowed to tweak the search engine in your first week, no matter how great you did on the interview
  • interview preparation is suggested and actually required before these interviews. Exactly as if it is a college exam. But that’s dumb – you don’t want people to study to match your artificial interview criteria. You want them to be…good programmers.
  • focusing on these computer science skills means these companies will probably miss good engineers that are simply not so interested in the low-level details.

And I agree with all of the points. I love programming, but I did not love my computer science classes. I had the most fun in classes that involved web development and database practice, but the theoretical classes,  zzzzzzzzzz… In all honesty. So it annoys me when going through an interview process and I am asked questions that I could have answered in 2003 but whose answers have long been pushed out of my general memory. Bozhanov (I agree again)  states that “obviously my problem is that I don’t like low-level and algorithmic stuff, so I wouldn’t be able to work for cool companies like Google and Facebook ” not just them but smaller companies that adopt the same practices in looking for candidates.

In my own personal experience, I was once rejected in pre-screening for a possible opportunity because I used “obtrusive Javascript” on a skill test I was given. For the uninitiated, obtrusive javascript means mixing Javascript and HTML code within the same document, proponents argue that the JS and HTML code should be contained in their own respective files, which is okay and makes sense to me for the the purpose of keeping organized code. What peeved me in this case is that the only reason I used obtrusive Javascript was to make submission of the test easier since there are email filters that block Javascript files. In the end, I figured that it was a sign that culturally in any case, I would not have been a good fit at that company. In any case, I feel like the market for developers is so hot right now that there are enough opportunities to interview with companies where you are asked and even tested about what you actually did, and will be doing at the company than algorithms I learned a decade ago. Some would argue that makes me a bad programmer, and it is fine with me, but the work I have done so far in my career did not involve me pondering what the Big O of binary search is and how to improve on it. There are cases where in pursuit of optimization there is a need to get a refresher on those concepts in order to research of to improve of them, but as I know, the life of a web developer rarely involves that detail of knowledge. If your dream job is to work for Google/Facebook/insertanybigtechcompany out here and you are willing to study for the interview, then proceed by all means, and it might be that those companies are looking for those individuals with that kind of profile but as for me, I will stick to interviews to where I am asked: “So what type of projects are you worked on?”, “Can you explain to us why you chose to implement this functionality this way?”, or better yet, “how would you go architecturally about implementing a Twitter like site?”.

PS: Jeff Atwood over at Coding Horror has his own views on the developer interview process and #5 and #6 where the biggest source of no-nos from the comment sections and the consensus in my opinion that is that the process Jeff outline was very risk averse for the company but will lose a lot of good people through it. This confirmed what I felt, is that as a developer, unless I am applying for a research oriented position don’t want to be bothered with theoretical knowledge from the past or being taken through loops which I feel are unrelated to what I worked and will be working on.

Advertisements

14 thoughts on “The Problematic Developer/Programmer Interview Process

  1. Never thought such in deep but this seems a perfect way to choose a right member according to different criteria and the priority. I think the people who are taking interviews as well as who is giving the interview need to focus on this.

  2. I had reflected my views in a separate blog post before:

    http://keyvan.io/why-big-software-companies-fail-at-hiring-good-talents

    But the problem is even CS graduates have difficulties passing these interviews. These interviews are designed in a classic way that only those who have trained to pass this system can pass. I know many CS senior students who spend 2-3 months to read a few books on programming interviews and apply to 20+ positions and finally get a few of them. It is totally brute-force and doesn’t depend on your skills, even theoretical skills. In fact, the outcome of programming interviews at big software companies depends a lot on your fortune and the person who’s interviewing you. For them, it’s just a filtering process to pick one out of 100’s, not a process to pick the talented one, so most of the employees just throw out some random questions and judge you.

    Unfortunately, this system is broken and that’s why companies like Microsoft and Google are being flooded with B and C level employees, and innovation is killed there.

    1. I agree totally. The only thing that would make this make sense to me is that they are deliberately looking for employees with these specific profiles, people that can recall and tweak a complicated algorithm of the top of their head and it’s not a lot of developers like that.

      1. In fact, it’s not the case for any of these companies but Apple. Apple is the only one who posts very particular requirements for job positions and asks for them. The rest of these companies act very brute-force which is a minor part of their general brute-force strategies.

      2. Hum… at least we know that they got those particular types of algorithm (brute force) down to a T 😉 But it is consistently what I have heard from friends and different articles around the Internet. From a friend that interviewed at Microsoft, what particularly peeved it was the arrogance of the people there during the interview. He came away from it with a negative perception of the company. The question is though, assuming that these practices have been put in place lately, would those same interviewers be able to answer the questions they ask? I would be that only a minority could, like in real life.

      3. No, they can’t. Most of those questions are searched and found on the internet. The whole interview thing is something that most employees at Microsoft and other companies don’t like to perform but they’re forced to do that. In most cases, they would like to get rid of the applicant as soon as they can. Microsoft’s interview questions are famous as manhole questions because they’re so stupid. I am a doctoral student in computer science and am still surprised by the ignorance of these people asking these questions.

      4. I am just waiting for a troll to show up and argue that we are just bitter because a)we failed when interviewing with those companies b)Could not even get an interview with those companies c) don’t have what it takes.

      5. I know a guy who learned something from one of my books and now he’s working at MS as a program manager and his daily job is based on my book’s topic. Such a person is just an idiot if he makes that statement! I’ve received that on my blog before, but I don’t give a damn! Such people are far from a point to know what is going on at all. They just have a pure love for these software companies blindly.

  3. I would not be able to get most Comp Sci type questions right; my degree is not in CS (it is a EE with no CS required). However, I was in S/W QA for 7 years and then switched over to the dark side (dev) and have been developing for over 17 years, so I think I know how to write/recognize decent code.

    No I would never even bother with an interview with Google or anybody like them (for one thing, I don’t have a Masters or PHD), and no I don’t study how to reverse a string efficiently – I know that the dev env. I use already has that functionality and maybe the person who wrote knew how to do it better than I could (although, after having looked at some of the code in the JDK I am not so sure about that anymore).

    1. Hey that’s a good point you brought up Developer Dude! Not all developers have a pure CS background indeed so those candidates are at a natural disadvantage…unless they can cram it in before the interview.

  4. Nice post, and I agree. First time I had to search for new programmers I checked the Internet for how people are doing the tests an so. And yes, a lot of questions about bubble-sort and such. So I started writing these tests for the potential interviewee…but then I realized that for me to write the test, I have to know the answer myself. So I in turn had to google for the answers etc. (Not difficult, but since not used we forget the details etc) That’s when I realized, “hey what the heck am I doing?” If I don’t know the answer and I don’t really think it is relevant, why should I ask the person I interview for this? So I never used them.

    1. There are a couple of things to consider here:
      – what happens during the interview usually depends on the job position you are applying for (different approach for an entry level and senior level positions)
      – the one that hires errs on the side of caution (ie it’s better not to hire a good candidate than to hire a disastrous one) – may seem and it is sometimes unfair but that’s life
      – it’s not unreasonable to polish up you skills a bit before the interviews. you do want to be at your peak during the interview and you do want a refresh of the basic CS stuff. while on the job your favorite search engine will be your sidekick, during an interview not knowing or failing to articulate something that’s basic cs is a red flag.
      – from a certain level up it’s a lottery. don’t take any rejection personally.
      – continue to improve your skills working on building/improving something real (ie open source) and you will get there. think about what’s more important: working at Fb so that you can brag about it or working on something that challenges.

      One a side note: the coolest interview I had was with a guy that simply brought a laptop, had a project setup with some tests written and a skeleton for the code that needed to be written. We did pair programming, with him helping with technicalities like how do you run the tests, what is the correct syntax for this (it was C# with some generics in it, and at the time I’ve been working in C for ~ 2 years), what do you think about this approach – basically pair programming without him giving the answer.

      1. Good points Mircea!
        On your side note, I think to me that’s a fair way of getting to know how the candidate codes and processes information. Makes sense to me. Without bothering with the technicalities of remembering all the details of how libraries work it’s a fair way of getting to know the level of the candidate.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s