I’m a self-taught software engineer who’s been working in industry for 12 years. I don’t have any formal education in CS and math was never my strong suit (although I’m willing to do the work to make it my strong suit!), but when I first started learning how to program I went through some basic courses offered by Stanford, MIT, etc.
Anyhow, I’m looking to gain a more rigorous understanding of CS, starting from the most basic, foundational pieces. I’m looking for some guidance on a good course of self-study – the order to go in, suggested resources, etc.
Given that I’m looking to understand CS fundamentals more rigorously, as I said, I’m beginning with some basic math (not my strong suit). What I’ve mapped out so far is going through the following books (and investigating prerequisites/dependent concepts for these materials on an as-needed basis):
- Discrete Mathematics with Applications 4th edition by Susanna Epp
- Practical Analysis of Algorithms by Dana Vrajitoru, William Knight
- Book of Proof Richard Hammack
- Mathematics for Computer Science by Lehman, Leighton, Meyer
I have a bit of a tendency to get down the rabbit hole and go on detours, whereby the main purpose of my study recedes into the distance as I investigate yet another area that I don’t seem to have a solid foundation in. But I’m unsure how to avoid this as some things really do need to be understood before other things. For example, without understanding some basic discrete maths, it will be difficult to talk about recursion, time complexity in a way that is more rigorous than my current understanding.
Perhaps I’d be better suited just starting immediately with MIT’s “Mathematics for Computer Science” course (6.042J) and only looking into things I don’t have a grasp on as needed?
Anyhow, sorry for the ramble. Would love some general guidance and direction for getting to where I’m trying to go. Thanks in advance.