Ask HN: Most interesting, mildly impractical, well-written books on software?

105 points by eatonphil ↗ HN
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 ] thread
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems https://www.amazon.com/Designing-Data-Intensive-Applications...

I 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 agree it's well written but for me that's way more on the side of required reading.

I'm thinking about books you don't _need_ to read but that are just really neat or advanced discussions.

(comment deleted)
I agree that this is a great book, but I think it fails the "impractical" test - DDIA is an immensely practical book that's basically required background reading if you work with distributed data systems.
Code: The Hidden Language of Computer Hardware and Software https://en.wikipedia.org/wiki/Code:_The_Hidden_Language_of_C... comes to mind.
Yes that's in the spirit! I personally did not enjoy it though because it tried to explain at a level that non-programmers could understand so it didn't exactly go fast enough. I got bored reading it so I wouldn't recommend it to other programmers.
I feel the opposite. I read it right after taking a computer organization class in college. Both Code and the course covered very similar topics. I really enjoyed and appreciated how clear and concise and friendly of a read it was even more after taking the course.
Based on the prompt, I feel like Why’s (Poignant) Guide to Ruby would qualify.

https://poignant.guide/

Weird! I like the originality. But does it actually go into depth or is it really just a tutorial to Ruby basics? If it's ultimately just a guide to Ruby basics I wouldn't include it here since I'm thinking of books with some serious technical depth/discussion.
Oh no, it went quite deep in areas (e.g. eigenclasses) but it was generally in service of some of its more esoteric aims, not a ground-covering tome geared towards complete understanding.
“Working Backwards: Insights, Stories, and Secrets from Inside Amazon” - https://www.amazon.com/dp/1250267595 by Amazon executives. Gives overview of Amazon’s core practices that made them successful.
I liked this book too! But not at all in the vein I'm talking about here. Thinking books that actually talk about software/programming in technical depth.
I loved that book I'd recommend it to everyone. It's more of an Information Theory book than a software development book.
deleted, misread the question
> And again, let's skip books that you might actually consider required reading for experienced developers.

It would be a totally fine suggestion but it's way too practical! Let's keep this thread off topic!

A list of this exact kind of books is presented here: https://blog.fogus.me/2015/04/27/six-works-of-computer-scien...
Awesome! Specifically not on my list already there's: Concepts, Techniques, and Models of Computer Programming; Smalltalk-80: The language and its implementation; The Architecture of Symbolic Computers and Project Oberon: The design of an operating system and compiler.

This reminds me Niklaus Wirth's Compiler Construction probably belongs in this thread.

> Project Oberon: The design of an operating system and compiler - Wirth’s magnum opus is the quintessential example of Computer Science alternative-history world-building.

hilarious

I thought Knuts Literate Programming book (https://www-cs-faculty.stanford.edu/~knuth/lp.html) was extremely interesting, the paper "the errors of TeX" which is a part of it is one of the more interesting papers I've read.

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 thought Knuts Literate Programming book (https://www-cs-faculty.stanford.edu/~knuth/lp.html) was extremely interesting, the paper "the errors of TeX" which is a part of it is one of the more interesting papers I've read.

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!

> 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.

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.

You've convinced me. I'll have to go for some of his books. Worst case I've got some intelligence-signaling paperweights.
> I haven't read any of Knuth's stuff because doesn't having 7 volumes kinda imply it can't possibly be well edited?

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

Just read his introduction to generating pseudo-random numbers or his sketch of a proof of Benfords law in Seminumerical Algorithms. Excellent stuff.

For moderately impractical, look at tape sorting in Sorting and Searching.

(comment deleted)
> I haven't read any of Knuth's stuff

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...

Donald Ervin Knuth's original book on TeX is a fascinating case study in how a computer science genius approached the task of typesetting algorithmically. What is easy to overlook is the beauty of the mental models he makes explicit; e.g., boxes, glue.
The whole Computers and Typesetting volume series is worth at least thumbing through at least once in life.
If you're interested in compilers and programming language design, I highly recommend Bob Nystrom's "Crafting Interpreters". One of the best written programming books I've read.

Free to read online:

http://craftinginterpreters.com/contents.html

It's been on my list to read for a while! I wonder if it really is one of the best books on interpreters or if it just hit the right spot of being free online and in a mainstream language (i.e. not Haskell, OCaml, or Scheme) and with code you could actually run whereas most PL _textbooks_ stay too abstract and don't walk you through building a working thing.
It is by far the best book (website content?) I read around compilers.

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

When I was learning Racket, I really liked Beautiful Racket[0] by Mathew Butterick. The book is accessible, well structured and the web design & typography is outstanding (IMHO). The author created a Racket Package (Pollen) and used it to write this book. I have special admiration for craftsmanship and this book is certainly one of them.

[0]: https://beautifulracket.com/

Learn you a Haskell for Great Good.

Not required reading but entertaining and only somewhat practical unless you happen to write Haskell for a living, in which case yeah - too bad.

Not quite in the vein, but I think Ted Nelson's "Computer Lib/Dream Machines" deserves mention (although it's partly history.)

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

> Not quite in the vein, but I think Ted Nelson's "Computer Lib/Dream Machines" deserves mention (although it's partly history.)

That does look very interesting!

Somewhat varied but I think some of these may fit your criteria.

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

Nice list! Anything with Hoare has my ear.
Here are the few I've really enjoyed.

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

> Hardware and Support Support for Virtualization

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!

There was one about Mockingbirds I read a few decades ago. I think this is the one:

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.

> 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!

Pretty much everything by Smullyan is interesting (probably all, but I haven't read it all yet).
What else have you read of his that you recommend (related or not to this thread)?
https://en.wikipedia.org/wiki/Raymond_Smullyan

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.

Since you want impractical suggestions, you might enjoy “if Hemingway wrote JavaScript”
Wow I love both Hemingway and JavaScript. I look forward to this book.
Maybe Clever Algorithms: Nature-Inspired Programming Recipes[1]. These techniques might not be useful to everybody, all the time, but they can be very handy in places.

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 requirements seem a bit unclear to me, but I'll toss a couple of titles into the ring:

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.

Added both to my personal lists! Thank you!
I'll add Shellcoder's Handbook to the list. Great intro to compiler/language flaws for programmers who don't know much about software security (like me).
The Psychology of Computer Programming by Gerald Weinberg. There's a silver anniversary edition, that's the one to get. It has the author's commentary framing each chapter where he reflects on the contents.
That looks very interesting. Thanks!
I don't know if mine qualify and how HN feels about self-promotion, but I can't resist the opportunity to mention my project.

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!

Self promotion in general is fine on HN but I think it's pretty hard to objectively say anything you write yourself is well written!
I fully agree with you. Quite the opposite actually, it's hard to know when what you write is good enough for others to read ;-)