If your algorithm don't got Mojo Nixon, then your algorithm can use some fixin'.
This is my new favorite post ever.
I've done programming assignments as part of the interview. They're annoying, and I don't like doing them... but the ones I've had to do have also been reasonable. They really just wanted to get a feel for how I worked, how I solved problems, what my code style was. Typically, they weren't so much about the actual software I wrote for them, but rather, the discussion about it that we had afterwards. I don't mind this so much... though warning me that I'll have to do something along these lines so I'm not blindsided with it when I get there is always appreciated.
I've had a couple of companies have me take written tests. Those are a bit more irksome, because there's no back and forth on them. I get no real benefit from it at all, because I don't get to discuss with them. I don't consider them entirely unreasonable, so long as the material is relevant to the job... but I also don't consider them a very good technique for gauging talent (especially since it eliminates discussion), so it does tend to lower my interest a bit.
Almost every interview I've ever had has had a verbal test portion, where they question me (or sometimes grill me). I love these. A lot of people simply can't write a good question (one of my problems with the written test), so you get an opportunity to clarify what they're really after. The back and forth discussion tells both sides of the table a lot about the other, so everyone gets a better idea of what they're looking at. The discussion aspect gives them a much better idea of how you think and arrive at an answer, which are far more useful things to know in my opinion.
Not to mention the fact that this discussion gives you a good idea of what it's going to be like working with a person on a technical problem. And that strikes me as good stuff to know no matter which side of the table you're on.
The ones I HATE are the technical screens that are farmed out to third parties. I've had to do a few of those, and they've universally been administered by nontechnical college kids who have no knowledge whatsoever on the subject they're quizzing you about. Give a right answer but not use the right keywords? Wrong answer.
I've had enough bad experiences with those that I won't do them any more.
Also, please, for the love of God, don't make me do the same technical test over and over again. I interviewed with one company that did that to me. First round, we did a technical test. Second round, some new people... same technical test (okay, different test, but all the same conceptual points) so they could watch me go through it all again. After the third iteration, I politely declined to go on to a fourth.
I don't mind them grilling me. Frankly, I love it... it's not fun to go through, but I'm looking for a new place I'm going to enjoy working, and that means people who are good at what they do. I figure most of my potential coworkers had to go through the same process, so if it's one that makes me feel confident in their abilities, I'm good with going through it.
Just, you know, do it right.
Computer programmers do it byte by byte.