It seems to me that computer science is really not programming, but thinking about programming. The problem is, it should also be thinking about software engineering.
Hand a strong theoretical CS person a steaming pile of a project and ask for the smallest tweak and it will take forever - that is if their head doesn't explode or they decide to re-architect it. Task a good software engineer with the same thing and they will get the change done with the understanding that they also hate the steaming pile of a project, but it isn't worth any more time.