Reading List: A Crash Course in Computer Science

Computer Science is no more about computers 
than astronomy is about telescopes.
-Edsger Dijkstra

I was skimming twitter yesterday and found a tweet by @KristinEIDE that started to make me think about the number of people actively working in software who have no background in Computer Science. Now, I have a Dijkstraesque definition of Computer Science, so lets add a new definition to the list:

    Computer Science = The study of the theoretical
    underpinnings of computation and information

After conversing with Kristin back and forth, I started putting together a list of recommended reading for her. I some how think this list might not be what she was looking for( Kristin, if you are looking for a list of books on how to program or software development, thats a different list and please let me knowif that’s what you’re looking for), but this is my list of books, that if you were starting from scratch i think would give you a pretty well rounded understanding of Computer Science.

The Basics

This is where most people wash out of a Computer Science Program. The fundamentals. Math. Formal Methods. Basic Logic. These things will set you up for books later on. I would suggest reading this section first and in order.

Structure and Interpretation of Computer Programs, Second Edition by Abelson, Sussman, and Sussman

Discrete Mathematics with Application by Epp

Introduction to the Theory of Computation by Sisper

Logic and Computer Architecture

Once you understand the logic behind software, its important to know how the computer executes that logic. None of these books require soldering, it can all be done on pen and paper. Again, read in order

Contemporary Logic Design by Katz

Computer Organization and Design: The Hardware/Software Interface by Patterson & Hennessy

Launguages and Compilers

Once you understand the principles of how languages work you can write software in ANY language.

Concepts of Programming Languages by Sebesta

Compilers: Principles, Techniques, and Tools by Aho,Lam,Sethi, & Ullman aka The Dragon Book

Operating Systems & Algorithms

Now that you understand how the computer works and the logic behind it, and how the languages you develop in work, its now easier to understand how to develop programs that are time and memory efficient( or at least understand the tradeoffs

Introduction to Algorithms by Cormen, Leiserson, Rivest, & Stein

The Algorithm Design Manual by Skiena

Elements of Distributed Computing by Garg

May 26, 2011