In my mind, a CS degree is all about rewiring the student's brain to better interact with computers and to instill attributes in the student that are useful when working with those computers. Very few of the points in the article cover things that vastly change your computational world view. Off the top of my head, the five things (in no particular order) that I'm getting out of my degree are:
- Understanding down to processor and assembly level. And the visceral (and unfulfillable) desire to eliminate "magic" from things.
- Extensive exposure to functional programming. And finding out for myself what it does better than imperative programming and what it does worse.
- A deep appreciation of the need to know the user and the need to consider people at every stage of specifying, building and shipping software.
- A rigorous grounding in discrete mathematics. Not because I'll use it every day, but because it completely altered the way I reason about the functioning of my programs.
- Learning to work in groups ranging from two to ten people. And learning how to put myself in their place even when that's really, really hard.
I will probably never use 80% of what I learnt after I graduate. But the mental restructuring caused by learning those things has already helped me many, many times in practical situations. I think that there's a false distinction between the "practical" and the "theoretical". Just because something is not immediately useful, doesn't mean it's intellectual masturbation or ivory tower naval gazing. I don't think that CS degrees should neglect the directly practical aspects of the field, but I would much rather learn things that I wouldn't otherwise pick up (such as machine learning or parallel algorithms) than something I will have to learn eventually anyway (such as version control or system administration).