I was thinking along the same lines as rayiner, but more about actual coursework: hardware, compilers, operating systems, networks, protocols, optimization, security, etc. I could be wrong, but from the HN articles that rise to the top and general comments here, people seem amazed when someone masters these things. Yet to me they are fundamental to programming and allow you to go in new directions. My thinking is that inventing Facebook doesn't require this knowledge (that's a different domain of understanding marketplace and human needs), but implementing it at scale does.