The best jobs I've had in my career, by far, were with the places where the interview consisted of sitting down and talking. In fact, one notable one, I was interviewing with the founder (this was my first startup though back then they were just called small businesses, and this was just a fast growing small business). We talked about stuff, including technical stuff, some problems I'd worked on, etc. Not only did he not ask me to write any code, ever, nor had they seen any code of mine, but by the end of the interview he told me they were going to make an offer. The thing is, this was my first real interview, and my first interview for a full time programming position. I'd written software part time, but had been pursuing physics as my field previous to this. So, it couldn't have been that I was a good interviewer... I had no skill at that point.
They were so happy with me after the first year they gave me a %40 raise.
Meanwhile the worst, most excruciating, took all day and I didn't get the chance to have lunch I was promised, interview where I met with 9-11 (I lost count actually) people, and had to write code for every single one of them, ended up also being for the company that was the worst to work for, where I was surrounded by mediocre programmers and the management was absolutely incompetant.
I think if I made a graph with one axis being the amount of programming required in the interview process, and the amount of suckage at the job in the other, those experiences would show correlation.
Anecdotal of course, and I have theories as to why, but that's been my experience.
Interesting that there was _no_ code. I personally never feel happy with a candidate until I've satisfied myself that they can write something...anything in code. Even if it's just fizzbuzz or the like. Although I suppose an in-depth talk about your past projects would heavily imply (if not guarantee) that you knew your way around such things.
Honestly, I think the hardest part of interviewing without just forcing candidates to vomit code is simply time constraints. A 45-minute interview in which a candidate doesn't have much to say about their history pretty much requires coding to give you enough information to make a decision.
45 minutes seems too short to me. I'm guessing its 45 minutes because the candidate goes thru a series of interviews. I think this is a mistake as well-- the third time explaining the same thing about his past experience, the candidate has a lot of trouble remembering what he's already told you, vs the guy he saw less than an hour ago.
I think a much better method would be to have 3 interviewers maximum, though fewer is better, have them spend an extended period of time with the candidate (preferably all at once, not in series) and to develop a rapport with the candidate.
Sure, interviews are intimidating, and if you're having trouble getting them to open up, introducing a programming question isn't going to make it easier. A programming question with a time limit, to boot.
I've been asked a lot of programming questions in my career, and back when I worked for other people, I'd generally go on 5 interviews and get four offers and a callback. Figure 20-40 programming questions every job hunt.
When I didn't get an offer, or it was clear that the interviewer was not satisfied, it was nearly always because the interviewer did an incompetent job. Maybe %5 of the time the question just stumped me. But I've seen a lot of people with really heavy accents who get visibly upset when you ask them to repeat what they said, and when they do repeat it they use exactly the same words and don't try to explain it in a different way. Often interviewers leave out key concepts or requirements when presenting the question because they've presented it so many times they forget. I've had interviewers explain it wrong, and many times I've had to correct the interviewer because I recognized the question they were actually asking.
Now I wonder, how many of these people who fail, or "don't know what a for loop is" are really failing, or not just reflecting poor interviewing skills on the part of the person asking the question?
Its really easy to have a high failure rate when you leave out a key requirement. (and then what's the candidate going to say "you never said that"?)
I've met a lot of interviewers that really weren't competent themselves. I tend to ask them questions (though I never got cheeky enough to demand that they program for me as well) and a surprisingly high percentage of them are trained coders who know one particular area, and seem prone to judge candidates by their knowledge in that area. I didn't get a job once because I was asked about assembly language and explained that I'd only had experience with 6502, Z80 and 8080, which the interviewer thought was the same as 8088 and therefore I should be able to write code in the modern intel instruction set, in assembly. This was for a company doing a social voice web app widget!
And don't get me started on interviewers asking me to write code but who won't shut up long enough for me to finish a complete thought in my head.
If you get someone to write fizz buzz for you, and your company is developing software more complicated than fizz buzz, then you haven't really learned anything from it.
If they "can't" write fizz buzz, how did they get in the room with you in the first place? Think they spent the last several years writing software but somehow lost the ability when placed on the spot in an interview? (I'm not being sarcastic, I genuinely am curious about this.)
I think there's a lot of people with a machismo complex, certainly I've been the subject of them, who are up for the same position, or wanted it, or think that nobody measures up to them, or just delight in seeing failure, or have such a narrow view of things that if you can't write assembly in a win32 environment, you're no good writing web apps either.
My experience has been exactly the same as yours. My current career and company that I'm entirely excited be a part of never had me write code once during the interview process. I graduated an accredited college with a high GPA and had programmed in a student position for 4 years, at a startup for a couple months and a contract-to-hire governmental position for 1 month. Not the craziest experience, but I think it's silly to be so cynical to assume I can't write a simple fizzbuzz program after all of that.
You would be very surprised by how many people there are with n years of experience and a masters in comp sci who can't write fizzbuzz. In my experience it s close to 50% with a sample size of about 50 candidates.
You would think that, but I have personally watched people with "X years of development experience in language Y" for all sorts of X and Y unable to solve a relatively simple problem in language Y when given 4 hours (harder than fizzbuzz, but something I did in 1 hour in C when I interviewed)
You probably aren't interviewing people yet. It is very eye opening when you start. I interviewed an elite consultant who claimed to be a C++ expert but did not understand how for loops worked.
I'm no fan of contrived questions or hard CS stuff in a functional engineering position, but many candidates cannot pass something like Fizzbuzz.
I believe those who are natural programmers, or maybe people who are just really good at it, are able to understand by talking to someone (Without asking any trick questions) how good a programmer they would be. I don't really try to figure out if they can program or not, if they can't they wouldn't have made it to the interview (and I don't do phone screens.) I'm more interested in their attitude, their bandwidth (how bright they are) and their ability to communicate. Secondarily, I look for their willingness to learn and their willingness to think abstractly and come up with innovative or inventive ideas.
You can learn all this just by talking about a hobby.
I think that people who are trained to be programmers (e.g.: not born programmers who started when they were 12 and might not have even gone to college) don't have the innate ability to recognize this ability in others. Thus they must ask them trick questions or to program, in order to satisfy for themselves that they're good.
This is actually not a test of the candidate, but a revelation of the level of competency of the interviewer.
If I wanted to, I could make %50 of the people you send me "fail" fizz buzz, just by replicating some of the things I've seen from really bad interviewers. Speaking in a heavy accent, and when asked for clarification, just repeating the exact same (indecipherable) words, while getting visibly irritated. Or insisting that they use a language they don't prefer, or failing them for leaving off a semicolon on a line, or for not producing bug free code right off the bat because they were writing on a whiteboard rather than typing at a computer, and the acts are very different.
I've interviewed a fairly large number of people, and the vast majority of people who didn't pass the interview did so because programming wasn't what they really wanted to do, or they weren't passionate about it, or they were just unable to communicate well enough to feel like a good fit.
I used to ask questions much tougher than fizz buzz and I would sit there and watch them struggle and try to help them thru, and at the end of the day, excellent programmers struggle on those things as well, and programmers with no innate ability often did them great because they'd practiced them. Why ask someone to find a loop in a singly linked list when they're never going to do that on the job? You can't ask them to architect a distributed realtime database in an interview, but you can talk to them about it.
Further, I think that companies either treat programming as a form of craftsmanship where they're looking for great artisans to build a fine product, or they treat it as a process where they're looking for minimally competent interchangeable coders. I think it is the latter that tend to ask these questions.
And I think the trained programmers aren't aware that there's a higher level, of craftsmanship.
Its completely arbitrary, but if you asked me to write fizz buzz, maybe I should conclude that, if you're having people of that level of ability interview candidates, that your company is not operating at the high level of ability that I bring to the table, and thus this interview process is likely more arbitrary than anything, and even if I get the job, its not going to be a place I want to work. (Back in the day the problems I got were a lot harder than fizz buzz, so I can do fizz buzz on the spot, I know, but I'm not saying that you should be asking harder problems, I'm saying that this kind of quizzing is a bad sign to me.)
So, when I hear people say that %50 can't pass fizz buzz, I think it reflects more on them than their candidates. I've not seen anywhere near that level of incompetence, and I don't think my resume filter is more stringent (its probably looser, because I won't let HR types who don't know how to program filter anyone out, and I read the resumes myself.)
If this post is down voted to hell, then you also have an answer as to why I didn't give my theories in my earlier comment.
They were so happy with me after the first year they gave me a %40 raise.
Meanwhile the worst, most excruciating, took all day and I didn't get the chance to have lunch I was promised, interview where I met with 9-11 (I lost count actually) people, and had to write code for every single one of them, ended up also being for the company that was the worst to work for, where I was surrounded by mediocre programmers and the management was absolutely incompetant.
I think if I made a graph with one axis being the amount of programming required in the interview process, and the amount of suckage at the job in the other, those experiences would show correlation.
Anecdotal of course, and I have theories as to why, but that's been my experience.