## 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)

## Re:It realy doesn't matter (Score:5, Funny)

Except for mathematical logic. Those guys leave all semblance of logic at the door.

## Re: (Score:3, Funny)

## Some Math greater than Other Math (Score:5, Insightful)

## Re:Some Math greater than Other Math (Score:4, Insightful)

## Re:Some Math greater than Other Math (Score:5, Informative)

Graphics programming - Linear Algebra (matrix math) would be invaluable

Business application programming - plain old Algebra and maybe some statistics

Engineering apps - physics / calculus, stats

Compression programming - linear algebra, "new math"

etc.

When I was in college (90 to 94) at an engineering school, my CS degree required Calculus through the third one (because it was in the Engineering department) and statistics (because otherwise, noone in their right mind would ever take statistics) and an elective "math" the your advisor would point you towards based on what type of work you were interested in doing. I think this approach has worked out well for me.

Layne

## Re: (Score:3, Interesting)

1 semester of graphics. While teaching graphics, make sure to emphasize the matrices. Students will get concrete visual examples of what matrix multiplication can do: rotation, scaling, general affine transforms. Graphics is useful in itself, and becomes a stepping stone to linear algebra.

Then 1 semester of linear algebra, with lots of practical examples. Linear algebra is the stepping stone to data mining. it also leads other

## Re:Some Math greater than Other Math (Score:5, Interesting)

## Re: (Score:3, Informative)

## The DCT would be a really good idea. (Score:5, Informative)

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

youused Vestigal Sideband Modulation?).The math that should be taught in computer science should reflect the math

usedin 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.

## Re:Some Math greater than Other Math (Score:5, Funny)

Yes, much nicer than the showy, obvious, and unrestrained mathematics.

(The word you want is discrete)

## Re:It realy doesn't matter (Score:4, Informative)

I am VP of software development at a software company. I hire a lot of recent graduates (and am always looking for more good talent).

What I look for as a starting point is a solid understanding of how programs work, and enough programming experience that I am not teaching the basics. Experience with both lower level languages (C++) and higher level languages (Java, VB, etc) is required just to get past HR. Also, knowledge of the context (networks, operating systems, databases) is required.The above just gets you to the point that HR will really read your resume, and possibly pass it on to me. Once I get a resume, I assume those skills are present. What I look for are things that are more intangible.

The graduates that can show these traits are very likely to be hired. Those that don't, won't. Some of these characteristics can be taught in formal courses, others have more to do with personal development and maturity. Specific languages can be taught to the right person very quickly. A solid background in math is also essential (Algebra, Statistics and Calculus) but I have yet to use n-dimensional calculus in non-cartesian space for practical business applications.

## Re: (Score:2)

lower level languages (C++)Is C++ really now considered "low level"

## Re: (Score:3, Funny)

## Re: (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 no

## Re: (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

## computational statistics (Score:4, Insightful)

## Re:computational statistics (Score:4, Informative)

The danger of not teaching it is that most guys that need it in their professional life think they are very smart, start using it and suffer from the "sourcer's apprentice syndrome".

## Re:computational statistics (Score:4, Funny)

## Re:computational statistics (Score:5, Funny)

What about the other 23%?

## Re: (Score:2)

## Re:computational statistics (Score:5, Interesting)

allundergrads 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.## Re: (Score:3, Interesting)

## Re: (Score:2)

I've found them both very useful. Actually, in my work, there is a lot of calculation of rates of flow and such, so the calc has been more useful than the statistics. Stats, in general, though, are just as important, especially when it comes to computer learning applications.

I think that what math will come in handy is heavily dependent on

## Re: (Score:3, Informative)

You're right that professional mathematicians, depending on their field of course, don't need much calculus. For instance, group theory is pretty hot now, and it doesn't involve calculus, unless you're studying some algebraic properties of something involving calculus. Graph theory doesn't involve calculus really. But statistics certainly does involve calculus, unless you're planning to teach a quite

## Re:computational statistics (Score:5, Interesting)

MUST NOTbe taught to CS students unless they have the full one year worth of Probability Theory before that. In fact it is a course thatMUST NOTbe 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.

## Re: (Score:2)

## Re: (Score:2)

## ballpark (Score:5, Informative)

## Re: (Score:2)

## Re: (Score:2)

## Re: (Score:2)

## Re: (Score:2)

## Re: (Score:2)

## Re: (Score:2)

Layne

## Core Math for Comp Sci. (Score:3, Informative)

Logic (Philosophy) -> Discrete Math -> Discrete Math 2

Calculus 1 - 3

I would probably put those as the core of any good CompSci program.

## Re: (Score:2, Interesting)

Also, a lot of geometrical problems can be solved using Linear Algebra, things that can be useful in GUI code for instance (like, which of these arbitrary line segments are closest to the cursor, what angle does these line

## How far are they going in CS? (Score:5, Informative)

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.

## Re: (Score:3, Insightful)

## Re: (Score:2)

More advanced topics in algebra are certainly not out of reach though, my school only had one semester of algebra, but

## Re: (Score:2)

## Re: (Score:2)

## Weak CS Undergrad (Score:3, Informative)

I highly recommend the MIT Open Courseware [mit.edu] and the Webcasts at Berkley [berkeley.edu].

Each provides a quite different approach to CS education. Just remember that you did not learn everything you will ever need to know in college. Hopefully your undergrad taught you how to learn new information quickly.

## Re: (Score:2, Insightful)

For students who just want to get a job as a programmer. . .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 n

## CompSci maths... (Score:3, Insightful)

## Re: (Score:2)

## Re: (Score:2)

(For those not keyboard friendly, that would be Tools / Spelling and Grammer in your MS Word application.)

Layne

## Statistics & Basic Economics (Score:2)

Adding to that, though it's not exactly maths or CS as such, a better understanding of economics and the practical economic or accounting me

## Re:Statistics & Basic Economics (Score:2)

Do you actually mean statistics, or do you mean probability, optimisation, or other related fields?

## 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

## Why do CS? (Score:4, Insightful)

Can anyone name a job for which a CS degree is the best qualification?

## Re: (Score:2, Insightful)

## Re: (Score:2)

## Re: (Score:2)

## Re: (Score:2)

Before I came to Uni, I was considering doing a joint honours Maths & CS degree. I was advised against it by my A-Level (UK qualification; normally taking ages 16-18) computing teacher, who said that by doing just maths I'd actually end up being a better programmer. If I compare stuff I've written recently, with stuff I did for A-level projects, I'd say this is true - and there was a good year and a half gap where I

## Re: (Score:3, Insightful)

>

by doing just maths I'd actually end up being a better programmerCS 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

## Re:Why do CS? (Score:5, Informative)

What I did get taught was how to write good code. How to make use of binary trees and how to optimize algorithms. How to plan software projects and what problems to expect. How to plan, lay down and manage a network.

As a low level SysAdmin, you certainly won't need a degree to figure out a subnet mask for a single router lan. But networks don't simply scale, they tend to get very tricky and complicated as soon as you have a few layers of routing between them. Not to mention that you won't be able to even plan such a network sensibly if you don't know the theory behind it, how to streamline it and what happens "inside". And yes, that's where the math comes in.

A good university education will give you a heavy dose of theory. And while you won't be able to apply this directly, you will know WHY something works, not just how. And, more important, when it stops working you'll have a clue why it did. And you'll have a plan how to fix it, or at the very least, you'll know where to look.

## Re: (Score:3, Interesting)

Compiler developer.

Artificial Intelligence researcher.

Search engine algorithm developer.

I have a Master's in CS. Yes, I agree that at the higher end CS is basically a specialized math degree. But there is that touch of applied math thrown in that separates it from a mathematician or statistician.

Even better, if you pair up a CS degree with something applied (physics, mech engineering, chemistry) you suddenly become someone very valuable to any organization trying to build advanc

## Re: (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

## Re: (Score:3, Insightful)

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.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

## Re: (Score:3, Insightful)

Have you ever considered that a University degree isn't always about job training?

## Activate PUN! (Score:2)

PUN Complete!

## Re: (Score:2)

In their eyes, we're God!

## Maybe I just misunderstand CS (Score:3, Interesting)

The biggest chunk of it all was 6 semesters of Analysis [wikipedia.org] and 4 of numerical analysis [wikipedia.org].

I was also told that only two other professions get slightly more maths: "applied mathematicians" and physicists.

Am I wrong to assume that CS education is much more maths based in the EU than in the USA?

## Re: (Score:2)

## Re: (Score:2)

## Re: (Score:2)

## Re: (Score:2)

## Re: (Score:2)

## Formal grammar, predicate calculus, statistics (Score:3, Interesting)

Start by making sure you understand the distinction between Computer Science and its related disciplines, and that this is a CS course. Read the overview report from the ACM Curricula Recommendations. [acm.org].

It is apparent from the ACM's recommendations (amongst others) that a lot of mathematics traditionally covered at universities(such as calculus) is not strongly related to Computer Science. That said, there are many applications of computing that require strong skills in these areas (scientific computing and cryptography for example) so they are not a bad

option.Important numerical and logical fundamentals that support the learning and use of undergraduate Computer Science include:

## Re: (Score:2)

I'd have to agree with the beginning of your post: Calculus isn't all that useful to a CS major. Don't get me wrong, calculus is useful in and of itself, but since computers can't do integrals or derivatives, it's kinda useless. Calculus combined with something like numerical methods, which teach you how to use various methods of approximation and interpolation to get a computer to understand calculus...well... that's a different story. Even then though, I don't tend to use calc or numerical methods for muc

## Re: (Score:2)

I have worked with parsers and compilers in the past, but most of my time now is working with crypto ;) That said, I'm an SE by practice although a CS by qualification.

In my line of work SE and CS come together when I get to protocols and algorithms. Formal grammars are essential in describing protocols (think BNF) and modeling for robustness. As an example, getting FIPS certification for crypto hardware requires submitting a finite state model of the firmware.

I have a poor grounding in graph theory

## DSP (maybe I'm a bit biased) (Score:2)

## Re: (Score:2)

## Re:DSP (unbiased) (Score:2)

I haven't found many uses for fourier transforms, but low-pass filters and auto-correlation functions have been extremely useful in a variety of applications.

## What do you want to do with your degree? (Score:2)

If you want to go onto grad school, double major in math and take everything you can. Electives and even core requirements probably have heavy overlap. It tends to be one of the easiest combinations in terms of course load. Also consider testing out a fall semester grad class or two in your senior year. These will probably look a lot like math classes. If you can't hack an undergrad math degree, odds are very good that the graduate CS program will

## 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.

## Lots (Score:2, Informative)

## Math courses (Score:2, Informative)

## All of them. (Score:2)

## According to Ron Graham and Donald Knuth (Score:3, Interesting)

Concrete Mathematics [amazon.com]

## 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

## The useful maths I took back in the day... (Score:2)

Oh, and some of my pals recommended formal logic. I skipped that, 'cause I wasn't terribly interested in spending a semester playing word games. I don't think I've ever missed it, but someone else who actually took

## Prob and Stat (Score:2)

Even the micros today are going to parallel processors. Calculas? Haven't touched it in 25+ years in the business world of CS.

The other course that was useful was data structures. Tought me to th

## My most useful classes (Score:2)

Out of the required math classes, two stood out as being particularly helpful for my career in software development. The introductions to l

## Crypto (Score:2)

Suddenly I was good at math. Not only that, but I got a whole lot better at computer science. The more advanced classes focus more on how to think logically, and how to operate in proce

## I would hope (Score:2)

At least one, I rewrote the whole thing, because not only did the other coder have the wrong logic in place to try and solve what he wanted to solve, it was also ordered very poorly.

At least one class on probability and stat

## Numerical Analysis (Score:2)

## The math courses that helped me (Score:2)

Trigonometry

All the Algebra courses

Calculus 1 and 2

## don't forget Information Theory (Score:2)

## as a cs/math double major, here's my list (Score:2)

Definitely:

Optionally:

Unless you're going to be an engineer or scientist, I don't consider Calculus and Differential Equations to be essential. Only insofar as they contain material that's prerequisite to Numerical Analysis and/or Linear Algebra.

## remember "new math" in the 70s? (Score:2)

## CS is not math (Score:2)

CS does involve a lot of number theory, which falls under philosophy departments at most universities (number theory is not math; it also analyzes non-mathematical properties of numbers.) I highly encourage anyone interested in CS to take a lot of philosophical logic classes; many of the techniques for analyzing sets/possible worlds are highly applicable to data structures in CS.

## Re: (Score:2)

Personally, I found a great deal of education in my oenology courses. [...] The most applicable mathy CS thing I learned was covered in an hour regarding big O notation.Is there a connection between oenology and O(n)-ology?

## Re: (Score:3, Funny)

No, but there's a strong connection between onanism and the study of Computer Science.

## Re: (Score:2)

I have heard that this joke works when you are studing for obstetrician, too.

And for eugenetics, too.

## Re: (Score:2)

The article you quote bears me out ... it was an error in failing to do a conversion between standard and metric units.

Teach them not to use the good old "hogsheads to the furlong" measuring system. The excuses don't wash. Neither the "1 solar panel" nor the "not using ground tracking" were "unforseen events". They screwed u

## Re: (Score:2)

## Re: (Score:2)

cando much more than just push the data around. In my old University, the CS students took different classes than the engineering students, with focus on discrete math, statistics, and matrix math (such as methods for solving complex problems using matrices). Basically, they learned how to perform therealmath that computers and programs use. Could there be more? Probably, but most higher match classes require a very good background in calculu