I very much understand your sentiment. Unfortunately we haven't found any other functional way to achieve the same goal.
I am not sure about other firms, but we personally look for how the candidate thinks about the problem more than anything. Did they handle exceptions well. Are they focusing on efficiency, readability, speed, or?
We found out that from a simple assignment that shouldn't take more than 30 min, we learn more than sitting with the person for hours. Plus they can do at their own pace without someone breathing down on their neck.
If the assignment really only takes 30 minutes, why can't it be a live call if the candidate wants?
whether you like it or not, take home assignments just select for the people who can spend the most time on take home assignments.
Which means people like me who have a current job and a family and can't afford to spend several hours on a coding test to make sure they're above and beyond the competition either won't apply, or will send in results that will be much often worse than the competition because we actually only spent 30 minutes on it.
Unfortunately, majority of candidates are interested in the take home challenge over doing live coding session. And we optimize for the widest reach.
In regards of the results, I can't speak for others, but I write code for 26 years. What I look for is how the candidate thinks of the problem. Here is one of my favorite exercises [0]. I would obviously love to do this live but people get super nervous and stop thinking. I then have tendency to help them too much and learn much about them.
Let me give you an exercise I really like for this.
Imagine a file with endless list of URLs. For each URL check if it contains an image. If it does, identify the top 6 colors and store it memory so it can be printed/stored later.
In something like python this can be as short as 20 lines of code:
- open the file
- read line by line
- validate if the URL is valid
- call the URL
- check if it's image
- if image, read pixel by pixel and check the color
- store it in dictionary/hashmap
Here is what I look for:
- does it compile/work?
- what language did you choose? (like python is fast to write this in few lines but hard to introduce concurrency)
- have you introduced some kind of caching for the URLs? (so you don't waste resources)
- are you checking if the URL is valid or you just run them all and wait for errors/timeouts?
- are you checking the file type from HTTP header or body of the file?
- how do you handle errors?
- are you attempting concurrency? If yes, how?
I actually done this exercise myself in dozen or so languages to see what choices I make based on the language. Obviously one can spend significantly more time on it if they really desire, but the design choices are visible from the beginning.
I am not sure about other firms, but we personally look for how the candidate thinks about the problem more than anything. Did they handle exceptions well. Are they focusing on efficiency, readability, speed, or?
We found out that from a simple assignment that shouldn't take more than 30 min, we learn more than sitting with the person for hours. Plus they can do at their own pace without someone breathing down on their neck.