Firstly, I certainly agree unnecessary algo questions for a job that doesn't involve algorithmic problem solving on a day-to-day is silly and leads to false negatives.
But the simpler problems give you more than just the basic 'can you code' test - it gives you an insight their into thought process.
For example, seeing how somebody progresses from:-
for(var i = 1; i <= 100; i++) {
if (i % 3 == 0)
console.log('fizz');
else if (i % 5 == 0)
console.log('buzz');
// ah hm both % 3 and %5...
}
To:- for(var i = 1; i <= 100; i++) {
if (i % 3 == 0 && i % 5 == 0)
console.log('fizzbuzz');
else if (i % 3 == 0)
console.log('fizz');
else if (i % 5 == 0)
console.log('buzz');
...
}
And dealing with the fact they have a mistake that needs fixing is always interesting to observe, and gives you insight into how they approach problems.It seems so incredibly trivial and irrelevant at first hand but shows you a lot (assuming they've not seen it before.) I've been really surprised by this.
I suspect the idea of there being a science of this is a bit of a mistake - there's plenty of stuff that involves so many factors that it's really hard to know the really ideal approach. A quick look at the actual state of software engineering studies (30 undergrad students != all programmers) or e.g. macroeconomics should give you pause.
Certainly loads of scope for improvement though, I agree wholeheartedly!