I've always been a largely independent learner gleaning what I can from Wikipedia and various books. However, I fear that I may have biased my self-education by inadvertent omission of topics and concepts. My goal is to teach myself the equivalent of an undergraduate degree in Computer Science from a top university (doesn't matter which one).
To that end, I've purchased and started reading a few academic textbooks:
- Structure and Interpretation of Computer Programs
- Introduction to Algorithms
- Artificial Intelligence: A Modern Approach
As well as a few textbooks I have left over from classes I've taken at a mediocre-at-best state university:
- An Introduction to Computer Simulation Methods
- Calculus: Concepts and Connections
- Computer Organization and Architecture
- Operating System Concepts
- A First Course in Database Systems
- Formal Languages and Automata
My questions are:
- What topics aren't covered by this collection?
- Are there any books that are more rigorous or thorough (or even easier to read) than a book listed here?
- Are there any books that are a waste of my time?
- In what order should I read the books?
- What does an MIT or Stanford (or UCB or CMU ...) undergrad learn that I might miss?
Software engineering books are welcome, but in the context of academic study only please. I'm aware of Code Complete and the Pragmatic Programmer, but I'm looking for a more theoretical approach. Thanks!