When interviewing for a programmer's job, we have a programming task that HR hands out to candidates after the first (HR) phone screen. It's a a total of ~130 lines of code spread over 4 java files, mostly stubs, and we ask people to implement their solution in the context of these classes. I'd think this task would take me about 4 hours and I'd end up with ~500 lines of code total. Someone not familiar with the task may need 8 or 12 hours, depending on how much they want to polish their code.
HR said candidates drop off after HR sends them the programming task. Some candidates complained the instructions were outdated (may have referenced a university class a few years ago). I can see that, but this wasn't the only reference. Others complained the instructions were unclear.
This is frustrating cause the task is a simple implementation of a standard algorithm. There is an RFC and even a Wikipedia page that describe it. It seems to me that people who complain about references and instructions did not bother to do a web search. There is plenty of open source code that does what's asked, so people could research and even compare their code against others' code.
Googling this question a bit, I found hiring managers saying "you need the test cause a bad hire is very expensive" and candidates saying "I am not working for free, and there are plenty of other offers for programmers, so I just move on".
Is it unreasonable to ask candidates to turn in such a programming task within a few days or even 2 weeks?
If it is unreasonable, how else would you gauge the candidate's programming skills? During an in-person interview on paper, whiteboard, or computer?