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