The value of a CS degree
It’s not programming
Computer science vs programming vs software engineering
The weedout classes do serve a purpose though.
Data structures and algorithms are the core of computer science. If you don’t really understand them, then you don’t really understand CS. If you don’t really understand CS, then you shouldn’t receive a CS degree.
The theoretical things we learn in a CS degree really matter at scale. CS is basically the study of how programming works in a performant way at scale, whether that’s the scale of CPUs, GPUs, memory, parallelization, distributed systems, clusters, etc. The point is that these things matter a great deal when dealing with big systems. You can’t build any of these advanced topics without the bread & butter of CS. You may be able to learn the bread & butter of CS without a CS degree if you are really really dedicated. The content is available for free. But it is not covered in any depth in the curriculum that most coding bootcamps teach.
CS doesn't teach programming
It's okay to be a programmer without really understanding CS, but being a programmer and being a computer scientist are two very different things. It’s important to acknowledge that.
Likewise, there are important differences between being a programmer and a software engineer. In practice most of us with CS degrees are more software engineers than computer scientists, or at least a blend. A theoretical computer scientist and an industry software engineer are nearly mutually exclusive roles beyond the common foundation.
It’s also important to acknowledge that having a CS degree does not imply that you are a good programmer. CS is not the study of programming; somewhat oddly, programming skills are just something you’re expected to pick up in the process of learning the CS curriculum.
University CS curricula is standardized
Different roles require different background preparation plus industry experience to be successful. The average bootcamp program, doesn’t prepare a candidate to be a mid to senior backend developer. Neither does a CS degree, but it gets you closer and is less risk for the company by establishing that you’ve leaped a decent amount of intellectual hurdles so far, in a controlled curriculum standardized across universities (per the ACM model curricula), so perhaps you’ll continue doing so in the future. It also means that the successful grad dedicated 48–60 months of their life to a CS degree. Churn rate in CS programs is extremely high ~80–90%, so to make it all the way through is very meaningful—“Pressure makes diamonds”.
What the world needs
The world needs more programmers, especially in startups.
The smartest devs know industry economics: demand for good developers outweighs supply. The rigor of a CS degree is not changing, and universities change slowly, so they’re not the place to look to boost these numbers in the near term. You definitely don’t need a CS degree to get started as a hacker / startup dev.
There are diversity issues in CS programs, as you pointed out, and many CS departments have been working on this for 5+ years but it will take a while to see the results of their efforts. I also believe STEM schools will have upstream impact.
Post graduation, hiring in tech is / has been a broken process. Whiteboarding is an ineffective method for screening those with a CS degree too. I prefer project-based approaches. Look for the forward-thinking companies… But I have so much to say here, that it’s a topic for another post.
If we intend to build all of the software that the world wants, then we need to continue producing programmers (and apprenticeships) just as much as computer scientists and software engineers. Still, it’s important to acknowledge the importance of the differences between these roles.