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.