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?"
Whichever branch of maths you follow it encourages logical thought.
init 11 - for when you need that edge.
Well, perhaps because it has something with what I do, but I was surprised computational statistics isn't on that list. Perhaps it's the other way around, statisticians need to learn to program. Regardless there is quite a bit of overlap. This is also one of the few areas remaining where the speed of your program actually matters.
It has been statistically shown that helmets increase the risk of head injury.
probability (heavily skewed towards combinatorics), number theory, geometry (the plain euclidean one because this is really the best way to train a human brain for logic that's been found in the past few thousand years), calculus (of 1 and 2 variables... the rest is a waste of time unless you are specifically training programmers whose skills will be heavily computational in nature), linear algebra, and formal logic. Category theory (which is really just object-oriented math) could be familiarized with, but showing its applications would be more useful than going rigourously through proofs.
Any guest worker system is indistinguishable from indentured servitude.
Linear and Multilinear algebra
Logic (Philosophy) -> Discrete Math -> Discrete Math 2
Calculus 1 - 3
I would probably put those as the core of any good CompSci program.
(For the benefit of members of institutions with other sizes of courses: When I write "one course" below, I mean "1/40th of a standard Bachelor's degree".)
For students who just want to get a job as a programmer, I'd say that a first year course in discrete mathematics should be enough; it won't actually teach them anything by itself, but it will increase the odds of them understanding what the smart guy on their team is talking about when he says "this is a standard graph theory problem...".
For students who want to be that guy who tells the rest of the team how to solve problems, I'd suggest two discrete math courses, two calculus courses, a linear algebra course, and either a number theory course or a statistics course.
For students who want to actually do research in computer science: They're in the wrong department. The best preparation for graduate work in computer science is an undergraduate degree in mathematics. If they insist on getting their undergraduate degree in computer science, I'd recommend as an absolute minimum three calculus courses, two general discrete math courses, one linear algebra course, one course in number theory, two courses in statistics, one course in real analysis, one course in complex analysis, two courses in numerical analysis, one course in linear programming, one course in formal languages and automata, one course in graph theory, and one course in combinatorics. Depending upon the student's interests, I'd also recommend courses in group theory, galois theory, and coding theory.
Tarsnap: Online backups for the truly paranoid
being able to use asymtotic notation for bounds on algorithm running times, and a good basis in proofs in order to prove them once you've come up with something. Also solving recurences, and proving them is invaluable. There are some other things that are very usesfull on a day to day basis, like linear algebra (spesifically coding theroy), geometry, graph theroy, counting and probability (but thats more of an ai thing)
I think the first question you need to answer is why you're doing a CS degree in the first place. Personally, I don't see any point in them. It's not the best way to learn to program (how can you really learn Java in a lecture theatre? It just doesn't work. Just get a good reference book, find some good code to copy the syntax from, and work it out as you go along.), if you want to know the maths side of it, do a maths degree (picking courses that are useful for the job you have in mind - you might have to pick a uni accordingly), you'll understand it far better (doing a few courses in maths is much harder than doing lots, because so many parts of maths interlink). If you want to be a Systems Administrator, or something, then I can't see why you would need a degree at all, it's experience that counts in those kinds of jobs.
Can anyone name a job for which a CS degree is the best qualification?
For CS students, the fundamentals of discrete math and set theory are probably some of the most important. More focus on these in a CS context would be helpful to people such as myself who find math more interesting when it has a purpose. I did not mind the physics and statistical math courses. I could see the point behind them clearly. But doing math just for the sake of doing math never seem to have a purpose.
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
Proofs. Proofs. Proofs.
Algebra, geometry, calc, who cares. It's the Proofs that make math apply to Comp Sci. Having obscure formulas memorized means squat. But being able to look at a problem and break it down into the most simple of building blocks, that is a critical skill.
-Rick
"Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
The Discrete Cosine Transform would be a fantastic goal. DCT is used in MP3, JPEG, and MPEG compression (amongst others). The practical applications for lossy encoding are hardly difficult to see.
Such a discussion should probably replace vector calculus. I only used Groves/Stokes/Divergence/Gradients in a single course (EM Theory), and I've never had a practical application in my career. My Digital Image Processing class spent too much time on the Discrete Fourier Transform and dismissed the DCT with some hand-waving (and this after two years of pointless control and communication theory - when was the last time you used Vestigal Sideband Modulation?).
The math that should be taught in computer science should reflect the math used in computer science. DCT certainly qualifies, and a lot of the current curriculum(s) do not.
Maybe talking to the guy who maintains the PAQ compressor might also be good. That is interesting software.