I'm currently in my second year of college majoring in comp sci and I haven't really taken any math courses yet except pre-calc. In high school, I thought of myself as a pretty good math student and got good grades but never really challenged myself to take calculus. I found pre calc easy enough but it was taught to me in a very mechanical way. For example, first step is to do this and then that and so on. When you see a specific problem, you do it the way the professor taught you and that's all you need to know. I felt that this isn't really good for me since I didn't really understand any of the concepts for example logarithms, quadratic equations, trig identities, etc.
I plan on becoming a programmer/software engineer and after reading a few intermediate programming books or trying out intermediate programming exercises that required some math (nothing too difficult), I found that I couldn't understand how to apply the math I knew to programming. I felt that is because of the way I was taught my math so I was thinking that I should probably go back to the basics and re-learn it in a different, more intuitive way so I understand the concepts better and have a better and more solid foundation so I can understand the higher level math that is needed to solve such programming problems. An example of such a basic programming problem is: http://code.google.com/codejam/contest/32016/dashboard#s=p0 and http://code.google.com/codejam/contest/351101/dashboard#s=p0
Reading blogs posts, and other info online suggests that having a good math background will help you find solutions to programming problems much more easily compared to someone who has no math experience. Also helps out with algorithms that almost all programmers should have basic knowledge of. People who are good at math are usually good problem solvers and programming requires a lot of problem solving.
So what I want to ask you guys is if going back and learning the basics would be a good idea or should I continue with higher level math and hope that it will all fall together and make sense in the end. Also, if I do plan on going back, I don't want to retake those courses because 1. it's very expensive, and 2. it's sort of a waste learning it again in the same exact method that most schools teach. I would rather find a book and self-learn to better understand the concepts.
Lastly, since it's difficult to self learn any topic, especially something like mathematics without a teacher to guide you, can you recommend a strategy to self learn the topics I need in order to become a good programmer. Currently, most computer science programs include a lot of Calculus which from reading famous blog posts online isn't something that is the best type of math programmers should focus on. According to this: steve-yegge.blogspot.com/2006/03/math-for-programmers.html
Discrete math is the most practical for programmers. In the same blog post, it says that I shouldn't take an in-depth approach to such subjects. Instead, the blog post says, "The right way to learn math is breadth-first, not depth-first." So with my basic background, what topics should I first cover in order (since I can't jump into an advance math topic without learning it's prereqs first) while I self learn.
I've been researching on some books on Amazon on various sites and found these four books. I wanted to get your opinion on these if this would be a good start. Also, if you can suggest any others to add to this, I would appreciate it.
The four books that I found on Amazon:
Precalculus Mathematics in a Nutshell: Geometry, Algebra, Trigonometry - To brush up on the basics for quick review.
Mathematics for the Nonmathematician - Sort of an outline of different types of math I'm guessing from the reviews. Looks like a good basic book to start from?
Mathematics: A Very Short Introduction - Same purpose as above
The Skeleton Key of Mathematics: - Not sure about this one if it's something that fall under basic math or advanced. Judging from the title, it seems relevant to me.