I think the reason so many companies resort to asking candidates to do a programming project for the interview is because they are lazy and don't want to take time to interview someone, or they suck at interviewing, or both. Bottom line, if you can't judge someone's ability by talking to them it's YOUR fault. You suck at interviewing. Last time I was looking for a job a company I was interested in gave me this massive assignment and I just told them to take a hike. I'm not spending all day writing some code for you for free sorry. Sure there are lots of horrible programmers out there, and you'll end up hiring them if you suck at determining what their skill level is via a conversation. But I hope other GREAT developers follow suit with me. Refuse these stupid programming challenges.
Have you considered that part of the purpose of the challenge might be to filter out particularly arrogant applicants who might be problematic in a team setting?
Even with whiteboard interviews, you still need to prepare for them. I would say I probably spend at least 8 hours preparing for them mainly because of its arbitrary nature. I have no idea what they will be asking.
With a take-home programming challenge, there is less uncertainty. By looking at the exercise, you can make a good estimate on how many hours it would take and see if it's worth doing.
I would prefer it that way too but whiteboards aren't getting replaced with take-home assignments. Instead they're a step towards the whiteboard stage. The whole process is just getting sillier compared to other professions.