tags:

views:

319

answers:

12

There are a few questions around that circle around this question but I feel this is different enough.

I've decided I want to improve the breadth and depth of my maths skills specifically in areas that are useful and/or interesting to programmers.

  1. What topics should I study?
  2. What resources do you recommend (blogs/books/online lectures...)?

I'm looking for easy to consume resources because I'll be doing this in my free time, I don't want to spend days struggling through a dense text but I want to get deeper than the surface. I've read the Yegge article on the topic (and most of the comments) which is useful but I think the voting system here will help me focus on the most useful/best resources and topics.


Edit:

I am looking to create myself a study course that I'll follow over the next few years, I'm not looking to solve a particular problem I just want to learn some new skills that will interest me and may be useful in my career in the future.

A: 

What sorts of math problems do you want to solve? 'Math' is a pretty big area!

MIT has some online courses, but that's probably a big time investment.

Wolfram has some tutorials, but again, you need to know what you're looking for.

n8wrl
+2  A: 
  1. If you have any interest in game development, 3D graphics, or anything somewhat related to those, then do multivariate calculus and basic physics. This will help you understand the basic concepts much better. Also, linear algebra will help immensely with all of the matrix/vector stuff you will be doing.

    If you are NOT interested in these topics, I would still say study calculus and physics. Why? Solving calculus and physics problems gives you good experience in problem solving and exercises the brain. Programmers NEED to be good problem solvers... that is our job. Concepts you pick up from these courses are things you will keep with you the rest of your life.

  2. MIT and Stanford both have really good online courses for topics such as this. Of course you can't just jump into multivariate calculus without some more basic calc, but MIT and Stanford have resources for your basic calculus classes as well. Basic physics will be a little bit easier to pick up. Again, you can check MIT and Stanford for physics.

MIT OpenCourseWare:

Polaris878
+1 Nice suggestions. Hope you don't mind, but I Added some links to the MIT open course ware site and some possible courses I found matching your suggestions.
Simon P Stevens
Haha thanks Simon, I should've added the links originally but I got distracted :D
Polaris878
Cool, thanks for the links. I studied Electronic Engineering and Comps Sci so I have some (rusty) calculus. This is just what I'm looking for!
David Hayes
No worries, I just got interested in your answer and thought I'd check it out. I've currently got the got all the Multivariable Calculus lecture videos in a download queue =:)
Simon P Stevens
As others have stated though, don't forget your discrete maths... though these probably aren't as rusty as your calc and physics as you probably have used them more haha.
Polaris878
A: 

Generally speaking, the applications of math to computer programming are pretty domain-specific - that is, you need to know whatever math the specific program you're writing requires. The only mathematical topics I can think of that are generally applicable to all kinds of programming are simple arithmetic and boolean logic, but I think if you didn't already know those you wouldn't be much of a programmer ;-)

Basically, I would just recommend learning the math as needed for whatever project you're working on. If you want to give yourself a good excuse to learn some new math, start a hobby program that does something mathematical.

David Zaslavsky
A: 

As for topics, look at some of the answers here. Recommended ressources are difficult for me to give, I'm German speaking. I would recommend starting with linear algebra and geometry, which you will find in computer graphics. Look at the undergraduate math series by Springer for example.

Ralph Rickenbach
+2  A: 

For an introduction to Discrete Mathematics I strongly suggest this.

I feel very lucky to have been provided this book from University

Petros
+2  A: 

Some time ago Steve Yegge wrote a dedicated article about math for programmers. His thesis is: As a programmer you should learn math but you should do so in different way than in shool/university.

His summary is this:

  1. Math is a lot easier to pick up after you know how to program. In fact, if you're a halfway decent programmer, you'll find it's almost a snap.
  2. They teach math all wrong in school. Way, WAY wrong. If you teach yourself math the right way, you'll learn faster, remember it longer, and it'll be much more valuable to you as a programmer.
  3. Knowing even a little of the right kinds of math can enable you do write some pretty interesting programs that would otherwise be too hard. In other words, math is something you can pick up a little at a time, whenever you have free time.
  4. Nobody knows all of math, not even the best mathematicians. The field is constantly expanding, as people invent new formalisms to solve their own problems. And with any given math problem, just like in programming, there's more than one way to do it. You can pick the one you like best.
  5. Math is... ummm, please don't tell anyone I said this; I'll never get invited to another party as long as I live. But math, well... I'd better whisper this, so listen up: (it's actually kinda fun.)

Sad note: Steve abandoned his blog because of too much aggressive feedback.

mkoeller
+2  A: 

Any programmer would do well to have a solid understanding on the undergraduate level of these following math courses:

  1. Calculus (at through multivariate calc)
  2. Discrete Mathematics (absolutely essential)
  3. Linear Algebra (necessary for an understanding of matrices)
  4. Combinatorics (further development of Dicrete maths)
  5. Introduction to Abstract Algebra (this will solidify your understanding of modulo number systems, in particular binary, octal, hex etc.). It also gives a deep understanding of set theory which is ubiquitous in practical programming and the comp sci literature.

This is the fundamentals. If your are thinking about graphics or game programming then you have a whole slew of additional courses in physics, graphic arts, and possibly fluid dynamics. Also Differential Geometry is essential for any real world modeling of motion on curved surfaces.

ennuikiller
A: 

Number theory doesn't have many direct applications to programming (though there are some neat tricks you can use for optimization), but there are several basic concepts that make cryptology much easier to study.

My number theory class used Silverman's Friendly Introduction to Number Theory, which is one of the best math textbooks I've ever seen. It's very easy to read (the title is entirely accurate about its friendliness), but covers a wide range of topics. Silverman is also an author on my cryptography textbook, An Introduction to Mathematical Cryptography. It's more technical, addresses most areas of cryptography, and provides plenty of references for where to find more detail.

Velociraptors
A: 

Consider Knuth's Art of Computer Programming series. It can get dense, but it will ground you in the math most needed for programming. I'd suggest going for the available fascicles of Volume 4 early on. These books are not for everybody, but if you find them interesting you will learn a whole lot.

They won't teach you calculus or geometry, which are important in many aspects of programming but tend to be more specialized.

David Thornley
A: 

I think you should dive into whatever interests you most and in order to find out what that is you should get some books which cover the facts and offer orientation and some books which nurture your motivation and curiosity. You really have to dive into it to find out, it's a pretty individual thing imho.

Facts / Orientation:

Donald Knuth - Bronstein, Semendjajew

The Science of Programming - Data Structures and Algorithms

Motivation / Curiosity:

The Road to Reality - Fermat's Last Theorem - Godel, Escher, Bach

Also for motivation on the more practical side:

projecteuler.net

soulman
+4  A: 

Concrete Mathematics: A Foundation for Computer Science would be my suggestion for a book that covers some advanced topics.

JB King
+1  A: 

It's a bit off from your question, but let me suggest the Princeton Companion to Mathematics.

It gives an overview of all of mathematics, so it is more than "math useful to programmers", but it's style is as easy to understand as it gets, and the important parts are in there.

starblue