|more useful options|
They all assume you'll be doing wierd, theoretical work, preferably, in CS grad school.
You see, you might need calculus for non-linear optimization work, and you might need linear algebra and field theory if you decide to go into crytography research. So everyone has to take it.
And if you decide to just do a job doing boring, practical things like writing programs that work, instead of clever, abstract things like proving neat, theoretical boundries on toy problems for systems that can never actually exist in the real world, you're derided for not being clever and abstract and academic enough.
I don't know how many young kids I've seen wander out of a CS degree thinking a Turing Machine is Something Important(TM), as applied in the real world. They think that constants are irrelevant, because they learned order notation, but didn't learn quite enough.
In reality, all those boring little constants in front of your abstract little order notation symbols mean the difference between "highly profitable" and "completely worthless". In the real world, people need constant time speedup: and the difference between running in twenty minutes and running in a hour can make or break a program. In the real world, you worry about the scalablity of your algorithm only after it meets the inital performance requirements to begin with. If the the hardware to make the problem fast is too expensive to do what the business requires, it's a no go, no matter how much nicer your algorithm scales "towards infinity".
I don't know how many people have tried to use "Turing completeness" as a way to explain what a computer can or can't do, and gibber on and on about halting problems and so forth. It's far simpler than that: any computer you find in the real world will have finite memory, finite run time, and finite amount of cash available to construct and run it. No computer can do more than a finite state machine can, if only for reasons of economics. But finite state machines are boring, and we don't have a neat paradox for them, so I'm left listening to boring undergrads drone on and on about "undecidablity" as if it's a real world problem...
When they get to the real world, they'll learn that no one else cares about CS theory. No one else cares about whether P=NP. They just want the billing system to run, the accounting ledgers to add up, and the reports to look pretty, with colourful graphs that show the wiggly line going upward. If you do what the rest of the world needs, you get paid; if you don't, you don't.
Universities are largely in the business of training grad students to become professors; any other education they provide is mostly just incidental.
In reply to Re^2: Worst blog post ever on teaching programming
by Anonymous Monk