# Getting up to speed enough to tackle mathematics and logic applied in programming?

I'm a games programmer with an interest in the following areas:

• Calculus
• Matrices
• Graph theory
• Probability theory
• Combinatorics
• Statistics
• More linguistic related fields of logic such as natural language processing, generative grammars

Here are some examples of topics I've come across in the last 18 months in my design/development work, that have been of interest in solving certain problems. I grasp the outlines of these topics enough to know how they would help me to solve certain problems in my designs, but I don't even scratch the surface in understanding how to apply the math involved.

My maths ability is sorely lacking. I know enough to get by for the relatively simple games I write. My logical and analytical skills are generally good, being a programmer. I enjoyed math in high school, but college was a different story -- my lecturer was terrible, and I didn't get any individual tutoring as I did before that. Anything that was in my head has long since departed. I would need to relearn what I learnt, which in mostly centred around "the calculus".

Bearing in mind that I need to balance my time between improving as a game designer, developer and mathematician/logician, what is the best way for me to tackle these gaping holes in my knowledge, enough to work in-depth mathematical descriptions into working algorithms?

-
Please make this community wiki. –  cardinal Aug 6 '11 at 13:05
Considering your background, a good place to start might be Concrete Mathematics. It may be on the challenging side of things for you, at least at the beginning. –  cardinal Aug 6 '11 at 13:07
Browsed through it a bit. I do like the more colloquial style. My maths book from college, Advanced Technical Mathematics, was so dry as to pucker your mouth. I shall have a look into it a bit further. I also like that it covers discrete and continuous mathematics -- that's key. –  Arcane Engineer Aug 6 '11 at 18:06

The linear algebra ("Matrix math for spatial transformations") is probably the thing you can pick up the quickest. Essentially, you just need to understand enough trig to see why

$x' = x \cos \theta - y \sin \theta,$

$y' = x \sin \theta + y \cos \theta,$

observe that for fixed $\theta$ this is a linear transformation of x and y, and then extend it to three dimensions. (You can also learn the quaternion trick if you want, though it's not really necessary, especially at the start.) Understand this, and you can write a rudimentary 3D engine in a couple of hours.

I don't know too much about the Khan academy, but it definitely covers these subjects and I've heard good things. If I were you, I'd set this as my immediate goal -- feel free to come back here with specific questions -- and then try to go from there. Linear algebra underlies most of the rest of mathematics in one way or another, so it's good to get a good feel for it now. It's also the easiest thing to apply directly.

-

I've just answered a similar question, where I've recommended programming contests like http://www.spoj.pl , here you can find the whole explanation : Preparing for first year CS

-
+1 for spoj.pl. –  VelvetThunder Nov 11 '11 at 0:28