Mathematics is an integral part of computer science. Anyone serious about a degree in computer science will be looking at a good few mathematics courses in front of them. However, the mathematics required by computer scientists is somewhat different from the mathematics that is needed by other scientists. This difference stems from the basic difference between computer science and the other science.

Physics is probably the most mathematically heavy of all the sciences, in fact, large parts of modern mathematics were developed specifically to be used to describe physical concepts. Classical physics (and to some extent chemistry) deals with quantities that are for the most part, continuous in nature, i.e. things like velocities and energies. These quantities are not easily divisible into discrete units (unless you invoke quantum mechanics, but that is another matter altogether). Classical physics is intrinsically combined with a branch of mathematics that is known under the broad heading of calculus. Calculus encompasses a large number of mathematical techniques and theorems, but they all have one thing in common: they deal essentially with things that change gradually i.e. whatever system you are studying moves gradually from one state to another, and does not suddenly jump between states. Calculus is also an important part of economics and econometric analysis.

Computer science is different because the basic operations of computer circuits are most easily described in terms that involve specific, distinguishable chunks of information. At the basic electronic level, everything is in one of two distinct states: on or of, a 1 or a 0. Unlike Physics things are not continuous, they are discrete. Enter discrete mathematics. Discrete mathematics deals with concepts and information that are not continuous. The most common examples are integers and countable sets. Like calculus, discrete mathematics is also an umbrella topic covering many distinct topics and techniques. What computer scientists use most are boolean algebra (and related mathematical logic representations), combinatorics (how many ways there are to get a job done), computability theory and algorithmics (can a computer be used to solve a problem and what is the best way to go about it) and linear algebra.

So what’s the best way to get started? Firstly head off to Wikipedia and read through some articles to get a basic grasp of what’s involved. After that, it’s time to get a book. There are lots of good books and your local library should have a large store. If you’re studying for a specific course at school or looking toward a degree, it might be a good idea to see what the professors recommend. If you’re interested in computer science in general and not just discrete math, Concrete Mathematics would be a good idea as it incorporates important aspects of calculus as well. If you’re only interested in discrete math, a classic book would be Elements of Discrete Mathematics. Then again, what’s important is not a good book, but how much you really want to learn. And above all, have fun while you’re at it.

PS. You might be interested in this slightly old blog post about Math for Programmers.

Nice, pithy and informative article. I am one who totally believes in the correlation between a good programmer and a good mathematician (not in the strict sense of the profession). Discrete mathematics, Combinatorics and Algorithmics are all crucial tools for a good programmer. However you seem to have missed Statistics, which is an essential tool the web developer in particular. Whither Google without Bayesian probability? 🙂 …In fact Statistics could as well cover Combinatorics and Probability as the most important components of a fully developed programmer.

And numeric analysis, optimization and applied mathematics (operational research, theory of systems, cryptography etc.)