skip to Main Content

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:

As well as a few textbooks I have left over from classes I’ve taken at a mediocre-at-best state university:

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!

22

Answers


  1. Biggest two omissions I see:

    For operating systems I prefer the Tanenbaum instead of the Silberschatz but both are good:

    And about the order, that would depend on your interests. There aren’t many prerequisites, automata for compilers is the most obvious one. First read the automata book and then the dragon one.

    I don’t know all the books you have, but the ones I know are good enough so that may mean the others are decent as well.

    You are missing some logic and discrete math books as well.

    And let’s not forget some database theory books!

    Login or Signup to reply.
  2. The best approach I’ve found is to pick your favorite University, go to their website, and check out the courses for the degree. Many of the big ones have their required readings published for each course. MIT’s Open Course Ware is a good example.

    This, by the way, works for non-CS degree programs as well.

    Login or Signup to reply.
  3. I don’t know how is it in the US, but in my country we study discrete mathematics and an introduction to graph theory before formal languages and automata.

    Also, I don’t see any book covering computer networks… why don’t you try Andrew Tanenbaum’s Computer Networks?

    Login or Signup to reply.
  4. Before anything else, read Computer Science: a Modern Introduction. This will give you a good grounding and overview of the subjects there are to pursue.

    Introduction to Algorithms is very good. For an introduction to functional programming, I recommend working through ML for the working programmer.

    Areas that differentiate the computer scientist from the programmer: a grounding in discrete mathematics, a basic understanding of VLSI and systems architecture, an understanding of the basics of cryptography and security, an understanding of computability theory, an understanding of information theory.

    Login or Signup to reply.
  5. This is a pretty good list. The two topics I would definitely add to the mix are discrete math, and networks. Other topics that may be interesting to you are compilers, computer graphics, distributed operating systems. There are also cool sub-fields of AI, like computer vision and machine learning. And in order to handle all that, you definitely need linear algebra and probability.

    And it goes without saying that you cannot really do computer science by just reading books. To really understand each topic, you have to do projects in it. I would also suggest looking at MIT’s Open Courseware, where professors post syllabus, lecture notes, and assignments.

    Login or Signup to reply.
    • Discrete Math I & II (my private
      school)
    • Physics I (Missouri most state
      schools)
    • Statistics I
    • Cryptography(optional but I liked
      it)
    • OpenGL in C++ (optional but neat)
    • Systems analysis and Design(Software
      engineering from the business
      perspective. The class was so so.)

    • Ethics.

    • Networking (teaches network
      algorithms, bit patterns dealing
      with network data).

      There are some things that to comprehend them require help; not necessarily a Professor(tho they do that for a living), but maybe a friend that has taken the class or studied the field.

    Reading books on these subjects doesn’t mean you know them. Doing math on the math, coding on the code, and so on is what helps you understand, and shows you know the subject in the end.

    Login or Signup to reply.
  6. Books on Professional Software Development covering how software projects work, different methodologies, and design patters are great.
    Web-design knowledge is also very useful when it comes to employment.

    I don’t understand why you are trying to do this yourself though. Even a ‘mediocre-at-best’ university will be able to teach you the skills far better than you can teach yourself. It’s all about meeting people who have experience actually working in the computing industry.

    It’s not about the university it’s about the effort you put in that determines how well you do.

    My answer is perhaps unhelpful to you though because I don’t know where you are from. In Scotland where I live I got to go to University for free, this may not be the case for you.

    Login or Signup to reply.
  7. I think you can use most of the other books for reference and just absorb Programming Pearls in its entirety. Doing so would make you better than 90% of the programmers I’ve ever met.

    Login or Signup to reply.
  8. Concrete Mathematics

    Login or Signup to reply.
  9. You should also have a book on general databases without going deep into the specifics of Oracle, MySQL, SQL Server, etc.

    I’d recommend: Database Systems: The Complete Book

    Login or Signup to reply.
  10. File Structures: An object oriented approach with C++

    A lot of good info about block devices and file structuring which you won’t find in any of the books you listed. It got a few critical reviews on Amazon because people didn’t like his code examples, but the point of the book is to teach the concepts, not give cut and paste code examples.

    Also make sure to get a book on compilers

    Login or Signup to reply.
  11. Many courses at top universities don’t use a textbook because none of the available books are good enough. (I was educated at Princeton and taught for 8 years at Harvard.) When someone recommends a book, ask if the book is really good or if it is just the best available in the field.

    For example, in compilers, I’m not a big fan of the ‘Dragon Book’; I never liked the approach, and the current edition is very outdated. I think you’d be better off with a book like Michael Scott’s Programming Language Pragmatics which although a bit scattershot is a lovely book to read. (I’ve never taught from it, so I can’t say what students think of it.) I don’t know of a really good book on compiler construction for the autodidact, although you might look at Cooper and Torczon’s Engineering a Compiler because it is up to date and written by two of the best compiler engineers in the business.

    Login or Signup to reply.
  12. Sorry, you can’t replace four years of university by reading a book or a number of books, no matter how good the books are. If you could, why would anyone go to university?

    Login or Signup to reply.
  13. First, I wouldn’t worry about it. But if you’d like a book to learn some of the abstract CS ideas, I’d recommend The Turing Omnibus or Theoretical Introduction to Programming.

    If I were deciding between hiring two programmers and neither had much experience, but one had a CS degree and the other didn’t, I’d hire the one with the CS degree. But when you get to comparing two programmers with a dozen years of experience, the degree hardly matters.

    Login or Signup to reply.
  14. MIT introduced their “OpenCourseWare” program several years ago. They put books/homework assignments/lectures on-line and so you can follow along with the MIT curriculum:

    http://web.mit.edu/catalogue/degre.engin.ch6.shtml

    Login or Signup to reply.
  15. I probably can’t suggest the best books, but there are several important subjects you are missing:

    • Statistics
    • Linear Algebra
    • Graph Theory and Discrete Math
    • Computer Graphics
    • Scientific Computing
    • Computer Networks
    • Software Engineering
    • Data Structures

    Some topics that might be considered more “optional” might be:

    • Cryptography
    • Image/Pattern processing
      and recognition
    • Bioinformatics
    • Internet Computing
    • Classical Physics
    Login or Signup to reply.
  16. The Elements of Computing Systems

    This book takes you from the basics of hardware design all the way to writing programs in object oriented languages. Using a simulator, you build a complete computer. Then you write an assembler, an operating system, a compiler (for an object oriented language compiled to run on a VM) and then a game written using that language.

    It’s a lot of work, but the authors have carefully made the task as simple as possible. You’ll have to work hard to work through this one, but it gives you a complete perspective of computer programming.

    You can view some sample chapters, as well as play with the simulators here.

    Highly recommended! (Even for CS graduates)

    Login or Signup to reply.
  17. Concepts, Techniques and Models of Computer Programming seems to have the broadest overview I’ve seen of the various higher-level language programming styles and techniques.

    Login or Signup to reply.
  18. The “Gang of Four” Design Patterns book. The Design Patterns course I took in college was probably the most beneficial class I’ve ever taken.

    Login or Signup to reply.
  19. Even i’m in the same plane: studying computer science in my free time after work;
    These are some of the books i have in my shelf right now

    1. Applying UML and patterns – Larman
    2. Introduction to algorithms – Cormen
    3. Discrete mathematics and its applications – Rosen
    4. Software Engineering
    5. Advanced Programming in the UNIX Environment

    Will udpate this list further as soon as i finish them… 🙂

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search