When I try to see if a person knows how to "think", I start with fizzbuzz and then ask them to do it again without if or case statements. The first time a person is asked something like that you see if they're a thinker or if they just go "that can't be done." That question does a good job dividing people into a group that in 5 years time will ether have 5 years of experience or 1 year of experience repeated 5 times.
For an entry-level position? Sure. For a senior-level position? Don't waste my time. I disagree that the Github repo, resume, etc are useless. You can glean a ton of information about me from those data points that can tell you whether I can code or not. You want to know whether I can think or do basic programming skills? Ask me about my repo. Ask me about projects I've done. If I actually wrote that code, I'd be more than happy to go into detail about the work I've done.<p>Like someone else said, we wax poetic about DRY all the time, yet you're asking me to take time out of my day to repeat things I already know when that data has already been provided for you. Sigh.<p>You should be able to have an idea of whether I'm a suitable candidate or not before you even call me, and you should know whether I can code or not before you even bring me into your office.<p>Entry level position? FizzBuzz all day long. It's the only way you'll find out.<p>Mid- to Senior-level position? There are better ways to figure out my competency level.<p>My two cents.
I have been doing a lot of phone screens for our company lately. We ask a FizzBuzz like question in our first phone screen.<p>So far, only 30% of applicants manage to go pass this point.<p>It's actually quite hard to believe. Guys who claim to have multiple apps under their belt simply cannot write code. I often question them on what they did in their past and what was their actual contribution to their team. The two most common scenarios are either the so-called technical manager who got promoted there become of lack of coding abilities or the self-taught programmer who was hired by the technical manager. By self-taught, I mean someone who can write HTML and copy/paste JavaScript code from somewhere.
When hiring "Experienced C Programmers", I would just show them a the short version of strcpy() out of K&R, but with variable names change from 'src' and 'dst' to 'x' and 'y'.<p>Just to read it and say what it did. This eliminated the vast majority of the applicants:<p>void strcpy(char <i>x, char </i>y)
{
while(<i>x++ = </i>y++);
}
I suspect the same people who complain about being asked fizzbuzz are the same people who complain about getting their ID checked when they buy alcohol.<p>I can implement fizzbuzz in < 30 seconds in half a dozen languages (in vim, maybe < 60 seconds on paper/whiteboard). I don't really take offense to being asked to blow 30 seconds; I understand where the interviewer is coming from the same way I understand where a cashier asking for my ID is coming from.
I've heard from multiple sources that people fail fizzbuzz. I now read multiple posts here saying the same. As a hobbyist programmer with a few free lance projects under my belt who never worked in "the industry" I find it simply fascinating.
My first reaction is that maybe your interview is very stressing or maybe you ask the applicants to write the code on paper and fail them for any typo. I just can't believe anybody, anybody who ever programmed anything failed such tests in reasonable environment.
I mean if I couldn't write fizz-buzz I would never get any code to work. I mean I imagine myself failing to implement a dictionary in C having limited time and being under pressure without a bug somewhere but fizz-buzz ? really ? :)
If there is one thing around hiring programmers that I wish had more discussion, it's the notion from the interviewer's goal of "trying to understand how one thinks about a problem." Frankly, I don't think we're very good at it. And for good reason -- it's really hard.<p>My personal experience has been that most of us in the industry aren't well equipped to make that determination reliably among each other. The most successful interviewees I've ever seen are those with excellent pattern recognition and recall. Only a few of those are decent programmers (not even excellent.) But they're all very talented in describing ways of thinking.<p>In spite of information at hand, I rarely see those in hiring roles ever go away from "does this person think about this the way I do?" It is a very subjective task, so I don't fault those in these positions for following that process. But I think there's a perception in "understanding how a person thinks about a problem" that is flawed.
> guarantees that neither the interviewer nor the candidate is wasting the other’s time<p>Yeah, it guarantees that only the interviewer is wasting the candidate's time. If you're hiring off the street I could possibly see some value in FizzBuzz, even though it's going to turn off any actual A player you happen to interview, but if I sent in a portfolio/past project/etc and you FizzBuzz me, I'm walking out. If you distrust a candidate that badly I can't imagine how micromanaged your employees must be.<p>FizzBuzz both saves you time by filtering out incompetent people, and saves actual competent people time by demonstrating that you're not willing to do what it takes to attract great hires. There's no shortcut to real interviews.
Yeah, fizzbuzz is a filter guys. Yes, you can read their code repos and do in depth interviews, but you shouldn't <i>waste your time</i> until they can do something as simple as fizzbuzz. You will be truly surprised how many just don't pass that filter and are literally wasting your time.<p>To reiterate: necessary, but not sufficient.
"A good resume with a long list of well-known companies and a degree from a top-tier engineering school doesn’t guarantee anything." I'm sorry but a year+ at those companies proves you've provided at least <i>something</i> of worth to them. The real crux of the argument is can they solve the kinds of problems <i>your</i> company faces.<p>I would certainly hope that the barrier to entry for every job I applied for wasn't something so standardized (and quite frankly, useless). I would eventually point to a github repo with it done already. We wax poetic about DRY yet you're gonna ask me to repeat myself? Seems pretty hypocritical to me.
I am still skeptical for the effectiveness of FizzBuzz. I wonder if there are actual science experimental result to support this hypothesis where asking FizzBuzz as a filter would actually be effective. I wonder what is the percentage of those candidates who failed this filter are actually the worst kind of candidates, and if those who passed this filter would turns out not be a good fit. I see no correlation between passing FizzBuzz and being a good fit, productive engineer. Most of the proponent of FizzBuzz seems to assume that engineering skills could be accurately form a pyramid, where there are some questions where you need to understand before tackling other higher level questions, and that people who don't understand the "basics" will not be able to grasp or excel in the skills in higher levels. May I ask how many interviews here have taken CS courses and may I ask how many of you find FizzBuzz is relevant to any of the courses you have taken? Do you need to know FizzBuzz in order to tackle the vast problem spaces of Computer Science? Do you need to know FizzBuzz by heart to have experienced working in a large projects with thousands of people? Do you need to know FizzBuzz to implement a binary tree? Do you need to excel in FizzBuzz to code up a language parser?<p>To me, it is absurd that people believe in FizzBuzz because I see this mindless ritual of asking FizzBuzz question can be best described as Cargo Cult Science as coined by Richard Feynman (<a href="http://neurotheory.columbia.edu/~ken/cargo_cult.html" rel="nofollow">http://neurotheory.columbia.edu/~ken/cargo_cult.html</a>), where in this context of hiring, recruiters are hoping that by asking FizzBuzz he will definitely filter out all incompetent programmers/engineers so he won't have to waste time finding out if the candidates are actually suitable for the position and the team.<p>If FizzBuzz is the ultimate filter for the position he is applying for, or if it should be considered universal, then why wouldn't university teaches them to memorize all possible variations of them in their introductory programming classes? Also wouldn't you think people who are not good programmers would cheat his/her way out by simply memorize the solution? Then aren't you still wasting time asking FizzBuzz questions?
I don't really understand; why not ask an actual substantial question in a phone interview? Poor candidates who would fail fizzbuzz would fail that too; good candidates would be expected to pass such a question anyway.<p>Either way, you're wasting an hour of eng time at most.
Totally agree on asking FizzBuzz type questions first! I have understood a lot about the person just by asking simple questions. Most people fall into the trap of answering it in a very complicated way to advoid many if else if conditions for no reason! :P :)