Ask HN: Recommendation for (re)learning Math Skills
I'm kind of an pariah in the CS world as I was unlucky enough to have multiple terrible math teachers as a kid and don't have what I would consider a strong math background. I've never really enjoyed math as much as I think I should, even though I've always loved programming and even 'math puzzles' from time to time.
I've noticed in recent years that my math skills are much higher than they should be considering my lack of major education in that area (College Algebra is about it). This has come up working with colleagues or just taking some fun online IQ tests where I scored highest in math even though I've always been led to believe I suck at it.
I'm wondering what HN readers would recommend to someone like me as a good avenue to relearn some basics and then move into areas I've only scratch the service of such as geometry and trig?
20 comments
[ 4.4 ms ] story [ 49.2 ms ] threadEdit: There is also a book called Art and Craft of Problem Solving which is unrelated to this series but which is worth checking out too, despite the fact that it is not exactly what you are looking for.
http://www.artofproblemsolving.com/
What do you mean by college algebra? Do you mean abstract algebra, like group theory? In any case geometry and trigonometry is a prerequisite for college level math.
The key is working wide range of problems and feedback. You get both of those than you will pick up fast. Part of that feedback is self invented..graph everything..
I'd recommend this one: The Haskell Road to Logic, Maths and Programming -- would fit best if you'd also have an interest in Haskell/FP, but it's also a good introduction to formal proofs -- might be a bit too basic if you're interested in higher maths, tho, but a good starting point for math education.
Anyway, that's been my experience.
This ability, to see the direction you need to go from the pieces that you have and the goal you want to achieve, is the most transferable skill that mathematics will give you. And you can only get it from practice. Get actual textbooks, with practice problems. Preferably, get the teacher's edition, or one with the answer to odd-numbered problems in the back so you can check your work. And when you make a mistake, don't just correct it, go back and figure out why you were wrong and why the answer is correct, because that's often one of the most instructive activities you can do.
You probably already know that any given level of math builds on knowledge and concepts from previous levels. Depending on the speed of progression, it's often necessary not just to know the preceding knowledge, but to master it. The lower-level stuff has to be downright trivial if you want to focus on higher-level stuff. It's simply not possible to do, e.g., line integrals in the complex plane if you have to stumble through basic algebraic manipulations like canceling variables while you're doing it[1]. The converse of this, is that you often master important math concepts by using them as the foundation for something more abstract, because only then do you see why they were so important.
Anyways, enough generalities, time for specific subjects. Geometry isn't very important, but trigonometry becomes important, especially because it's related to exponents which are super-critical. Learn trig. Then, learn linear algebra (matrix maths). Then, find a course or book on discrete mathematics, which usually means intro-level number theory, graph theory, and combinatorics. Calculus is worth picking up at some point. It's not as important to a programmer as to a physicist or engineer, but it is foundational to several other areas, and shows up in the damndest places. Simple single-variable calculus is probably sufficient, and focus on what an integral represents rather than how to compute one. After that, the two interesting paths are analysis (and topology), and algebra.
[1] It's a lot like learning a new language in a different alphabet, which is something I'm doing right now. It's really hard to deal with important concepts like characterization and tone when you can barely fit three letters in your head at the same time, much less a whole word (that you have to look up), much less an entire idea.
http://ocw.mit.edu/courses/mathematics/
Understanding calculus helps you to understand the relationship between functions, which is very useful with doing FP-like things in your code.
Most math in math books is pretty useless in terms of practicality and enjoyment. I would bet that you've always had an appreciation for math but the math curriculum you went through destroyed any chance of you enjoying it.
I'd say you should think of (or find) problems you think would be fun/useful to solve, and then learn the math required to solve them. In the process you'll probably find you don't understand certain concepts, but you can always go back and learn those until everything begins to make sense.
Be in control of what you learn.
"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.)"
Here is a link to the full blog post:
http://steve-yegge.blogspot.com/2006/03/math-for-programmers...