Joel has an interesting rant on CS education:
“All the kids who did great in high school writing pong games in BASIC for their Apple II would get to college, take CompSci 101, a data structures course, and when they hit the pointers business their brains would just totally explode, and the next thing you knew, they were majoring in Political Science because law school seemed like a better idea. I’ve seen all kinds of figures for drop-out rates in CS and they’re usually between 40% and 70%. The universities tend to see this as a waste; I think it’s just a necessary culling of the people who aren’t going to be happy or successful in programming careers.”
I empathize 100%. I take a low retention rate as a mark of pride. It lets you know that you’ve acheived something few others have. And it definitely reassures you. If you don’t understand pointers and recursion, you can not write good code. Except by accident.
And even that is not enough. My entire approach to programming was changed when I first began to understand lexers, parsers, and the like. But such tools make no sense if you’re not already familiar with the base concepts. Thinking on multiple levels of abstraction is necessary for writing solid code. Otherwise, you end up with Windows.