views:

853

answers:

11

Every so often I get the impression that my knowledge of mathematics (as it pertains to the field of software development) has some gaps. I'm an educated person. I have a college degree. I've always enjoyed learning, which is why I would like to try to fill in these gaps.

My job is in the financial industry, and I feel like many of the large-scale number crunching tasks that we do could be made more efficient, possibly, if I had a better grasp on the mathematics/logic that's going into it, or concepts that could be leveraged as a shortcut.

Do you have any suggestions? Books that you've found helped with this? Video lectures?

EDIT: I should note that my degree is in Computer Science, so I am familiar with some of the areas of mathematics that are relevant. I'm just not sure how best to brush up on them or to refine what I already know :)

+7  A: 

One area of math that's very useful for programming is Discrete Math. A good reference for that is the MIT Open Courseware course on "Mathematics for Computer Science", which is here.

Ian Varley
+1  A: 
  • Go back through your college math notes. See what you remember and what you don't. Try to redo some of your assignments.
  • Once you've figured out what areas need revisiting, branch out from there. Use OCW or other free online course material to expand your knowledge.
Scottie T
+1  A: 

I would look into course requirements big universities need for their Computer Science degrees. There's usually the right mix of Math in there.

Pyrolistical
+3  A: 

It may not relate directly, but Project Euler is great to keep you thinking in mathematical ways.

EBGreen
+4  A: 

You should know probability and statistics. I went through this in my undergraduate physics program. Stanford offers free lectures on math and physics, I think you can access them here still (many universities are now doing this public video lectures idea). And something that one of the creators of this site just recommended.

Alex
+2  A: 

Concrete Mathematics. This is a college textbook by Knuth that emphasizes practical problem solving in areas relevant to programmers.

RossFabricant
A: 

As someone doing a major in mathematics, I think that mathematics is best learned from a good teacher, with some pressure to succeed (such as tuition fees). I find it easy to learn computing by myself, but mathematics is much harder. I still enjoy it immensely.

Artelius
I agree. I'm not looking to become a full-fledged mathematician. I only hope to better understand the mathematical tools that I use.
Jeremy Cantrell
+5  A: 

In order of importance, I'd say:

  • Algebra
  • Combinatorics
  • Statistics & Probability
  • Vector Math
  • Matrix Math
  • Calculus

In my opinion, Algebra is essential for any decent programmer, since it forms the underpinnings of variable representation and expression evaluation (functions, commutativity and transitivity of operations, etc).

Combinatorics is essential for all sorts of graph algorithms (traversing all nodes in a graph, finding shortest paths, etc). Knowing your way around combinations and permutations is vital in almost any programming context.

Next in line is statistics, especially if you want to get into AI or machine learning. Stats is probably the biggest bang-for-your-buck area of math knowledge for programmers. In most cases, you don't need to get into the heavy stuff, like multivariate regressions. Just knowing how (and in what circumstances) to quickly calculate mean, median, mode, standard deviation, margin of error, confidence interval, and conditional probabilities is huuugely useful for lots of machine learning applications.

Vector math is important in a variety of information-modeling applications (n-dimensional vector-space models are a very handy way of reasoning about document semantics), as well as for all sorts of 3D graphics applications.

Matrix math is a lot like vector math, in terms of its applications (AI, information models, 3D, etc) but it's a little bit trickier, since it adds another dimension. (Matrix math is my own achilles heel; I could definitely use a brush-up.)

And calculus is essential for anyone doing scientific computing and simulation.

Have fun!


ON EDIT:

I think the best way to brush up on your math knowledge is to work on a project that uses that knowledge. If, for example, you want to learn some statistics (like, REALLY learn it, so that you can rattle off all the formulas without looking them up), then you might be interested in analyzing the dataset from the Netflix Prize contest.

The dataset includes more than 100 million records from the Netflix user database and offers an enormous opportunity for trying your chops at implementing some of those math-heavy algorithms.

As for actual reference materials, I've found the wikipedia to be more than adequate. For example, on a recent project of mine, I've repeatedly referred to some of its articles on Kernel Density Estimation and Vector Fields.

The intimidating thing (for me) about hardcore math (since I'm almost entirely self-taught) is the notation. All those greek letters put my head in a bit of a whirl. But if you read the articles several times over (and google for phrases like "math sigma symbol"), then it's not too difficult to piece together what they're talking about.

benjismith
+1  A: 

Why not take a few classes at the locale university? Perhaps some of the number crushing geeks at your work might know which classes you should attend?

Kasper
A: 

Get out a book, such as good Discrete Math textbook, and start cranking out the exercises every day. Do all of them.

Repeat with another book.

jJack
+1  A: 

One more - here's a set of video and audio lectures from Steven Skiena's discrete math course. He's famous for being the guy who wrote The Algorithm Design Manual (aka the Hitchhiker's Guide To Algorithms), and his math course is quite good as well.

Ian Varley