Honestly, unless you're very gifted, a book on its own is not going to be enough to really develop your skills. You need to work interactively with a teacher. Getting a degree in math is a good start, but even then it will be limited if you don't work with other people, go to office hours, form relationships with professors---embed yourself in the culture, so to speak. I think getting engaged with an online community like MathOverflow or similar could be a substitute for this.
IMO, programming is "easier" to learn on your own for a few major reasons:
1) The sorts of things most people are interested in building just aren't unforgiving intellectually in the same way that math is.
2) You have a compiler to check if you're right, and your code will often still work even if it's "wrong" (not as efficient as it could be, has unwanted side effects, etc.). In some sense the compiler is a bit like a teacher this way.
3) With programming, you can upload and make it available for free, and whether it's legit or not is largely disconnected from your pedigree or how "correct" it is. This makes programming far more accessible. This makes sense considering that programming is primarily a practical tool. On the other hand, mathematics is primarily a field of scientific inquiry and is judged by different standards. If you learn a bit of math, try to write a paper, submit it to the arXiv... well, people will probably think you're a crank.
On the other hand, if you're just interested in math for the love of the game... you can certainly pick up a book and read it, maybe work some problems, but I think at this point it's quite easy to fool yourself into thinking you understand more than you actually do. I guess there's no real harm in being a charlatan, but probably the average person is interested in having some kind of real relationship with mathematics that they can be confident has a firm foundation. I'm very skeptical most people can truly pull this off by just reading books and not actually going to school.
---
As an aside, I think the fetishization of math in programming communities is very interesting...
Honestly, unless you're very gifted, a book on its own is not going to be enough to really develop your skills. You need to work interactively with a teacher.
Wouldn't that depend on what level of skill we're talking about? I believe that most people who need to learn just, say, high-school algebra/geometry/trigonometry/etc. can probably do so with "just books" if they are motivated.
Heck, I'd even venture that most anybody who is motivated enough can learn at least through Calc III on their own using online resources. I'm going through Calc III right now actually, using a combination of books and online videos, and there hasn't been anything that has struck me as particularly challenging so far. This after only making it to Calc I before I dropped out of school "back in the day".
Getting a degree in math is a good start, but even then it will be limited if you don't work with other people, go to office hours, form relationships with professors---embed yourself in the culture, so to speak.
I think these things would be critical if one wants to become a mathematician. But for somebody who just wants to learn more math for the purpose of reading (non math) research papers (maybe in machine learning to pick an obvious, if possibly trite, example), solving problems in everyday life or at work, or possibly even for doing research in another (non math) field and then writing up their research, I would think of all of those things as being "nice, sure, if you have access, time, money etc. But not even close to absolutely essential".
Unfortunately the OP didn't really say what their goal is, so it's hard to say what advice makes the most sense for them.
Also unfortunate is that for probably most people who are working career professionals, there likely isn't enough free time available to go back and do an actual math degree in school. So learning on ones own from books, videos, etc. is probably the only viable choice.
My response was based on the reader saying something about "mathematical thinking" in their post. In my experience, programmers talking about "mathematical thinking" usually have math insecurity and are referring to more advanced topics, thinking they need to consult tomes of deep mathematical wisdom to correct this deficiency (wrong). Could be totally off base, of course. But note some of the other replies here, suggesting very sophisticated books. Are they appropriate for a random HN poster who is soliciting random book suggestions to improve their "mathematical thinking"...? Seems unlikely to me...
One caveat, though:
... Also unfortunate is that for probably most people who are working career professionals, there likely isn't enough free time available to go back and do an actual math degree in school. So learning on ones own from books, videos, etc. is probably the only viable choice.
I'm not so sure about this. If, like you say, someone is in a job where they need to read some papers with some math in them, they should be organizationally near someone who can help them out. If possible, I think a better strategy (better even than getting a degree) would be to find these people and develop a relationship with them to the point where you can ask them questions. They should then be able to explain any unclear notation, unfamiliar (simple) concepts, etc. Possibly some of that person's advice might come in the form of "watch a Khan Academy video on Topic X". But this will be a far more productive use of time than self-directed learning in this case.
On the other hand, if they aren't near anyone with those skills but they're reading these papers... something is probably amiss. For example, if they're reading a machine learning paper which requires a significant knowledge of "engineering math" (Calc 3, linear algebra, etc.), and there is no one with that knowledge nearby... having them read that paper is probably a waste of time from an organizational perspective.
There's also the question of why they're reading that paper when they don't have those basic mathematical skills. Without those skills, it is unlikely they will be able to do very much that is useful with it. If they want to implement the algorithm because they think it will be suitable for some task, I would argue that without those skills they are not in a good position to be able to accurately assess whether the algorithm will perform well. Part of what you learn in an advanced degree is how to read a paper---i.e., how to sniff out the bull shit, what to be wary of, etc.
I'm not so sure about this. If, like you say, someone is in a job where they need to read some papers with some math in them, they should be organizationally near someone who can help them out. If possible, I think a better strategy (better even than getting a degree) would be to find these people and develop a relationship with them to the point where you can ask them questions.
Fair point.
One could also form a math "study circle" of some sort if you are in an area with enough mathematically oriented folks to find people to participate. I did this briefly and it was a valuable thing. It kind of fell apart for different reasons, but I could see doing it again at some point.
It's interesting. My first instinct was to disagree with this post, but on reflection I think I mostly agree with it. A couple useful mental models are (i) deliberate practice and (ii) train-validation-test(/out of sample) sets from machine learning
Your point (2) about compiler/interpreter in programming giving you rapid objective feedback is spot on and a vital component for deliberate practice that most people don't think on. You can kind of get this in math, in particular when you have some familiarity with the subject matter so the machinery isn't "too abstract" for you to sort through. (I.e. you should be able to confirm whether your proof/answer is accurate the vast majority of the time.) This is much trickier for first exposure to a subject though and the checking effort is on you, not the compiler.
The biggest issue I've seen with people self studying or in small math groups is your final (non-aside) paragraph which is perhaps more a psychological problem than and aptitude problem. When things get tough there's an enormous temptation to delude yourself to think you understand something that you are clueless about. The typical, schoolroom, way of mitigating this is via a final exam and you can check your grade at the end of the class; this gets typically gets short circuited in self guided study. Exams, btw, are essentially validation data sets you compare your math knowledge/model against. (We can call them 'test' sets if you prefer). The most important step really is repeatedly seeing how your knowledge works out of sample i.e. on 'new' stuff that comes out of the wood works and math.stackexchange is a perfect place for this when dealing with undergrad to mid-grad level problems. I do this all the time to get a sense of my understanding of a new subject I've recently acquired. But most people refuse this final step. People will tell me its 'too hard' and 'takes too much time' (meanwhile they start a new math book) but I strongly suspect it's in large part due to cognitive dissonance. (Another kind of out of sample test comes up when working on a subject matter that uses something you just "learned" as a pre-req, though there's a recursive element here and at some point they basically need to interact with 3rd parties.)
I suppose my relatively minor quibble is how much effectiveness depends on being "very gifted" [in some sort of math specific sense] vs understanding the basics of self-learning and being psychologically aware (astute?) enough to not go into denial. Insert quote from Feynman or whomever about how easy it is to fool yourself.
> As an aside, I think the fetishization of math in programming communities is very interesting...
I studied a fair amount of math in school, then worked for many years as a programmer without using one bit of it. More recently though, it has become important again. I try to make sense of the posts here about AI and generally find I don't know enough math, despite knowing more than most programmers do (though far less than actual mathematicians do). So I do feel like I have to study more math if I want to understand that stuff.
Similarly, trying to learn Haskell (a worthwhile endeavour for any programmer) sent me into a deep rabbit hole in mathematical logic. Maybe it wasn't necessary, but I do think it solidified my understanding of Haskell, such as it is. I still have no idea what a left Kan extension is though.
I'm not trying to humblebrag, I think maybe I'm just stupid, but I find it hard to trust my understanding of anything unless all those details are nailed down.
Generally agree. There are books, and some are better than others, but unless you have both the passion and the aptitude, there is no book that will magically make everything understandable. If you struggle with math, it's probably you and not the book you are using.
Edit: just to add, I struggle with math, lest there is any misinterpretation of my perspective. I went through phases where I thought I just needed to find the right books or the right teachers who could explain it in a way that meshed with my "learning style," but ultimately concluded I just don't have a very strong innate ability in the subject.
IMO, programming is "easier" to learn on your own for a few major reasons:
1) The sorts of things most people are interested in building just aren't unforgiving intellectually in the same way that math is.
2) You have a compiler to check if you're right, and your code will often still work even if it's "wrong" (not as efficient as it could be, has unwanted side effects, etc.). In some sense the compiler is a bit like a teacher this way.
3) With programming, you can upload and make it available for free, and whether it's legit or not is largely disconnected from your pedigree or how "correct" it is. This makes programming far more accessible. This makes sense considering that programming is primarily a practical tool. On the other hand, mathematics is primarily a field of scientific inquiry and is judged by different standards. If you learn a bit of math, try to write a paper, submit it to the arXiv... well, people will probably think you're a crank.
On the other hand, if you're just interested in math for the love of the game... you can certainly pick up a book and read it, maybe work some problems, but I think at this point it's quite easy to fool yourself into thinking you understand more than you actually do. I guess there's no real harm in being a charlatan, but probably the average person is interested in having some kind of real relationship with mathematics that they can be confident has a firm foundation. I'm very skeptical most people can truly pull this off by just reading books and not actually going to school.
---
As an aside, I think the fetishization of math in programming communities is very interesting...