Phil Greenspun has some interesting ideas about reforming Computer Science curriculum in universities.
I graduated from a CS program in 1996 from an Ivy League school. The degree should have really been called Applied Math-Computation.
Not all CS graduates become Software Engineers. I never had any intention of doing so. In my current job, the Economics and History courses I took are just as valuable as the computer science (I'm an IT manager for a defense contractor). I am quite certain that all of the Software Engineering I learned is no longer of relevance (except possibly by giving me the foundation for self-study).
When you teach people a narrow, focused curriculum, you turn them into Information Plumbers. Great if you need your plumbing fixed. Not so good (unless they show unusual levels of internal motivation) at creating technological visionaries and entrepreneurs.
I have no doubt Phil's suggestion would create better plumbers. But its unclear why this should be done in a University setting. Call it what it is -- an apprenticeship. Give people a year or so of training, then send them to work as apprentices. Meanwhile, they take courses at night to continue expanding their expertise.
After 4-5 years you're a journeyman. 8-10 a master software engineer.
Let people who want to become plumbers do so. Let them take fourth semester Java and study the obscure libraries (kind of like studying the National Electrical Code). Train specifically for the short-term and let continuing education solve the question of what to do in 15 years. This group could be well taught through community colleges. More group work, more customer interaction, more small business interaction, more presentations, as Phil suggests would all be very helpful. They don't need PhDs in their professors -- they need real business and engineering experience.
Focus the University curriculum on people who want to be information architects (or another completely different name). Focus on software design, security, information architectures, algorithms (but real-life, not the math course it has accidentally become), software integration, case studies, code reuse. Focus on studying existing designs and existing code rather than coding from scratch. Computer Science is like art. The TAs give you notes to help turn bad art into mediocre. But currently you never go to the museum for exposure to great art.
Sure, there's some programming. The first year or two. But for the rest of the curriculum, it should be assumed. Kind of like writing papers is for English. Or data analysis is for Science. At graduation, you won't be a great programmer. Just like most mechanical engineers wouldn't be a great auto mechanic. Hopefully, you have learned other skills that compensate while you catch up on the job.
The problem is that Universities refuse to acknowledge their oversupply. That the glamorous jobs they prepare people for pay less than the hard work community college jobs. Everyone thinks they will grab the brass ring. And many do. But the highest paid person from my high school class is a drywall contractor. Followed closely behind by a brickmason. In search of high paying software engineering jobs, Universities have strayed significantly from their path. They should focus on what they do best and stay far away from Phil's plan.