mk: If my kid wanted to get a CS degree, I'd suggest that they get a degree in math or physics instead, and just teach themselves to program. IMHO, the concepts and theory of CS are near enough to anything you might get out of a math or physics degree, that you can catch up to anything you didn't learn in a few weeks. Most of that you would need to pick up is practical knowledge of time-dependent technologies, or terms of art. On the otherhand, the tools that you would get in Math or Physics that you can bring to programming are those that require nothing but time-consuming exercise. There are a lot of blocks in the foundation of mathematics. A CS major could pick them up as well, but it would likely be a much greater effort.
Most of my classmates in physics could program, and many could probably do so as well as most CS majors. In my physics undergrad, we were simply instructed to write programs to solve problems. No one told us how. It was expected that we'd figure it out. I took one C+ class at my university and it was almost useless. I learned more about programming in a week of undergrad research than I did in that class.
I'm not saying a CS degree isn't useful. I just think there is an even more valuable way to spend 4 years and the tuition.