HACKER Q&A
📣 eatonphil

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.


  👤 tephra Accepted Answer ✓
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


👤 DashAnimal
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


👤 jcynix
Programming Pearls and More Programming Pearls by Jon Bentley contain short articles "in the realm of insight and creativity." These articles appeared during the 80s in Communications of the ACM, but I think they are still mostly relevant and inspiring today.

The second edition from 2000 is online available at https://archive.org/details/ProgrammingPearls2ndEditionJonBe...


👤 carapace
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


👤 mcphage
The Little Book of Semaphores: https://greenteapress.com/semaphores/LittleBookOfSemaphores....

It's about multithreading synchronization issues like the Dining Philosopher's problem, and it's brief, interesting, and very readable.


👤 carapace
"The Algorithmic Beauty of Plants"

> ... is a book by Przemyslaw Prusinkiewicz and Aristid Lindenmayer. It's notable as it is the first comprehensive volume on the computer simulation of certain patterns in nature found in plant development (L-systems).

> The book is no longer in print but is available free online.

https://en.wikipedia.org/wiki/The_Algorithmic_Beauty_of_Plan...

http://algorithmicbotany.org/papers/#abop


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

👤 mycl
The Art of Prolog is now open access: https://mitpress.mit.edu/books/art-prolog-second-edition

You could think of it as "SICP for Prolog".


👤 rgrmrts
I recently added some books by Nils M Holms[0] to my library. Given some of the titles you mentioned, I think you might like them. I enjoy their writing style.

[0]: https://www.t3x.org/


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


👤 ai_ia
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/


👤 kinbiko
Code: The Hidden Language of Computer Hardware and Software https://en.wikipedia.org/wiki/Code:_The_Hidden_Language_of_C... comes to mind.

👤 mindcrime
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


👤 rglover
Not about software per se but The Systems Bible/Systemantics (original title) is a good read: https://www.amazon.com/SYSTEMANTICS-SYSTEMS-BIBLE-John-Gall-...


👤 Pelic4n
A list of this exact kind of books is presented here: https://blog.fogus.me/2015/04/27/six-works-of-computer-scien...

👤 scruple
I think these meet the criteria...

P. J. Plauger's "Programming on Purpose" series of essays.

Purely Functional Data Structures by Chris Okasaki.

I would put both of these alongside Bentley's "Programming Pearls" books which I saw mentioned in another comment.


👤 jrmiii
Based on the prompt, I feel like Why’s (Poignant) Guide to Ruby would qualify.

https://poignant.guide/


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


👤 adamkl
How about "The Land of Lisp"? [0]

It comes with a bonus music video! [1]

[0] http://landoflisp.com

[1] https://www.youtube.com/watch?v=HM1Zb3xmvMc


👤 linguae
For a great introduction to file systems, I highly recommend Practical File System Design with the Be File System by Dominic Giampaolo, creator of the Be File System who ended up moving to Apple and designed Spotlight, the file indexing and search system that was introduced in Mac OS X Tiger. It's very well written and you'll learn a lot. When I was hired in 2006 as a summer undergraduate research intern at an academic storage systems lab, I used this book to study up on file systems design and implementation. At the time I haven't even taken an operating systems class (I had just completed my freshman year), though I already knew a lot about operating systems by reading a lot of papers and books on Unix as well as writing C programs that used POSIX system calls. This book helped me a lot on my very first research project: exploring the use of SQLite as the basis of a non-hierarchical file system. That was a fun project that helped start my research career.

I still refer to this book from time to time to brush up on file system basics.


👤 thoughtFrame
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


👤 mixedCase
Type-Driven Development with Idris. If you haven't delved into dependent typing before, you absolutely owe it to yourself.

👤 guilhermeasg
The Feynman Lectures on Computation, Goedel's Proof, maybe Crafting Interpreters?

I've been following the development of http://browser.engineering/ and it's so much fun to go through. Highly recommended!

Mazes for Programmers is on my bookshelf. I've gone through the first few chapters coding along in Go and going on weird diversions. It's totally pointless, and I love it. There's also "The Ray Tracer Challenge" by the same author, which looks phenomenal.


👤 defaultcompany
Just today my wife asked me if we could get rid of "The Magic Garden, Explained", since I never use it. I told her it's just one of those books I like knowing is there even if I never crack it open again. Highly impractical in that it is so out of date (historical at this point) and from what I remember very well put together. It was so eye opening when I read it to see the inner workings of SVR4 and how every little bit of information had it's neat little place.

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


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


👤 sombremesa
Since you want impractical suggestions, you might enjoy “if Hemingway wrote JavaScript”

👤 megameter
J Paul Morrison "Flow-based Programming", while not really about documenting historical methods, got my head thinking about programming in terms of the pre-CPU paradigms of data processing with unit record machines, since that is what this style draws on most strongly.

Along the same lines, while not a book, videos and documents about debugging electromechanical pinballs and modular analog synthesizers provide great reference points for what digital systems could look like or strive to emulate, and physical engineering, woodworking and construction decenter the computer as the whole of the process while still being very logical and systematic. At the top level it's usually finding the right structural metaphor that dogs practical programming and gets it into a loop of endless data collection and reprocessing, so it helps to have other things in mind and try to discern ultimate aims.


👤 onemoresoop
Simply Scheme[0] as an intro to scheme and a good bridge for taking on SICP. It is available for free online. [0] https://people.eecs.berkeley.edu/~bh/ss-toc2.html

👤 markus_zhang
Is GEB considered to be one? It's not exactly CS but can be related, plus it was very well written.

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


👤 cloogshicer
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


👤 the_arun
“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.


👤 withinboredom
Not a book, but I truly enjoy this guy’s videos: https://youtu.be/h7apO7q16V0. I usually watch them while eating lunch. He does a truly fantastic job.

👤 kamaal
Turtle Geometry, is a very interesting book: https://mitpress.mit.edu/books/turtle-geometry

👤 kazinator
The psychology of Computer Programming, Gerald Weinberg, 1971.

👤 eatonphil
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).

👤 James112
I have been looking for this. https://my-estub.fyi/

👤 James112
Keep sharing such. https://fmcdealer.site/

👤 kingkonz1
deleted, misread the question