What Math Courses Should We Teach CS Students?
Coryoth asks: "If you're taking computer science then getting as much mathematics as you can is probably a good idea. Ultimately, however, there are only so many math courses you an squeeze in. Given that, what areas of mathematics should we be teaching CS students for maximum benefit? Traditionally university math courses are structured around the needs of the physical sciences and engineering, which means calculus is what gets offered. While a decent calculus course can teach a certain amount of formality in reasoning, wouldn't CS students be better served with a course in mathematical logic and foundations with its greater degree of formal reasoning and obvious connections to fundamental concepts in computer science? Are courses in abstract algebra and graph theory going to be useful to CS students? Should courses in category theory (yes, it applies to computer science) be required of students going on in theoretical computer science? In short — what areas of mathematics are going to be the most useful and most applicable to computer science students? What courses were of the most value to you?"
I'm willing to assert something stronger. Instead of requiring undergrads to spend a year learning calculus, the requirement for all undergrads should be basic statistics. In the decade or so since I completed a math degree, I've used calculus only rarely (the intended implication being that even a mathematician might find little need for calculus). Statistics, on the other hand, are needed to correctly interpret newspaper articles.
In my biased opinion, that is a course that MUST NOT be taught to CS students unless they have the full one year worth of Probability Theory before that. In fact it is a course that MUST NOT be taught to any scientific student who has not taken a full probability theory course first. Unfortunately, many universities especially in the US tend to do that - teaching stats without teaching the probability theory which makes them possible.
As far probability theory itself is concerned its knowledge is essential for nearly any task in CS starting from an OS and all the way to transaction systems especially if the system is operating under a resource constraint. The time your request traverses the system, the completion rate, etc are all described by Markov chains and there is a appallingly low percentage of CS people who actually know them and can understand how their systems behave. There is no way in hell you can optimise or even understand a complex system without this knowledge. Unfortunately most Unis now prefer to use this time to teach marketing buzzword bollocks also known as Unified Process, Agile, etc instead.
The second most important math area for a CS student is possibly optimal control. This one is also nowdays omitted from some university curicullae which IMO is an absolute madness.
Baker's Law: Misery no longer loves company. Nowadays it insists on it
http://www.sigsegv.cx/
I think they need to separate CS into two branches, one that's "computer software engineering" and another that's "computer science". The first focuses more on software engineering and different languages. The second focuses on one language (probably c++) and has more intense math and physics as this is more related to science. The reasoning would be that there tend to be two types of programmers. Those who work with scientists and really need an understanding of calculus and of physics forulas and those who work on DB front-end type stuff, these require a knowledge of some things like set theory and discrete math, but they don't need to have a deep understanding of calculus or have an understanding of physics.