Some of the best software engineers I have seen in my life were not trained computer scientists and would've failed many of the questions presented in this article. Not because they weren't highly intelligent, but because terms like "bubble sort" meant nothing to them.
E: The company had around 10 employees. "Interview" processes often went like this:
1) Establish first mail contact (either because they are applying for a job, or because the company found out about an interesting tool they wrote, or met them somewhere, or...)
2) Discuss skills of candidate, decide whether the skillset fits the companies needs
3) If so, take a programming job fitting their skillset (usually some low-priority ticket) and give it to them as a freelance job
4) If delivered in good quality, pay them and discuss future job options. If delivered in bad quality, pay them and don't discuss job options. If not delivered, ignore.
Which I always thought was a very reasonable approach. Very often, the people weren't even interested in a job, but wanted to continue to work as freelancers.