I don't think a general CS degree makes sense for most people. What you need are more specialized degrees such as game development, social software, computer graphics, information retrieval, etc.
I think you might be getting too specific, but I'm sad you got downvoted. I think it would be very useful to have 2 tracks of a degrees- a "computer science" more academic and algorithmic training and a "software development" with industry practice, team project focused.
We need the people who can advance the field to get the training to do that- and the people who just want to create the next great company should be able to learn those skills.
>We need the people who can advance the field to get the training to do that- and the people who just want to create the next great company should be able to learn those skills.
The people in the second group should be going to business school or starting their own startup. Either would give them more benefit than a CS degree. A CS degree, even if it's "development" focused, won't give them the skills necessary to deal with management or the business side of things. Ideally, it should give the student the technical and theory background to be effective at any coding job they take. Personal skills are better taught on-the-job or in non-class related, side projects.
I honestly disagree that there should be a separate track. A good developer should have a solid theory background. It should at least cover data structures, computer architecture, discrete math, and algorithm design and analysis. OS design should also be covered, because that takes everything else and combines it into a real-world application. Good developers are aware of all of that, even self-taught ones. In other words, a "software development" degree really requires a superset of what the current good CS curriculums have, because it also includes software engineering paradigms and team project skills.
The real problem with programming degrees is that the industry, as a whole, is still very young. It doesn't have a standard set of best practices to draw on, especially compared to traditional engineering disciplines. I graduated from UIUC in 2007, and the SE course there focused primarily on extreme programming and RUP. Agile wasn't covered at all(and is basically impossible to do in a college environment). So while it was a good course to take for team project experience, the actual topics covered weren't that useful. The other problem is that every development group has a different set of practices, and these almost never actually match the ones taught in school. So while a school might teach a certain set of development practices, the ones that the students actually use might be completely different.
I think both make sense but the specialized degrees could be taught by more application-oriented institutions or part of a different degree (engineering vs. science).
The term "vocational school" sounds a bit derogatory but that might be more suitable for a lot students who are less interested in theory.
Because I think that higher education is a pretty awful place for vocational training - as people here constantly point out. Of course, if you want to do research or do fundamentally new types of things then a CS degree can be a great place to start - but that applies to a tiny minority of people.