I think we need to break all of this down into at least three entirely separate areas: 1) Computer Science, which is, in my opinion, entirely a subset of mathematics, and should be taught as such. 2) Coding, which is the ability to break a problem down and describe it in a series of simple steps. 3) Craft and application, which is everything about how to use tools, best practices for code architecture, and everything…
The problem here appears when you want to teach #1. You shouldn't do it without also teaching #2 and #3 (isn't that obvious enough?), but #3 is often out, and it seems that there are some people trying to not "lose time" with #2 either.
Incidentally, I think #1 could easily be taught without #3 at all. I get the impression that there are quite a few academic people who tinker with interesting algorithmic work, in esoteric languages, who couldn't effectively write maintainable code for mass deployment. Not that there's anything wrong with that, it's just a different area of specialization.