Ask HN: Most interesting, mildly impractical, well-written books on software?
Books like nand2tetris, Let Over Lambda, Lisp in Small Pieces, Hacker's Delight are iconic. They aren't required reading to do well in software but they are extremely interesting and are fairly easy to read (they are well edited).
What other books are in this vein?
Due to popularity, feel free to skip The Littler Schemer/MLer, HtDP, SICP, On Lisp, Thinking in Forth. And let's skip history, biography books like Soul of a New Machine and Isaacson's Jobs.
And again, let's skip books that you might actually consider required reading for experienced developers.
103 comments
[ 15.5 ms ] story [ 2846 ms ] threadI surprisingly really enjoyed it. Well written and it pulled back the veil on a lot of concepts that I thought were too complex for me to understand/enjoy.
I'm thinking about books you don't _need_ to read but that are just really neat or advanced discussions.
https://poignant.guide/
It would be a totally fine suggestion but it's way too practical! Let's keep this thread off topic!
It's about multithreading synchronization issues like the Dining Philosopher's problem, and it's brief, interesting, and very readable.
This reminds me Niklaus Wirth's Compiler Construction probably belongs in this thread.
hilarious
Joe Armstrong used to recommend Algorithms + Data structures = Programs (https://en.wikipedia.org/wiki/Algorithms_%2B_Data_Structures...) but I haven't read it.
Okay I know you said no to the little schemer but you technically didn't mention The Reasoned Schemer which is just amazingly fun to go through and wrap your head around (https://mitpress.mit.edu/books/reasoned-schemer-second-editi...). Also see Will Byrds latest strangeloop keynote: https://www.youtube.com/watch?v=AffW-7ika0E
I haven't read any of Knuth's stuff because doesn't having 7 volumes kinda imply it can't possibly be well edited? Or maybe I really do just need to suck it up and read these books. I know it's not the same exact book but I took his style to be to generate encyclopedic tomes rather than interesting reading.
> Algorithms + Data structures = Programs
Oo a Wirth book. Those are always good.
> I know you said no to the little schemer but you technically didn't mention The Reasoned Schemer
Man you're cutting it close there!
Of the Knuth I've read (which includes [a tiny] _some_ of AoCP, lets not kid ourselves) I think he is a very good writer with great sense of humour between the academicness of some of his writing. Take the Surreal Numbers book for example.
That's a very bad assumption in this case. The contents of TAOCP are very well edited, just massive in scope and it's one man putting it all together. However, those aren't his only books. Concrete Mathematics is a completed text that expands on, in particular, the math in Chapter 1 of TAOCP. Literate Programming is a collection of papers on topics in programming, and is the first of eight such books. If you want interesting but mildly impractical, check out his Computers & Typesetting [0] which includes two books which are actually literate programs.
[0] https://www-cs-faculty.stanford.edu/~knuth/abcde.html
For moderately impractical, look at tape sorting in Sorting and Searching.
You're missing out on some of the best writing on any topic!
Not all Knuth's books are the same: The Art of Computer Programming (TAOCP) is his mangum opus, an ever-expanding encyclopedic knowledge fire-hose of various computer science topics. But the series of books that are simply "collected papers" makes it easy to focus on something much narrower. For impractical, you may want to start from Selected Papers on Fun and Games.
And then he has books like Surreal Numbers, which is written as a story of a couple discovering mathematical notation and deriving a whole system...
Free to read online:
http://craftinginterpreters.com/contents.html
It's extremely accessible, easy to follow and digest, plus it challenges you to experiment to see how things work by adding new features or breaking existing ones; fascinating stuff!
Now...if it wasn't the Java part and was fully dedicated in C it would be awesome! :-D
[0]: https://beautifulracket.com/
Not required reading but entertaining and only somewhat practical unless you happen to write Haskell for a living, in which case yeah - too bad.
https://computerlibbook.com/
https://en.wikipedia.org/wiki/Computer_Lib/Dream_Machines
https://archive.org/details/computer-lib-dream-machines
- - - -
Also "Scalable Internet Architectures" by Theo Schlossnagle
That does look very interesting!
Programming Erlang by Joe Armstrong
Communicating Sequential Processes by Hoare
The algorithmic beauty of plants by Prusinkiewicz, Lindenmayer
Network Performance Analysis Using the J Programming Language by Alan Holt
Relational Programming in miniKanren by William Byrd
Exercises in Programming Style by Cristina Videira Lopes
edit: also "SAT/SMT by example" by Dennis Yurichev
Inside the Machine: An Illustrated Introduction to Microprocessors and Computer Architecture
Explains how Microprocessors operate, going from operands and building up a lot of the execution tricks used, all whilst going through popular examples of CPUs (thee pentium chips, PowerPCs, etc), discussing their history, their specs, their capabilities, etc.
Hardware and Support Support for Virtualization
This one corners on useful, but it's short and it's free and unless you work in virtualization it probably won't be much use but I found it helpful in getting a grasp on what is actually happening.
------
Edit: Removed history books but, for anyone interested, the ones I listed previously were The Idea Factory, Valley of Genius, and Android: The Team that Built the Android OS
This whole series is truly awesome.
> Inside the Machine: An Illustrated Introduction to Microprocessors and Computer Architecture
I'm always looking for more like nand2tetris or Harris and Harris' book on comp arch to suggest. Thank you!
https://en.wikipedia.org/wiki/To_Mock_a_Mockingbird
Nothing explicit computery or even technical in there. Only all kinds of invented birds with specific weird behavior. You need to know nothing above what a 10 year old knows (and be interested in logic). And yet, when you're at the end, it turns out you know what 'Y combinator' actually means.
Sweet. I just learned about this book earlier today. It's on my list now!
Under "Logic Puzzles", through To Mock a Mockingbird (about to reread it because I read it years ago and a lot of things didn't stick at that point). I picked up his books to flesh out my home library (I'd read some of them back in college) and started rereading from the beginning. Have a notepad and pencil to help puzzle through the problems (or index cards, I have a few stuck in the books).
They span from riddles, to logic puzzles (the classic Knight & Knave puzzles), to computation-based puzzles with combinators.
> excerpted from This Book Needs No Title: A Budget of Living Paradoxes by Raymund Smullyan
https://www-cs-faculty.stanford.edu/~knuth/smullyan.html
Edit:
A couple of other suggestions.
Managing Gigabytes: Compressing and Indexing Documents and Images[2]
Mining of Massive Datasets[3]
Algorithm Design Manual[4]
Network Algorithmics[5]
Neural Network Design[6]
I think all of these fall into the category of "Won't be applicable to everyone, but can be good for those who need this kind of stuff."
[1]: https://github.com/clever-algorithms/CleverAlgorithms
[2]: https://people.eng.unimelb.edu.au/ammoffat/mg/
[3]: http://www.mmds.org/
[4]: https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...
[5]: https://www.amazon.com/Network-Algorithmics-Interdisciplinar...
[6]: https://hagan.okstate.edu/NNDesign.pdf
The Inmates Are Running the Asylum (Alan Cooper) makes the case that user interfaces can and should be easier to understand. I think in the years since this book was written, there has been much improvement in the UI world overall, but still worth thinking about.
Expert C Programming (Deep C Secrets) (Peter van der Linden) goes into some fascinating technical (and historical) tidbits related to C.
The CS Detective: https://nostarch.com/csdetective
Mazes for Programmers: http://www.mazesforprogrammers.com/
A Curious Moon: https://bigmachine.io/products/a-curious-moon/
xchg rax,rax: https://www.xorpd.net/pages/xchg_rax/snip_00.html
Yes!!!
Great list, thanks for sharing.
Would be a great suggestion in a generic good books list but this one is about books that are not pragmatic!
I'm working on a collection of 12 books about software development and IT: https://dev-concepts.dev/table-of-contents
I try not to get down to the level of atoms and molecules, but I'm going deep down the rabbit hole, and it's quite fun!