* No mentoring from more experienced developers * Refactoring (techniques and reason) isn't a course * No real-world, e.g., practical, exercises (depends on school)
CS classes teach the basics, and theory. These are both important. They tend to fall over on teaching practical applications of both.
Most development takes place far outside the realm of "theory". I haven't implemented my own data structures since a decade out of college (in those days I still did because I did a lot of embedded work, and there wasn't much of an internet). Only rarely do I need to consider time complexity (although I do).
This is just my experience; I did embedded/firmware for a decade, then web development. For the first half of that I used math more than CS. For the past twenty years nothing I've done even existed when I was in college.
The solution? Continue to teach the basics and theory: IMO you must have a strong background. But mix it in with real-world applications, with code reviews, with revisions, etc.
The best example of this we had back in my day was the final senior project, but even that had no code review or critique.