So I did a 4 year computer science degree about 10 years ago. It's really hard to understand why anyone would bash a degree. What I still find "relevant to practice" from then is:<p>- Any good CS curriculum is basically a calculus, statistics, linear algebra, real analysis, combinatorics, discrete mathematics course with a bunch of CS modules thrown in on the side<p>- All the computational intelligence stuff we did (particle swarm optimizers, neural networks, classification algorithms, data mining, ant colony optimization, genetic algorithms, etc.) these things were all cool but not really mainstream back then. It's all the rage right now. I'm really glad I have a good theoretical background in all of that now, it makes it so much easier to jump back into machine learning and analytics. The math I did makes it even easier still.<p>- I use a lot of "full-stack theoretical understanding" of operating systems, networking, compilers and distributed systems courses to reason about why things could possibly go wrong in production performance problems on large distributed enterprise applications, and how to isolate where the problem is. I do this on a daily basis and am amazed how many professional programmers don't understand what's going on "under the hood". It's almost a Dunning-Kruger effect situation where people don't even know what they don't know.<p>Then this doesn't even begin to mention things like formal methods, software architecture, computer graphics, database theory, etc. Oh, and the philosophy courses, which really went into logic and critical thinking.<p>A CS degree is completely mind-expanding if you get it from a good institution.