I think one condensed class on algorithms and data structures could have replaced the three I took if the low level CS classes had emphasized thinking about time complexity and planning before you code. If you're used to thinking about "I only have X resources, what's a not crap way to get Y done" then learning specific data structures and algorithms as you need them is second nature.
I think there's a general rejection of knowledge, and software development has a continue cycle of reinventing the wheel because a large number of developers have no formal training. This something we are now celebrating instead of looking down on.
On the front page today there's separately a 'America needs to reject degree qualifications' and 'How do we get a certified certificate for developers'.....
The main reason they didn't is because those topics are mostly settled and unchanging, which means they don't have to rewrite a new course every few years. There are easily 5-6 courses I'd rather have taken but some of the most useful topics were too cutting edge to make it down to a Bachelors program in most Universities. The curse of a cutting edge field I guess.
remove autodidactic from the sentence and it is still true.