
This book covers elementary discrete mathematics for computer science and engineering. It emphasizes mathematical definitions and proofs as well as applicable methods. Topics include formal logic notation, proof methods; induction, well-ordering; sets, relations; elementary graph theory; integer congruences; asymptotic notation and growth of functions; permutations and combinations, counting principles; discrete probability. Further selected topics may also be covered, such as recursive definition and structural induction; state machines and invariants; recurrences; generating functions. The color images and text in this book have been converted to grayscale.
- the Python courses got me up-to-speed on the basics of that language: https://ocw.mit.edu/courses/6-0001-introduction-to-computer-... and https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-pr...
- Structure and Interpretation of Computer Programs served as a disciplined review of a book which I wasn't patient enough to do the exercises of when I first read it: https://ocw.mit.edu/courses/6-001-structure-and-interpretati...
- Mathematics for Computer Science helped make up for my spotty math: https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-...
I've also found the recent book:
https://www.goodreads.com/book/show/39996759-a-philosophy-of...
very helpful (first reading I did one chapter at a time, re-writing my current project applying the principles of that chapter) --- interesting video overview at:
https://www.youtube.com/watch?v=bmSAYlu0NcY
If one is fortunate, there are videos on specific subjects/algorithms which one needs, e.g.,
- Structure and Interpretation of Computer Programs
- Computer Systems: A Programmer's Perspective
- The Algorithm Design Manual
- Mathematics for Computer Science
- Operating Systems: Three Easy Pieces
- Computer Networking: A Top-Down Approach
- Readings in Database Systems
- Crafting Interpreters
- Designing Data-Intensive Applications
Other books I've seen:
- Computer Graphics From Scratch
- Haskell Programming From First Principles
- Zero To Production In Rust
I recommend the content covered in MIT 6042J, Mathematics for Computer Science (https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-...). The most important part of this course is logic and proof-writing, both of which are foundational tools of serious mathematics, that sometimes get elided if you come in through the physics side (i.e. via calculus and analysis). You will also learn discrete mathematics, i.e. "a bunch of stuff that is useful for cryptography". But I think the foundational stuff about logic and proofs is even more useful. It will rewire your brain in a way that prepares you to go deeper in maths.
https://condor.depaul.edu/~sepp/DMwA4e.htm
2. Mathematics for Computer Science by by Eric Lehman, F Thomson Leighton, Albert R Meyer
There doesn't seem to be enough focus on teaching proof techniques, and skips straight to discrete math content.
Could be a decent beginner resource if combined with something that teaches proof techniques though.
EDIT: the MIT book also listed is actually good [1]
[0]: https://cims.nyu.edu/~regev/teaching/discrete_math_fall_2005...
That book can be found on the Teach Yourself Computer Science page. [2]
The TYCS page says this book is advanced... but they teach this content to 1st years at University of Waterloo.. so really it's just difficult beginner material.