I'd be interested in learning more of what you mean about "good programming". If you mean the standard practices around software engineering - code reviews, unit testing, integration testing, automated testing, archiving and version control, and so forth, then yes, I would agree that CS programs don't teach "good programming." However, speaking as a math major who has had to continually study to remediate gaps in my understanding of CS fundamental, my impression is that CS majors do a <i>lot</i> of programming, especially around algorithms and data structures, operating systems, and compiler design, and were way ahead of math majors like me at the end of college. And I actually had a somewhat CS oriented math degree, since my classes in number theory, numerical analysis, linear and non-linear optimization, and graph theory all had programming labs.<p>What are these schools where an algorithms class has no coding assignments? At my college, you could take graph theory in the math department and not take the optional programming lab, but in CS? Really? Not saying this doesn't exist but... weird.