Insulting but necessary; recently I a friend who is an awesome coder walked out of an interview when they handed him an final exam like coding quiz. He felt that it was too impersonal a way to assess for a position as the lead senior developer for a company. But at the same time I would say that the vast bulk of people I have encountered in the programming world were shockingly short of programming skills. A few years ago I developed a system for a company that then was handing it over to a company with whom they had a maintenance contract. So the two top programmers for the company with many years of programming experience and one of whom had graduated from one of Canada's "Top" CS programs began asking me interesting questions about my code; the most critical question was "What are those odd arrays that you are using?" The odd arrays were associative arrays. So I just thought they used a different word so I began thinking of anything even slightly synonymous, hashtable? Lookup table, map, key/value pair? In the end I gave a more than one hour tutorial on the value of a using keys to find values and how the hashing and use of trees could make the underlying algorithm wicked fast even on massive data sets.
The questions went on and on. Won't that waste too much memory (it was a single purpose server with 8G and a data set well under 500M)? Won't scanning through that huge array take forever(I had explained the whole look up tree and showed that a typical lookup only took a tiny handful of steps and that it didn't matter as the system was wicked fast even with a test load many times the system growing far beyond the company's wildest dreams.)
But these two who I now refer to as the Hash Twins could talk the talk. They would blah blah about log files and in-line assembly and wanted to argue about commenting style but had massive gaps in fairly basic bits of programming. So these two would have interviewed quite well unless your interview was basically a coding test. A timed coding test also makes sense in that if you gave me the weekend to pass a basic test in a language that I am very unfamiliar with like Haskell I could probably pass but I would have to look up nearly every bit as I not only don't use Haskell and am unfamiliar with functional programming so I would not be able to step into a complicated Haskell project as the technical lead. I shouldn't pass.
But even after years of C++ I would fail if you gave me a test full of pedantic questions such as "List all the different basic ways you can use the keywords static and const, define the following keywords: explicit, compl, noexcept, and decltype." (I had to look those up)
So I would think that a basic filter test should be quite understandable where you give a person a machine and say, "In the language of your choice code me a function that takes an integer and returns and integer of that Fibonacci number." or for a database person say "Given this trio of tables(users, products, and product sales) cough up an SQL statement that pulls up a list of all the Canadian users and a count of product X that they bought and include those Canadian users who bought nothing." If you couldn't do something that simple in less than 20 minutes (assuming job relevant questions) then an interview would be a waste of everyone's time. I am also willing to bet that the two above questions would kill more than 80% of applicants around these parts. Also questions like the above allow the user to show their thinking; do they put in error conditions? Do they use stupid variables? Do they do it in 10 seconds really well or do they sweat out the whole 20 minutes and produce marginal crap? Do they show a lack of Mathematical ability by asking what the Fibonacci is (Not a deadly strike but a test to see how broad their knowledge is as great CS does use math. Plus if they don't know Fibonacci it only takes a few seconds to explain)