What Math do You Use?
e_lehman asks: "I've been associated with MIT's introductory 'Mathematics for Computer Science' course for a number of years. The course has emphasized different topics in different years: logical foundations, proofs, probability, combinatorics, etc. But this is at the whim of instructors. What mathematical topics should we be teaching to budding computer scientists? What mathematics do you actually use or need, working in the computer industry? Here are some candidates: boolean logic, graphs, number theory, combinatorics, proofs, set theory, relations and functions, approximation methods, solving recurrences, generating functions, analysis of state machines, asymptotic analysis, and addition of small integers."
If a CS student is to ever make something useful out of his maths, you should be teaching him analysis:
... and so on.
- Logic
- How to set up proofs
- Full induction
- Rows (pardon me if this is not the correct english word, something like Sum[v=0,eternity] of 1/v!).
- Functions (differential, integral)
- Differential Equations
- Function theory
Basically anything that will teach them what maths is really about and give them the ability to get along with maths in a scientific way on their own.
&& aemula C. ab stirpe interiit
I am a student at the University of Minnesota. I have been working with faculity from the physics and computer science departments on and off over the last 4 years. Most of the math we have been taught is not really used in computer science. You have some analysis of run times and memory requirements, but so far nothing that required higher mathmatics. Differental equations have been the most useful to me. They are used in all kinds of different science and analysis of situations (fiscal models are big on them). From what I have seen undergrad CS is an alright intro to the topic, but you do not get to any of the really interesting stuff(iw you need higher level math) until you hit grad school or start working with researchers. Then it is really dependent on who you are working with. I am currently taking a grad course titled "Intro to Parallel Computing" and the most mathmatics we have used so far is stats to look at an omega network... not really exciting or informative.Good class and learning lots of stuff, but not quite there yet. I really think that most of the mathmatics that the students should learn are dependent on the topics they are being taught. Discrete math is very important, but was not very challenging to most of the students that took it. Mostly the mathmatics that are needed for a paticular topic should be taught in the class the topics are presented in. Think along the lines of self contained courses. I know diversity of ones education is important, but sitting through discrete math was a wasted semester. Sets, unions, intersections, and the pigion hole principel are not that hard to understand... and I can not remember when "proving" something was correct was actually useful. (I read a story about how this researcher proved this very short peice of code correct. Three other researchers found MANY errors for how small the code was.) Proving code may have its place but it is not something 99.9% of us are going to be doing with any frequency. What I would have rather seen is software enginering concepts introduced eailer and the chance to actually USE and explore the ideas presented there. /me is still bitter about the poorly run software eng course he took. It was so bad they are totally changing the course.
Anyways:
-diff eqs are good
-software eng good
-discrete math good but we DONT need a whole semester
-get involved with your profs it is one of the best thing you can do!
-The UMN is a great cs school. They listen to their students, have great instructors (we have many that have worked in industry and know their stuff) and is generaly a good place to be (ignoring the code, you are cuddled up next to your sparc station right?)
Ben
My experiences from work...
There are all kinds of embedded applications that require a lot more knowledge about resonances, loop gain, bode diagrams, filters, etc. than I got in CS.
Any sort of feedback loop can oscillate or ring if it's designed improperly, and there's a whole science to designing them properly that I wish I'd studied.
Any sort of modem (includeing cable, DSL, and radio) requires FFTs and filters. Cepstral analysis seems to be incredibly cool given how often it comes up when breaking audio watermarking schemes, but I don't know much about it.
Group theory comes up a lot in error-correcting codes.
3-D graphics requires a solid grounding in linear algebra and trigonometry. (And games these days involves feedback loops of NPCs responding to players and each other - see above.)
Trigonometry, and its applications to linear equations, are important to anyone doing 3D graphics work. It's surprising how many people can't visualize sine, cosine and tangent functions nowadays.
In grade school I had one CS teacher want me to help a fellow student animate a sprite-based ferris wheel on the screen; I used a simple loop from 0 to pi/2 in small steps, with sin and cos functions to place 4 cars on the wheel. The teacher was amazed at how smoothly the wheel ran, and didn't seem to understand how it all worked...
The phycist's approach has changed over the last few decades with the improvements of the personal computer. While there used to be "the theorists" and "the experimentalists", there is now a new group: "the computationalists".
Phycisists are usually well trained in applied mathematics, calculus, applied PDE's, group theory, linear algebra... you name it, but that's not OUR main problem: we suffer from not being great coders. As a computationalist, I can tell you that many a phycisist will apply brute force and rely on the power of computers to get them the answer by the end of the week, rather than writing elegant, efficient code that might give you the answer in an hour! I suppose this is a little off-topic, but keep on focusing on execution time and algorithms, and spread the good word of computer science to other branches of science. Physics, Chemistry and many of the physical sciences rely on computation, and make huge Beowulf clusters and MPI to do their calculations for them. Perhaps they could save a buck or two, OR get results faster by learning a healthy dose of solid computer science.
Secondly, I just heard a quote from an unknown source: "There's the right answer and the wrong answer. In modelling, there's the third option: the irrelevant answer". Focus on teaching people what is relevant, and what should be solved by other means than sitting behind a computer.
I've been a generalist for the last 21 years. I've worked multiple indiustries, been everything from architect to team lead, grunt, QA and CM Nazi.
Most of what I use is boolean algabra. Actually a logic class in the philosophy dept was a killer and helped a lot.
Anything with word problems. The old junior HS if a train going east.... Or the first semester Calc differential equasions. Anything where a problem is stated and a solution has to be found. anything where you have to get from point A to Point B and show how you got there.
Set theory is needed.
The Math learned from "The Dragon" book on compilers was good.
Being able to do hex/octal/binary math is required with debugging sessions and TCP/IP programming.
Where a lack of math failed me: