Computer science is about conceptual development and research. It's learning what Turing-complete means etc.
Computer engineering is about systems and processes and practical application of the concepts of CS. It's about things like why TLA+ is a good approach to developing safe and effective systems, it's about the SDLC generically and the potential different approaches and their cost/benefits.
Computer programming is a technical skill. It's learning the specifics of a particular environment and language.
Any CS graduate should understand programming, because it's a basic required skill, same for a CE graduate. But specific skills in Java vs C++ vs etc is virtually irrelevant to a grad getting their 1st job. It's also something that any student should have already picked up as a side effect of a competent CS/CE course.
But does a CS grad need to know the difference between agile and Agile and iterative development and CI/CD and...
I'd say no, because it's not particularly relevant to type theory or provability etc. It's also not particularly relevant to ongoing CS research.
Our industry is well short of good CE graduates, because the focus is on the stupid details of languages instead of the conceptual grounding needed to actually engineer.
Same with the dumb interviewing about reversing a list on a whiteboard.
We've adopted the language of engineering, without the actual approach.
Are there any? My son had a summer job in a small recruiting firm in Silicon Valley. Customers (you know them all) had just two requirements:
- a proper degree from top 10 universities;
- 5+ years of experience in the field;
All others need not apply (and there were so many of them - recent Berkeley/Stanford graduates…)
Question is if this should be taught as a part of a degree or of the onus is on the institution. I don't know. But these can be hard and intimidating topics to learn on your own.