No libraries meant we had to manage our own data structures. We had our own UI system, so understanding how to walk trees and manipulate them efficiently was crucial. Removing duplicates from an array in an efficient manner, important.
Linked list stuff? Oh yeah, very important. Linked Lists underlay a lot of basic OS data structures.
We did have real world problems in the interview mix as well. We'd give an underlying low level API and ask how it could be used to construct a more user friendly wrapper API. We'd give examples of in memory layout of objects and ask how that layout could be improved.
At the end of the day, we wanted to hire people who could solve problems, but also sit down and have a good discussion about how to solve problems.
FWIW it was always possible to tell, with junior employees, the engineers who had gone through CS and those who hadn't.
A good decade of self study of course bridges the gap, but right out of college? I've seen very smart people, good coders, who didn't realize they were working with relational data, and over-complicated solutions.
I also saw people trained as game programmers write mind blowingly fast code that computer scientists would be hard pressed to understand without a fair bit of study.
I had to spend a fair bit of time explaining isomorphic tranforms of code/data structures/concepts though. Game programmers pick up on that one quick, "like a matrix, but instead provable facts about software."
I also wasn't allowed to tell people what job they were interviewing for. That made things extra fun!
Teaching people who had spent their life in tight highly performance optimized C++ how to work in embedded wasn't that hard.
Except for the "so, now we measure ram in Kilobytes!" part.
But, there is a reason the Microsoft Band had real alpha blending, transparency effects, a simple particle engine, and true type fonts, all with a 120mhz CPU and 256KB of SRAM (and a few more megs of super slow RAM for cache sitting off the side).
That's fine, but understand that they often would not be a fit. If the position is low level systems programming for example, not knowing the term "bubble sort" indicates that they will have troubles in getting up to speed in a modern, complex environment, even if they are very smart. Same if the position is e.g. to work on a database, i.e. its actual implementation.
Solid knowledge of both abstract and specific aspects of computer science and engineering are prerequisites for a lot of programming jobs, especially where you work on things that consist of the environment itself, instead of the applications that run on it (though this is sometimes true for those, too).
I've always wondered why this isn't more common. It's win-win to be able to test the waters in this way. What downsides am I not seeing?
Being unable to work 10 hours to prove it shows you are a pauper, all the other excuses are complacency.
Also, if anyone should be able to make another 10 hours in their week to work in tech why not say Steve who works at $BigTechCo? Now I know we just asked Steve for another 10 hours, but lets go ask him for another 10. No, the circumstances shouldn't matter, he's making 6 figures after all. Let's ask him again. And again, And again. Oh, Steve quit? What a pauper.
So unless you advocate for completely blind interviews that do not rely on a resume and only take up 3 hours of someone's day, your point is moot.
Thats not a "people cant do 10 hours" its a "they dont want to" which is perfectly reasonable. The company that gives 10 horsu of work better be appealing.
But saying that take home assignments are bad because they take time people cant afford to give is complete bs.
Applying ten places and getting 100 hours of homework knowing there's a good chance of ten businesses ghosting? I have plenty of empathy for people who have to make that choice.
It is interesting to watch, but not convincing as an argument.
What about I am not doing that, because there are places with same salary and more consideration for people who work.
Not spending 10 hours to decide where you might spend the next 20 thousand is plain penny wise, pound foolish. If a job ceteris paribus pays 5% more on a 100,000 income, and doing the work assignment gives you 50% changes of getting that 5%, its like getting 2,500 U$S per year for 10 hours. It pays for itself.
Also, the assumption that forfeiting those 10h will make one financially worst off is likely wrong, especially in long term.
Lastly, we are not talking about 10h deciding, we are talking about 10h of a single take home assignment - there are more companies to talk with and decision making time is not in it.
Everything else regarding your argument has already been covered by other users.
Why would I go through the song and dance? The salary ranges for senior developers/architects were all around $20K of each other. Unless the company is offering salaries in the 80th percentile, why would I jump through hoops just to work on a company’s software as a service CRUD app?
My last job hunt, I found the job that met all of my criteria (salary, technology, commute distance, size of company) within two weeks of looking.
Here's what questions I'd love to hear be asked of me if I'd ask the candidate "create a bubble sort algorithm".
1. How many bubbles are there? (collection size and knowledge of collection data structures)
2. What sizes, and how many or percent of each size? (constants, basic math, possibly low-level statistics knowledge)
3. Do new bubbles appear/disappear, and if so do I know what size they appear as, and do bubbles change size? (new inputs to an existing set of data)
4. Since I'm sorting, would you prefer a particular end result? (2d or 3d structure or something similar things)
that said, we have one extremely exercise (a simpler foo baz) just to avoid going in deep with people that lack the basic skills, of which there are many and were clogging our hiring queue.
For instance if someone with kids is already in a job, it might be tricky to find those extra hours.
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.