HACKER Q&A
📣 asoli

What are some of the best well-written books on computer science?


I'm curious if you have a favorite CS book specifically for the way it was written and how the author communicated their ideas.


  👤 Anon84 Accepted Answer ✓
Feynmans lectures on computer science: https://www.amazon.com/gp/product/B07FJ6RRK7/ref=as_li_tl?ie...

You might be familiar with Feynman's Lectures on Physics, but his lectures on Computation (based on a class he taught and his work in 'Connection Machine') aren't any less amazing. Through this short book, Feynman guides us through the concept of computation and the van Neumann architecture in his unique style, from logic functions, to Turing machines, coding and even quantum computers. It will give you a unique appreciation of the finer points in which computers are "Dumb as hell but go like mad" so that you can better squeeze every bit of performance out of your code.


👤 jes
I also enjoyed the green "Dragon Book" [1] on compilers, by Aho and Ullman. I think it must have been thirty years ago, or more, though.

[1] https://www.amazon.com/Principles-Compiler-Addison-Wesley-in...


👤 h2odragon
Knuth's "art of Computer Programming", especially and specifically for the way it communicates things. I'm quite weak when it comes to reading advanced maths, but the code communicated to me, and taught me most of what i ever learned about how to read the weird squiggles.

👤 jes
The Structure and Interpretation of Computer Programs, by Abelson and Sussman.

👤 muzani
The Pragmatic Programmer is still the standard handbook of best engineering practices.

Test Driven Development by Example, by Kent Beck is a great book, and it's aged well too. There's a lot of good 3rd party material on most concepts, but for TDD the first source is still the best.


👤 btschaegg
Interpreting "CS books" to include books about programming languages, I'd like to add The AWK Programming Language [1] to the list.

This is a style of book I'd like to see for many other languages and paradigms: It doesn't assume that it has to teach you the basics. You know what a variable is, you know how loops work. You're reading it to learn AWK, not to learn programming basics. And it's remarkably readable.

I followed it up by reading the O'Reilly book on sed and awk in order to learn some sed basics, too, and while it is by no means a bad book, it just doesn't reach the same level of understandable writing.

I've also bought and read Real World Cryptography [2] in its early access phase, and I like it for much of the same reasons. It doesn't drown you in math -- it assumes you'd like a solid foundational understanding of up to date cryptography and practice oriented explanation of its concepts and focuses on that.

[1]: https://archive.org/details/pdfy-MgN0H1joIoDVoIC7

[2]: https://www.manning.com/books/real-world-cryptography


👤 skyde
Great book on distributed system:

Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems Book by Martin Kleppmann


👤 mek6800d2
Bertrand Meyer's Object-Oriented Software Construction. A classic, written in an engaging style that makes the book very readable and conveys important ideas about programming and software engineering (and object-oriented thinking too!). The first edition was perfect. The second edition exploded in size and I never read the full book; I dipped in and read several sections and they were pure Bertrand Meyer, so I have no doubt the second edition is as good as the first, just longer. The book was published c. 1990, but it's a classic for good reason and would be just as useful now as it was then.

Also, as jes noted in another comment, SICP (Structure and Interpretation of Computer Programs) is a must-have and must-read.


👤 anthk
The C Programming Language, 2nd edition.

Introduction To Operating System Abstractions Using Plan9 From Bell Labs.

https://doc.cat-v.org/plan_9/9.intro.pdf

Today you can just use 9front.


👤 8589934591
If the person has some good-ish math background, then a good intro book for CS would be Sedgewick/Kayne's https://introcs.cs.princeton.edu/java/home/. The exposition is succinct.

If math is not a strong suit then https://htdp.org/ and https://dcic-world.org/ are good books to take up. The exposition is really good.


👤 arduinomancer
The Annotated Turing

I had never taken a theory of computation class so reading this book was a good casual starting point to understand how mathematical logic and computing are related

Plus there’s some good history bits in there too


👤 blondin
not sure i know (or remember) any book that covers the entire field. but i never miss a chance to tell people about "the c programming language" by k&r.

one of a kind and, for some of us, the best book on programming ever written. i would love to see it updated to modern c.


👤 truly
My all-time favorite is not a exactly a book, but a tutorial on compiler construction: https://compilers.iecc.com/crenshaw/

It is dated in its choice of assembly, but I really enjoyed this style of crystal-clear explanations when I was a young kid learning how to program.

Other extremely well-written books include TaPL (Types and Programming Language), by Benjamin Pierce: https://www.cis.upenn.edu/~bcpierce/tapl/.

Benjamin Pierce's writing style is very good and you can enjoy it in the free series on Software Foundations (using a theorem prover like Coq to develop programs): https://softwarefoundations.cis.upenn.edu/.


👤 jhkoenig
The C programming Language By Brian W. Kernighan and Dennis M. Ritchie.

It will change your life. Or at least your approach to programming.


👤 amai
Sedgwick: Algorithms, see https://algs4.cs.princeton.edu/home/ It comes without confusing academic abstractions, just with useful information and actually executable example code.

👤 pyb
I have read and recommend Andy Tanenbaum's book on operating systems. He's also written a book on networking and one on distributed systems.

👤 davidgould
Project Oberon: The Design of an Operating System and Compiler, by Niklaus Wirth and Jurg Gutknecht.

Oberon is a beautifully simple language and the Oberon System was amazingly creative and fresh. The ideas and code in the book are a model of clear thinking and exposition.


👤 cpach
The Little Schemer. A joy to work through. Great for learning recursion and programming.

👤 dkobia
Design Patterns: Elements of Reusable Object-Oriented Software by the Gang of Four.

👤 rg111
If you are really interested, navigate to r/computerscience and r/compsci, and then search "books". That's it.

You are going to find plethora of really good books that users have personally found helpful, great, or simply more understandable.

Give it a go.


👤 haeberli
N. Wirth: Algorithms + Data Structures = Programs

👤 jleyank
Mythical Man Month, 2nd edition but either work. Also Code Complete. Honestly, neither of these refer to Computer Science in the way that other cited books do but they are pertinent to the application of it via software.

👤 allenleein
1. SICP

2. How to Design Programs

3. Software Design for Flexibility: How to Avoid Programming Yourself Into a Corner


👤 knowingpark
Starting Forth by Leo Brodie

👤 jacke
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems by Martin Kleppmann https://www.amazon.com/Designing-Data-Intensive-Applications...

You can learn a lot of algorithms. It's useless unless you start to create architecture and use them in practice.


👤 cafard
Gelertner and Jaganathan's Programming Linguistics is very well written and most interesting.

Hennessey and Patterson's Computer Architecture: A Quantitative Approach is excellent.

I also agree with the recommendations elsewhere on the list of Andrew Tanenbaum's book on operating systems, and of Jon Bentley's Programming Pearls books.


👤 noloblo
programming pearls jon bentley

👤 oftenwrong
Sipser's Introduction to the Theory of Computation

👤 jb1991
The structure and interpretation of computer programs.