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.
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.
This book is recommended (and heavily upvoted) on every such thread about good software books but I would very much doubt more than 5% have read more than a few chapters, probably less than 1% have read one book in the series and probably less than 0.1% have read the entire series.
This is one of those series that everyone thinks they should read but few actually do.
I recently started trying to understand non-cryptographic hash functions and pretty much every text out there ends up referencing Knuth without really explaining it deeply. Hashing (not hash tables, just hashing) is a subject that pretty much every book seems to ignore and just go with the "here, use this hashing thing because Knuth said so [TAOCP volume 3]". I had to buy it.
That said, I also read other chapters when I had the need to understand specific things.
That one is often recommended, but when I checked it out some time ago (read a few pages from different parts IIRC), I didn't get the point of the book for someone who isn't a beginner. What's supposed to be great about it?
I like technical nitty-gritty as well as more abstract or "human factors" material but somehow it seemed to be none of these.
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.
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.
I also believe this is why the Awk book is so thin, and easy to hold. It gets right to the point teaching the language itself. I wish more books were the size of that book.
I work at a very large software company (which you know of) that has a corporate O'Reilly subscription and it was mentioned recently that DDIA was the most read book of the org.
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.
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.
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
Great book! I went trough it to better understand Turing's paper. The annotations in it and remarks of Turing's bugs help clarify a bunch of stuff. I would bet that the original reviewers of the paper had no idea what Turing what writing about or where to lazy to check it and to find the things that Petzold notes. I still remember the chapter where turing's development of maths in the paper resembles Brouwer's intuitionism.
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.
What do you like about K&R so much? I was excited to dive into it during the C systems programming class I took in school, and it was fine, but I didn’t understand the hype. And I loved learning C / usually care about things like this.
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/.
Sedgwick: Algorithms, see https://algs4.cs.princeton.edu/home/
It comes without confusing academic abstractions, just with useful information and actually executable example code.
I used to prefer this over the Cormen book (Introduction to Algorithms). Although in some tests the questions were taken directly from the Cormen book, so there was taht.
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.
[+] [-] Anon84|4 years ago|reply
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.
[+] [-] regitempus|4 years ago|reply
[+] [-] jes|4 years ago|reply
[1] https://www.amazon.com/Principles-Compiler-Addison-Wesley-in...
[+] [-] skyde|4 years ago|reply
[+] [-] h2odragon|4 years ago|reply
[+] [-] avl999|4 years ago|reply
This is one of those series that everyone thinks they should read but few actually do.
[+] [-] dyingkneepad|4 years ago|reply
That said, I also read other chapters when I had the need to understand specific things.
[+] [-] jes|4 years ago|reply
[+] [-] ahartmetz|4 years ago|reply
I like technical nitty-gritty as well as more abstract or "human factors" material but somehow it seemed to be none of these.
[+] [-] muzani|4 years ago|reply
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|4 years ago|reply
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
[+] [-] gompertz|4 years ago|reply
[+] [-] skyde|4 years ago|reply
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems Book by Martin Kleppmann
[+] [-] jarpschop|4 years ago|reply
[+] [-] mek6800d2|4 years ago|reply
Also, as jes noted in another comment, SICP (Structure and Interpretation of Computer Programs) is a must-have and must-read.
[+] [-] anthk|4 years ago|reply
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|4 years ago|reply
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.
[+] [-] snickersnee11|4 years ago|reply
[+] [-] arduinomancer|4 years ago|reply
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
[+] [-] jarpschop|4 years ago|reply
[+] [-] blondin|4 years ago|reply
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.
[+] [-] wallscratch|4 years ago|reply
[+] [-] tbrock|4 years ago|reply
[+] [-] truly|4 years ago|reply
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|4 years ago|reply
It will change your life. Or at least your approach to programming.
[+] [-] amai|4 years ago|reply
[+] [-] dyingkneepad|4 years ago|reply
[+] [-] pyb|4 years ago|reply
[+] [-] davidgould|4 years ago|reply
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|4 years ago|reply
[+] [-] dkobia|4 years ago|reply
[+] [-] skyde|4 years ago|reply
most colleges student don’t really understand when to use each pattern after reading the book.
[+] [-] rg111|4 years ago|reply
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.