What Math Courses Should We Teach CS Students? 392
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?"
It realy doesn't matter (Score:4, Insightful)
computational statistics (Score:4, Insightful)
I liked oenology, personally (Score:1, Insightful)
But to get back to your question, I don't find any of the math that I took applicable to any of the work I do. I don't write 3D software, music synthesizer software, or calculate missile trajectories, so all that math is lost on me. The most applicable mathy CS thing I learned was covered in an hour regarding big O notation. Along with a good course on data structures, that has been the most beneficial thing I can say I learned.
But that is besides the point. What you do in the real world doesn't necessarily have to be relevant when choosing curriculums (curriculi? curricula?)
Give them the works! Everything from Calc through Topo and everything in between. Not all of them are going to grow up to be rocket scientists, but so what? The more knowledge you give these kids the better. I'm not saying you need to wipe them out or flunk them out or even use the math as a weeding tool, just that what you want to do is give them the tools to look at other sciences and not be befuddled.
There's nothing worse than a CS graduate that doesn't have a full grasp of math.
CompSci maths... (Score:3, Insightful)
Depends on what you want to do with it (Score:3, Insightful)
Hard to decide (Score:2, Insightful)
However, we should not forget that it's suposed to be a CS major, so I'd recommend as "priority" ones: Calculus (one-many variables), Linear Algebra, Probability, Statistics, Linear Optimization, Non-linear Optimization, Combinatorial Optimization, Numerical Analysis, Computational Complexity, Graph Theory and Information Theory. As subjects of further study I'd choose some Logic, Abstract Algebra, Functional Analysis, Set Theory and Category Theory.
It is important that a CS student could get as much Math as he/she can, because it helps to provide a useful mental framework for thinking, and because helps to get chances of right use of some mathematical tools.
As I see it, many engineering majors are as teaching a student to battle with some weapon, teach some mathematical tecniques related to the subject, and some practical things about the tecnique ("the weapon"). But learning as much as Math as you can, is like to learn how to use a swiss knife: if you know how to use it properly, sky is the limit (you can be a "science McGyver"
Why do CS? (Score:4, Insightful)
Can anyone name a job for which a CS degree is the best qualification?
Re:How far are they going in CS? (Score:3, Insightful)
Wow. I do have an undergraduate degree in mathematics, and I'm not sure it covered everything you described there. You'd certainly be lucky to get things like Galois theory taught routinely at undergrad level these days, at least here in the UK.
Re:Why do CS? (Score:1, Insightful)
CS Professor of course.
Re:Why do CS? (Score:2, Insightful)
Statistics and Experimental Design (Score:3, Insightful)
Here's why...
When starting on my PhD research, I pretty naively thought I'd just write a network simulator to try out my idea and to compare its performance to other network protocols. That would be fairly acceptable in today's CS climate, but STUPID.
People using simulators face a number of questions that they often don't ask, and therefore make their conclusions nearly meaningless. Are there specific hypotheses they're trying to test? How do they know they've performed enough simulation runs to draw conclusions at an acceptable confidence level? Exactly what is the distribution over which the inputs are randomized, and why was distribution chosen? To what extent is the model even validated (ok, this is more of a Modeling and Simulation issue than a stats issue)?
Psych and biology majors have been forced to rigorously answer these questions for a long time. We, the supposedly "mathematically superior" CS majors, have often ignored these details as though they're irrelevant. But if left un-tackled, we can produce crap research whose conclusions have little clear connection to reality. These is even true for when we can afford to do real-world tests and thus are less at the mercy of simulation model inaccuracies. How many real-world tests do we perform before we draw our conclusions? How do we randomize the inputs?
Much of today's network-related research sucks. Not because the ideas being generated are bad, but because the analysis of the new ideas and their comparison to the performance of pre-existing ideas is crap. Without taking stats and experimental design courses, even the reviewers of these papers don't realize that those weaknesses exist.
If you want your network research to be meaningful, test your ideas with meaningful experiments and analysis.
Some Math greater than Other Math (Score:5, Insightful)
Re:Some Math greater than Other Math (Score:4, Insightful)
3 words... (Score:4, Insightful)
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
Re:Why do CS? (Score:3, Insightful)
I have done a good deal of studying and coding on my own time, but when one of my CS classes (currently going for my masters) has a project that is when I find the classes really pay off. It gives me something that I can focus on that I can't give up midstream to start a new project.
Then there are also the CS courses that don't require any programming projects: Theory of Computation, Programming Language Structures, Algorithms, and Software Engineering. These courses require almost no programming, but provide tons of good information on developing future code.
Re:How far are they going in CS? (Score:2, Insightful)
I'd recommend a different major.
As with all the hard and applied sciences the undergraduate course is really just foundation building and the course of study should reflect that. CS is a life study, programming is a trade.
Even with that it's going to take you about 10 years to become a decent programmer; and 15 to become a decent CS; there's really no way around that. Why is everyone so fixated on becoming mediocre in a hurry? Learn the shit you need to learn, in a well ordered manner, instead of trying to cram half of everything into the arbitrary four years.
KFG
Re:It realy doesn't matter (Score:3, Insightful)
Two points come to mind:
First: I have yet to directly use complex analysis in any of my day-to-day work, I'd still consider the class extremely valuable for the experience in working with coordinate systems, transforms, and the like. I'd also consider the proofing process I had to do in that class extremely valuable. All of this is in spite of never seeing "i" in my day-to-day job.
Second: *You* may not have need of graduates with such skills, but many people do. Some people need the ability to work with 8-dimension nonlinear ODEs that rotate between two coordinate systems. Sure, not every grad will, but the exposure gives a graduate a higher chance of actually knowing that its out there and being able to use it if the need arises.
Re:Why do CS? (Score:3, Insightful)
Why go to school at all? Just find some textbooks to read, and work it out as you go along. Oh, you'll have to work out "how to read a book" as you go along as well.
Education's greatest strength is to prevent the student from making stupid mistakes made by others in the past. No, a lecture hall is not the best place to learn Java syntax, but it could be a very good place to learn about common object-oriented design patterns.
Re:Why do CS? (Score:3, Insightful)
Have you ever considered that a University degree isn't always about job training?
My curriculum (works) (Score:1, Insightful)
Re:It realy doesn't matter (Score:1, Insightful)
So what exactly does "higher level" mean to you? Garbage collection? Reflection? What about first class functions, closures, continuations?
That's like comparing the extremes of visible light when you have the entire electromagnetic spectrum to work with.
Re:It realy doesn't matter (Score:3, Insightful)
THERE IS NO WAY IN HELL you can deduce all those items (Passion, Communication, Teamwork,Flexibility, Teamwork, Potential, BK) in a freaking one hour interview. Are you kidding me? Best you can hope for in a one hour interview is to figure out whether or not he/she was lying about anything on their resume. Almost all research on job interviews indicate that people make up their mind on whether or not to hire within first 15 seconds.
Even if you are some Yoda and can deduce those things from a interview, you must not be hiring much because you probably can count in one hand you the number of people you can demonstrate those abilities in an hour. I have interviewed hundreds of candidates over the years. I can honestly say, I have never met a candidate who showed abilities in all of those areas. If you are looking for a perfect candidate, no such beast exists (or at least they won't be going to interviews to get hired). In fact, some of the best developers I ever hired were guys who BOMBED their interviews (usually shy, not very outgoing, etc.), but are demons when it come to producing effecient codes.
What a baloney. I wish you would tell us which company you work for so I know to stay away from it.
Re:Why do CS? (Score:3, Insightful)
> by doing just maths I'd actually end up being a better programmer
CS continually struggles with this sort of perception problem. That statement makes it sound like CS is only math applied to computers. If that's all CS was, there'd be no need for a separate discipline. The recognition that the concept of an algorithm, and all the theory behind algorithms, does not fit anywhere in classic mathematics prompted the emergence of CS as a separate discipline. That advisor gave you misleading and biased advice. I hope you didn't unquestionably believe it, though it sounds as if you're convinced it's true. You will not be a better programmer if you took all the math but skipped the study of algorithms.
Math does not properly teach algorithms. For example, if you take the right math course, you will learn all about Fourier and Laplace transforms, or so it seems. But you won't learn the Fast Fourier Transform (FFT) algorithm, or that the grade school multiplication algorithm is O(n^2) and that multiplication can be done in O(nlogn) and FFT is the way to do it. Want to stump Math grad students? Toss them a dynamic programming problem. They likely won't have ever heard of dynamic programming. A classic that should suck them right in because a mathematical problem provides the data, is Matrix Chain Multiplication. Even more dangerous are the Math grads who think they understand algorithms because they had a course that spent some time on big O formulations and similar material, but all from a mathematical point of view. Ever studied Turing machines? The halting problem? Automata Theory? Did you ever learn about universality in the context of programming languages? What about Complexity Theory?
Some EE have a similar low opinion of CS-- think CS is not a "real" discipline. I had a combo EE/CS class that was a mix of digital logic and the electrical properties of transistors. The professor was a EE who conveniently "proved" his assertion that CS students and CS were 2nd rate next to EE students and EE by cutting the EEs a lot of slack on CS problems because they were "trivial" while burning the CS students on the "important" EE problems such as graphing the response curves of the inputs/outputs of transistors at all voltages. Was no surprise that of the passing grades, the EE students got mostly As and Bs, while the CS students got Bs and Cs.