My experience interviewing says that a great many CS graduates still have no idea about Big O, or even really understand hashtables. That's from years of interviewing quite qualified candidates coming into AMZN BTW.
They might have passed the class and test where that was covered, surely it WAS covered, but they didn't actually retain it in a meaningful way.
I'm a dropout and worked at AMZN for a few years BTW. I don't think I would have had any problem working at Google or Amazon if I had wanted to either.
Granted, I probably couldn't have worked at those companies as my FIRST job, but that isn't the argument. The argument is who is better off after four years, someone who attended university to get a CS undergrad, or someone who worked in the trenches.
I'd say if there were more good apprenticeship positions available the latter would almost always be better.
I agree on the last point. I think this sort of stuff can be learned in an apprentice-type way, but not many positions currently do a good job of it. A great motivated way to learn big-O type analysis, for example, is to work on a system where a bottleneck gets improved from an O(n^2) to an O(n logn) algorithm, while working alongside someone who explains to you what that means, how you determined which algorithm was which, and why this is useful analysis to know how to do.
A lot of non-degree programming jobs seem to lack both the challenge and the mentoring to make that happen, though, so you end up with people who learn more about how to bang scripts together out of snippets pulled off the web. That's actually also a pretty useful skill, especially if you become a very fast and skilled applier of band-aids, but it's not quite the same as a CS apprenticeship.
Good point, and actually one I overlook too often in my own experience.
I went to CMU for two years before dropping out, so I did get a decent grounding in data structures / algorithms etc.. And I absolutely agree that that grounding has been important and is hard to get in the trenches.
Maybe we need to be arguing towards one or two year of school then apprenticeships?
My housemate teaches a one year CS fundamentals course here in Rwanda. It is essentially the only real CS training available in the country, though there are plenty of people with degrees from the universities. But he does a pretty good job of covering the basics. I'm sure he'd confess that two years would be better than one, but I'm not sure he'd argue for more.
They might have passed the class and test where that was covered, surely it WAS covered, but they didn't actually retain it in a meaningful way.
I'm a dropout and worked at AMZN for a few years BTW. I don't think I would have had any problem working at Google or Amazon if I had wanted to either.
Granted, I probably couldn't have worked at those companies as my FIRST job, but that isn't the argument. The argument is who is better off after four years, someone who attended university to get a CS undergrad, or someone who worked in the trenches.
I'd say if there were more good apprenticeship positions available the latter would almost always be better.