Easily one of the most interesting and engaging textbooks I've read in my entire life. I remember barely doing any work for my day job while I powered through this book for a couple weeks.
Also, another +1 to Operating Systems: Three Easy Pieces [2], which was mentioned in this thread. I read this one cover to cover.
Lastly, Statistical Rethinking [3] really did change the way I think about statistics.
[0] https://www.nand2tetris.org/
[1] https://www.amazon.com/Elements-Computing-Systems-second-Pri...
For me, the eye opening thing was that any n-dimensional body is a transformation of the n-dimensional standard cube. This brings some mathematical consequences I don't understand, but what's important for me is that equations get much easier for the standard cube transformations because your corners are just ones and zeros.
E. g. I wrote an app that "unbends" a book page from a photo so it looks flat. It can be done with a single but rather large transformation, or with a pair of transformations: to and from the standard cube, and each transformation is then much simpler than their composition. 15 years after I learned that trick and 10 years after I wrote an app, I wrote a book called Geometry for Programmers.
If not for Spivak, I would have drowned in equations, never written the app and would have had nothing to write a book about.
Kourik, _Drip Irrigation for Every Landscape and All Climates, 2nd Edition_ https://www.amazon.com/Drip-Irrigation-Every-Landscape-Clima...
Picked this up on a whim from the library. I have to say, I couldn't put it down, which was ... odd. It's concise, clear, well-ordered, and humorous at times. The author is humble and he's cross-referenced all his designs with an extensive bibliography.
I love the way it starts:
>Fractal geometry will make you see everything differently. There is a danger in reading further. You risk the loss of your childhood vision of clouds, forests, flowers, galaxies, leaves, feathers, rocks, mountains, torrents of water, carpet, bricks, and much else besides. Never again will your interpretation of these things be quite the same.
- Operating Systems: Three Easy Pieces ( https://pages.cs.wisc.edu/~remzi/OSTEP/)
- Designing Data Intensive Applications by Martin Kleppmann (https://dataintensive.net)
- Crafting Interpreters by Robert Nystrom (http://craftinginterpreters.com)
For context, Girard is a mathematical logician, philosopher, and co-discoverer of the type system System F (Haskell, ML, etc.). The book is a monograph on proof theory, and I was interested in learning more about affine and linear logic to deepen my understanding of Rust and other language ecosystems focused around the ability to explicitly model resources. However, along the way, I learned some other great things: (1) continental philosophy is deep and cool; (2) mathematical writing can be simultaneously rigorous, clear, and hilarious; and it reinforced (alongside Alain Connes's Noncommutative Geometry, and various French philosophers) (3) French academic writing is both frustratingly and delightfully idiosyncratic. Girard writes polemically about other aspects of knowledge, mathematics, etc., and there's heaps of dry humor and anecdotes throughout the book. It's a hard book to read even by pure mathematics standards--a topic not exactly known for being a brisk read--but it was worth it just for the side discoveries alone.
This will sound stupid, but that book was the first time I encountered the idea that a brain can just straight up miscalculate and make a mistake. No reason, no explanation. Just your thinking meat did the wrong thing.
Really great book. Very entertaining, and a pretty quick read. I'd recommend it to anybody.
https://www.amazon.com/Design-Everyday-Things-Revised-Expand...
Not exactly eye-opening, I sort of knew most of the content, but I don't remember ever having such joy while reading a technical book. Before or since.
I read the whole thing in a holiday (it's a big book, 500 pages or more IIRC), and I am a terrible reader. I was at a place with no internet, so that surely helped a lot.
A physically beautiful book, carefully crafted and written in a style that's entertaining and brilliantly separated into distinct "phases" such that each chapter adds substantial functionality and doesn't leave the codebase in a broken state. The attention to detail and meticulous documentation of the code is no small feat, and this book delivers like no other.
An absolute joy to work through and provides enough technical detail to provide a good foundation without having to slog through compiler textbooks.
Hands down my favorite programming/software related book.
I already had a strong programming background in Java, C, JavaScript and PHP. I thought an introductory programming class at the Master’s level would be a waste of time. Going through rigorous program design in Racket was a mind expanding experience. I was amazed how much programming we did before reaching the assignment statement (set!) otherwise the first thing taught in typical introductory programming courses.
The format of the class was a big part of the experience though: all assignments pair programmed and then presented to a panel by a randomly chosen member of the pair.
A close second would be PLAI: https://www.plai.org/. As experienced through the Brown University online version of the Design and Implementation of Programming Languages: https://cs.brown.edu/courses/info/csci1730/
It gave me a very thorough and engaging grounding in the various programming language idioms and constructs and how they actually work.
https://www.stevenstrogatz.com/books/nonlinear-dynamics-and-...
I literally read it cover to cover like a novel
It really made me reconsider the process and ultimate goals of building systems beyond housing, and how to make pattern languages for any system I build, especially software systems.
Demystifying all that was really helpful for my programming
Coincidentally to this question, he will live stream his final lecture on Monday: https://grinfeld.org/strang/
I was amazed reading that, as I wasn't aware he even lectured anymore. And after googling a bit and finding out he is already 88 years old, I was even more amazed. What an amazing human being, probably many thousands of people in the sciences and engineering owe quite a bit to his life's work.
2) Axler's book on linear algebra. That's when I started to think in terms of vectors as more than the typical "magnitude and direction" concept you are used to in UG physics. It took many years, but I'm finally beginning to apply this to more advanced topics.
3) Concurrency in Action, by Anthony Williams. The training in multithreading aside, that motivated a deeper interest in things like how caches worked or atomics for someone without a CS background like myself. I haven't finished Three Easy Pieces yet, to my eternal shame as I read this thread, but that might also be added on this list by the time I'm complete.
4) On the right-hemisphere side of the brain, books such as Christopher Clark's "Sleepwalkers", Jonathan Smele's treatment of the Russian Civil War, and Richard Thornton's "Odd Man Out" on the Korean War have been useful in teaching me to dig deeper than the standard narrative when looking at history. I'm looking forward to Christopher Goscha's book on Dien Bien Phu and James Howard-Johnston's recent drop on the great final war of classical antiquity in the 7th Century, in a similar vein: both are out, just haven't gotten the chance to digest them yet. Also, Plutarch's Parallel Lives. They aren't "history" in the sense that we know it, but they do teach you that, yes, the lives of famous ancient figures do have lessons that can and should apply to you.
I doubt it is a very effective way to learn the language (though the bizarre vocabulary it teaches has stuck with me), but it is extremely entertaining.
Lessons take the form of cartoon interpretations of ludicrous government reports (evaluating Comrade Borodin's management of the zoopark), academic studies (the surprising link between stealing pencils at work and smoking on the trolleybus), and propaganda literature.
I believe there were cassette tapes that accompanied it originally, though I've never found them anywhere.
The author discusses that often when conflict in communication arises between men/women, it resembles the same tensions in cross-cultural communication.
The author discusses that some communication styles are competitive (with a heavy lens around status and confrontation), other styles are cooperative (with a heavy emphasis on belonging, relatedness, similarities).
The author discusses example of such conflicts. -- One example was, when someone's complaining about a problem, a competitive-oriented mindset typically tries suggest a solution, whereas a related-orient mindset typically shows empathy. Crossing the wires: suggesting a solution might come across an uncaring, and expressing empathy might come across as unhelpful.
- SICP (Structure and Interpretation of Computer Programs), this one is controversial, but getting to the end and actually building the interpreter made me see that seemingly complex programs like compilers and interpreters are just other programs and quite similar to the ones that I was used to writing. The other effect of this on me was learning about powerful abstractions. It felt smooth to follow along and build the interpreter because the abstractions in the book followed a logical progression. I want the other complex programs I write to seem just as simple.
- Software Foundations: Logical Foundations. Writing programs as proofs was fascinating. It felt like mathematical mumbo jumbo before but actually trying it out removed the magic and it became more obvious how programs and formal proofs could go hand-in-hand. The impact of this book wasn't as generic as the other two. Maybe one benefit of seeing programs as proofs is that by trying to write programs that can be proved easily, we write programs that are actually simple to reason about and explain to someone else.
- Algorithms by S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani. -- compact book that goes from the basics to divide-and-conquer, graphs, dynamic programming, linear programming, NP-completeness, and Quantum.
Introduction to the Theory of Computation by Michael Sipser
The classic Hennessy and Patterson: Computer Architecture: A Quantitative Approach
Gray & Reuter: Transaction Processing: Concepts and Techniques
I also think the Gang of Four book always was and still is a tremendously useful read.
& SICP, natch.
The Dictator's Handbook: Why Bad Behavior is Almost Always Good Politics (by Bruce Bueno de Mesquita, Alastair Smith)
https://www.amazon.com/Dictators-Handbook-Behavior-Almost-Po...
After reading that paper I got the idea that it is not worth it to pursue a carrier in physics, because soon the AI will come and solve all the scientific problems in one second. I switched to programming and AI research. 41 year later, the idea turned out to be wrong, but at least I made good dough.
Software Tools by Kernighan and Plauger
The Psychology of Computer Programming by Weinberg
A cartoon-illustrated DIY Honda Civic repair book from the 80's I no longer remember the name of.
https://www.algorithmsilluminated.org/
The author even shares free video classes and other extra material.
I'm reading this right now and I'm quite surprised by how little I know about the most impactful data on human well-being. The writing is a little bit off sometimes but still worth looking at.
I also liked "Fooled by randomness" by Nassim Taleb. His other writings are good too but I would say this one is the most impactful.
I found the explanations for the geometry part excellent.
https://openlibrary.org/books/OL8012300M/Precalculus_mathema...
Introduces calculus using vectors from the second chapter. For me, it was a very natural and intuitive introduction to the topic.
I came across this Physics textbook in Junior year in High School.
Before reading this book, Physics, and Science in general, was merely "better subjects" for me, and tools to top the class, frontiers where I could excel, and by remembering formulas.
This is the first time when reading something was really, truly fun.
This was the first time I had the pleasure in learning.
My whole outlook towards learning changed. Learning should be fun. And this has served greatly in my life.
This book not only made Physics enjoyable, but instilled in me a lifelong attitude of fun in learning and expecting fun in learning.
Helped me to understand psychosis as a natural process, then when supported, results in a more sane, connected and healthier individual — and that that modern medical world is dramatically behind.
How to Solve It, by Georg Polya. A famous Hungarian mathematician. A text on general problem solving principles or techniques. A classic.
How to Solve It by Computer, by Dromey, an AU CS professor. In the same spirit as the Polya book, but applied to iteratively working out algorithms and pseudocode for common important programming problems.
The K&R C book. What to say.
The Unix Programming Environment, by Kernighan and Pike. Ditto.
Programming Pearls, and More Programming Pearls, by Jon Bentley. Among many other things, some clever / advanced uses of awk.
Writing Efficient Programs, also by Bentley. I had mentioned it on HN earlier, and someone replied saying they had used it in real life, and it was gold.
SQL for Professionals, by authors whose names I forget.
The Object Primer, by can't remember who, but good.
A Unix book by Kochan, IIRC.
Object-Oriented Software Construction, by Bertrand Meyer, creator of the Eiffel programming language.
A book on object-oriented analysis / design, can't remember the name, by Rebecca Wirfs-Brock (?) and others. Learned about CRC cards from it. Very cool concept and technique.
A book on Object-Oriented Design, by Grady Booch, from a time before he co-invented UML. Forget the exact name.
393 points|tomrod|1 year ago|522 comments
Took me off the hook of retail trading for the rest of my life.
This book shocked me with the idea of a universal computer:-)
"..there is really only one kind of computer .. all kinds of computers are alike in what they can and cannot do"
".. any computing device, whether it’s built of transistors, sticks and strings, or neurons, can be simulated by a universal computer."
".. making a computer think like a brain is just a matter of programming it correctly."
[1] https://www.amazon.com/Pattern-Stone-Computers-Science-Maste...
Other than that, basically all of them to some degree.
Later I read DPV and it was great, too.
* "An Introduction to Statistical Learning" by James, Witte, Hastie, and Tibshirani: possibly the best intro to the topic I've seen.
* "Introduction to Linear Algebra" by Gilbert Strang: possibly the best intro to the topic I've seen.
Also, here are some books that are not properly textbooks but could be used as such:
* "Robot: Mere Machine to Transcendent Mind" by Hans Moravec: remarkably prescient, in hindsight.
* "On the Origin of Species" by Charles Darwin: I was surprised at how readable it is.
* "The Selfish Gene" by Richard Dawkins: It made me question a lot about a lot.
* "The Better Angels of Our Nature" by Steven Pinker: I was shocked at the violence in our past.
* "Gödel, Escher, Bach" by Doug Hofstadter: an intellectual tour de force.
1. Mathematics and Plausible Reasoning by George Pólya
2. Probability Theory: The Logic of Science by E.T. Jaynes
At the time I thought it was satire, or at least tongue-in-cheek. But it's nowadays treated very seriously by neo-liberal nutters. I guess I was wrong.
It wasn't intentional as far as I know, but I have to admit that stuck in my head ever since as a really eye-opening metaphor. And the contents of the book were really new to me and even more eye-opening.
Wish I had the name of the book, sorry.
Engrossing, interesting, even funny. I read it as a teenager in a Spanish translation and couldn't put it away.
Griffiths - Electromagnetics Chambers - The Western Experience