Computer Science is it's own, highly diverse field, composed of software engineering, algorithms, theory of computation, human-computer-interaction, AI, systems engineering, databases, security, graphics, scientific computing, and many other sub-divisions.
CS hasn't been solely a branch of mathematics for decades.
See what Stanford considers part of CS: http://www-cs.stanford.edu/research
See what Berkeley considers part of EECS: http://www.eecs.berkeley.edu/Research/Areas/
It is up to you to choose which lectures you want to use your optional credits for.
On the other hand, I studied CS in South America, and I can count on one hand the lectures which aimed to teach you "how to write good code". Maybe one or two of them, and only in the macro "good software engineering practices" sense. Most of the others assumed you sort of picked up how to code on your own, or that you asked other students or TAs on the side. There absolutely were NO "how to code" lectures, and the overall idea you got was that CS was a theory-heavy degree. Recursion, proofs, type theory, graph theory, etc, were absolutely the focus of the degree.
There was a different degree called "Software Engineering" (and not CS) from the same university, but I think they heavily overlap in content, so in practice the point remains.
On my case beyond Architecture design, there was hardly any "how to write good code" lecture.
Recursion, good code and readable code are not related; I don't understand this point.
Wouldn't that be enough reason? They're supposed to teach you how to write good code, and that includes readable code.