I think you're missing the entire point of what a Computer Science program is.
It's not to teach programming. It's to teach computing theory, algorithm design, etc. That's the reason that the top-level university programs are so heavy on theory. That just happens to fit with systems programmers(who somehow aren't software engineers... curious). It also fits with game programmers, which is where I think a lot of CS students want to go after they graduate.
I also disagree that there is any real good way to teach software engineering at this point in time. Unlike other disciplines such as Mechanical or even Electrical engineering with decades, even centuries of practical knowledge that has resulted in a lot of very strict best practices. Software engineering doesn't have that. Everything in the domain is extraordinarily fluid. Processes are changing rapidly. Tools as well. Even the end product we produce is vastly different from what it was 10 years ago. There simply isn't any good way to teach this subject in this environment short of on the job training. It's compounded with the fact that every software development house is different. Nobody has the exact same process, or uses the exact same tools. So teaching SE as a discipline really doesn't make much sense.
It's not to teach programming. It's to teach computing theory, algorithm design, etc. That's the reason that the top-level university programs are so heavy on theory. That just happens to fit with systems programmers(who somehow aren't software engineers... curious). It also fits with game programmers, which is where I think a lot of CS students want to go after they graduate.
I also disagree that there is any real good way to teach software engineering at this point in time. Unlike other disciplines such as Mechanical or even Electrical engineering with decades, even centuries of practical knowledge that has resulted in a lot of very strict best practices. Software engineering doesn't have that. Everything in the domain is extraordinarily fluid. Processes are changing rapidly. Tools as well. Even the end product we produce is vastly different from what it was 10 years ago. There simply isn't any good way to teach this subject in this environment short of on the job training. It's compounded with the fact that every software development house is different. Nobody has the exact same process, or uses the exact same tools. So teaching SE as a discipline really doesn't make much sense.