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):

  1. Discrete Mathematics with Applications 4th edition by Susanna Epp
  2. Practical Analysis of Algorithms by Dana Vrajitoru, William Knight
  3. Book of Proof Richard Hammack
  4. 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.

  • $\begingroup$ Basically, the best way to learn CS is through learning in some university. There are a lot of topics in mathematics that are relevant to CS, so I highly doubt you can learn everything from just one book. I learn through an university (and not from a book), so I'm sorry that I can't help you choose what book to use. You can also learn the (basic) math topics from YouTube videos (they are explained with visuals as well, its easy to understand this way). Take a look at: youtube.com/c/brightsideofmaths/playlists and youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw $\endgroup$
    – nir shahar
    May 27, 2021 at 7:25
  • $\begingroup$ A comment and two suggestions. Comment: when you ask for recommendations on the Internet, even on as helpful a site as this, there is a tendency of people to recommend texts that are hard. Suggestions: (1) most people need help understanding whether their proofs are right or not so you may want to find someone to work with you on this, (2) if there is a university near you then you could email the Chair and ask if there is a list of texts, which would give you a sense of a reasonable sequence and also maybe make you a friend. $\endgroup$ May 27, 2021 at 16:07

2 Answers 2


Check out this and this. I prefer the former one cause the number of subjects is relatively small, and they are the core fundamentals.


As other people have already said in the comments, the best way to learn is through a university. This is not necessarily because a book does not cover the same material but becasue you need (1) structure and (2) someone to check that what your understanding is sufficient and your solutions to problems are correct. As a software engineer, you already know that you can't just learn by reading, you have to practice.

Some recommendations:

  1. Check out CS courses, perhaps at an online university with a flexible program since getting a degree is not your main goal. Also there are many univerities that offer courses for free.

  2. If you don't want to enroll you can see if you can audit a course.

  3. Pick a CS program of any univeristy, look at the lessons offered to CS undergrads and go to the webpages for the courses. The suggested literature is usually published there.

  4. Some books that I personally found helpful:

  • "Introduction to Algorithms" by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein.

  • "Introduction to the Theory of Computation" by Michael Sipser

  • "Logic in Computer Science: Modelling and Reasoning about Systems" by M. Huth and M. Ryan

  • "Introduction to Graph Theory" by Douglas Brent West

  • Something about Linear Algebra and something about Statistics. I don't have any recommendations of books in english but they are they are both taught in almost all undergrad CS programs so good textbooks should be easy to find.

  1. Another good list with great books on fundamental concepts related to CS is here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.