Except for a couple of 200-level data structures and algorithms courses, my computer science education has been self-directed. I’ve picked up bits and pieces as I’ve gone along, but never made a formal study of it. Oh, sure, I know basic and even some advanced data structures and algorithms, but mostly because I’ve encountered them in my work. But that’s not the same thing as a formal course of study.
One of the dangers of self-education is bypassing “unimportant” or “uninteresting” topics, and thereby leaving holes in your knowledge: holes that come back and bite you at the worst possible time.
Because I’ve never studied it formally, I’ve had difficulty with over the years with the mathematics used when analyzing data structures and algorithms. I get the basic ideas, and if I really need to I can puzzle out the math when I see it in a book or article, but to say that I understand it is a bit of a stretch.
I was reading a paper recently that was liberally peppered with mathematical notation, much more than most papers I’ve read. It appears that the author was much more comfortable with his equations than with his writing, and let the mathematical notation speak for him. That is, critical things about his work weren’t even mentioned in English prose. No, they were buried in the math and not called out at all in the surrounding text.
Fortunately, the author’s grasp of standard mathematical notation is very good. I had no trouble following along with the help of a few references, although it was a little slow going because I had to brush up on some things in the process. Had the author done as too many others and made up his own notation, I would have had a very difficult time puzzling out what he was trying to say.
Anyway, after struggling through that paper I figured it was time to get a good and complete understand of the mathematics used in the study of computer science. In searching for a book to buy or a web site that has the information, I ran across the free book Mathematics for Computer Science, by Eric Lehman (Google), F Thomson Leighton (MIT), and Albert R Meyer (MIT).
A quick look on Reddit, Quora, Goodreads, and other sites shows overwhelmingly positive reviews about the content and writing. There are of course a lot of “it’s boring, why would anybody want to study this?” type of comments, but few that take serious issue with the authors’ coverage of any particular topic. Those mostly meaningless criticisms are overwhelmed by positive comments from people who gained great value from the book.
Understand, I’ve only just downloaded the book, so I can’t yet give it a meaningful review. And it’s going to be a while; the book is almost 1,000 pages long! It’s a tome, to be sure, but I’m not under any time pressure. I’ll be taking notes as I work my way through the material, and perhaps will drop chapter or section reviews along the way.
At this point I can’t give a strong recommendation based on my own experience, but I do feel comfortable suggesting that you give this book serious consideration if you want to learn about the topic. It is, after all, the textbook for a course at MIT called “Mathematics for Computer Science.”
The book was published in 2010, and you can find printed copies of that edition, both in hardback and paperback. As far as I’ve been able to determine, the book is out of print. But the PDF is freely available. The version I linked above was last updated in 2017. As far as I’ve been able to determine, that’s the most recent edition.