You raise a good point about discrete math, let me add the following to my list above:
* MIT's 6.042 ("Mathematics for Computer Science") Lecture Notes start at first principles and go on to cover relevant discrete math topics motivated by common types of computer science problems.
Thanks for the response. What kind of mathematical problems should I be looking for? I've taken two semesters of calculus and a semester of linear algebra, but I don't think it's had much impact on my programming ability.
Ah, I remember solving a few of those a while ago. Unfortunately I'm not very mathematically inclined, and some of the problems there are extremely difficult to figure out.