This all also applies to “many CS graduates”. My systems-programmer wife has given up asking basic systems questions to new grads in technical interviews because she just expects to get blank stares at this point.
Stuff that was expected knowledge of anyone programming computers in any capacity up through the 1990s is now a mystical secret known only to gurus.
Someone who takes hard college courses in operating systems, database implementation, networking, distributed systems, etc. can obviously learn a lot of useful stuff. But those are often not required for a CS degree.
That same thing that drives people to be good in programming happens with it without schooling. And most of it happens to be experience.
You can either pay for experience, or you can get paid to get experience.
At the end of the day bad programmers from whatever walks of life are going to use list where maps should be used, and not understand algorithmic complexitie of the code they write.
Processes, threads, and memory allocations are all system level operations and a programmers depth of knowledge of them are highly dependent on where in the stack they are working.
In fact. I would wager that most self tough programmers are a cut above the average college grad, and way more suited to actually gettng work done. Thry have already shown they are self motivated and don't require hand holding to get the job done. Besides they will also be less stressed from not having all that debt.
They end up using a list for a map etc.i.e. there are foundational gaps in their knowledge. A CS program ensures that there is at least an attempt to build a foundation.