When interviewing for a programmer's job, we have a simple 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.
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.
Is it unreasonable to ask candidates to turn in a small programming task within a few days or even 2 weeks? 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.
If it is unreasonable, how else would you gauge the candidate's programming skills? During an in-person interview on paper, whiteboard, or computer?