The following question was deleted from StackOverflow as “primarily opinion-based”:

Most CS programs these days do not teach skills such as:

These topics are considered “easy enough” to be taught on-the-job (OTJ), even though mastering them can be very complex.

Should these skills be taught in universities? Can a real-world programmer really do without these? Is it sufficient to learn them OTJ, as part of a first-year programming experience?

Since some people have asked for my opinions, here they are, as of July 2009: