Math has never been my strong suit. At school, it was always the subject I’d get my worst grades. I didn’t attend college for Mathematics or computer sciences either. Overall it has always been a subject I had difficulty with, and it was only when I actually started working as a programmer – most especially, developing visually rich interfaces in Flash – that I started to understand, and enjoy, math (I’d blame my lack of early interest in not knowing how the theory actually applied to anything practical, but that’s a subject for another time).
Still, a while ago I realized my theoretical knowledge of Math was really lacking. I could get stuff done with enough research, but certain pieces of the puzzle – understanding things like dot product, proper matrix manipulation, and reading math equations – were beyond me. That’s when I decided to spend some time learning (academic) Math properly, and getting the math education I never had.
This started a few years ago, and is still a work in progress. However, I collected a number of resources in the subject. And while lengthy articles on the subject of math for programmers already exist online, I thought I’d share what I had in a more succinct format.
- Khan Academy: this is the first obvious link. It has a massive library of videos on the subject, ranging from early math to more complex academic topics. It also features a plethora of trials on every one of the taught subjects, so you can test yourself and make sure you’ve learned each topic. However, it can take a lot of time to go through all topics, and it’s not programming-oriented, so if you just want to get a refresher or a fast start, it’s probably not the ideal solution.
- Joe Arroyo graphics tutorials: a collection of tutorials aimed at explaining practical solutions to graphics problems. Great short list on the topics of matrices and transformations.
- Interactive 3D Graphics: a free 3d graphics course by Udacity. You can work at any pace you’d like, but it requires about 48 hours of work. It’s a practical course too, with emphasis on, duh, 3d graphics. Check the complete syllabus here.
- Structure and Interpretation of Computer Programs: this is one of MIT’s many free OpenCourseWare courses, and all in video form. It’s not exactly about Math, but a formal course on computer programming interpretation, including the structure of programming expressions.
- Mathematics for Computer Science Another one of MIT’s OpenCourseWare courses, this time focused on math topics for Computer Science (videos here). Not exactly about graphics, and more about data manipulation.
- Jorge Rodriguez’ Math for Game Developers: Jorge Rodriguez has an impressive number of videos on YouTube on the subject of math. You can pick and chose from very practical subjects on not just graphics but all aspects of game development, which are, in many times, topics that are also relevant on user interface development. He has some discussion about his series on Reddit too.
- Keith Peters’ Coding Math: Keith Peters, one of the Flash Math gurus, has his own series of videos for math programming. His videos are also aimed at explaining how to approach very common math problems when creating code to manipulate graphical elements, so it’s an invaluable collection.
- Free math books: if you’d rather learn through math books (rather than through videos) or just want to have a source to consult, this list of free ebooks on the subject can be very helpful.
- Math as code: a cheat sheet (in GitHub form) of how to read math equations and transform them into programs. A nice resource to have around.
These are the sources I’ve been using some of my free time with. That doesn’t mean I’ve been using them all; because I’ve been trying to get a complete education on the subject, I’ve been mostly using Khan Academy, but it’s been taking a while – again, the other sources are probably better suited for quicker learning, and that’s what I’ve used for a quick overview of some topics when needed.
Finally, if you’re unsure on what to actually learn, two discussions on Reddit are helpful: the first one on 3d vector math, and a second one in (a bit) more general 3d math.
Nice job!
This is perfect, thanks a lot for sharing! o/