
My Top 100 Programming, Computer and Science Books: Part One - bootload
http://www.catonmat.net/blog/top-100-books-part-one/
======
harperlee
I'm a little skeptic; how many books has one to read to make a useful 100-book
recommendation? Most of these books need a lot of time to skim, read, reflect,
exercise, etc.

For example, surely he is going to recommend math books. It can be argued that
most of the value of a math book is in its end-of-chapter exercise set, and
that takes time. If discrete mathematics book A is more amenable to a 30
minute random page read and book B has a lot of insight in working through the
questions after chapter 7, how can he reliably evaluate that, across a lot of
published books in the area? And then jump to grammar, and then to programming
languages, and then to best practices, and repeat that?

I mean, I love these posts, because they give me a list of books to research
and "collect" in a wish list. But aren't they perpetuating the most cited
books? Won't everyone end up thinking that the dragon book is great?

I'd much rather have a comparison of five good books on a given theme, with
pros and cons.

EDIT: What would be great is, have several people at HN pick the subject area
that they dominate, select about five books, and do a cross analysis (like, A
is great for theory, B is a little bit weaker on that but a great
introduction, and C has awesome exercises that compliment them. If that's too
much, D is a very good summary of all three, without so much depth). That way
we could all have a great, broad, crowdsourced set of book recommendations.

~~~
pkrumins
Post author here - I've been collecting and researching science, math,
physics, programming books since 2001 or 2002, so that is close to 15 years of
book research. I'm really passionate about high quality books. I carefully
evaluate every book that I'm about to buy, seek reviews, online previews and
opinions. Then I make the purchase.

I did a degree in physics just for fun so I went through many math and physics
books, but I'm really most passionate about computers, software development
and programming so most of my recommendations are going to be on that.

I don't claim to have read every single book from cover to cover and worked
through every problem but I can make educated recommendations, and I've gone
through every book that I recommend. I've spent unreasonable amount of time
looking for new books that are not top cited. Some of my recommendations will
be top cited books but many won't be. Top cited books get my attention but
they're not always good.

Talking about dragon book I'm probably not going to recommend it. It's not
fun. You can't get things done with it in any reasonable amount of time. I've
actually been thinking of writing my own book on compilers where you get
things done quicker with less theory and it's fun. The problem with dragon
book is that people recommend it just because they've heard of it. Hardly
anyone has actually read it.

For the math books I'm not going to recommend standard text books much. My
recommendations are going to be books such as Counterexamples in Topology,
Counterexamples in Analysis. Those are super fun books to work through as
counterexamples warp your mind a little bit, and you get that tiny adrenaline
rush when you get it. Another example is To Mock a Mockingbird. It's not a
text book, it's not a top cited book, but it's so fun. Another example Street-
Fighting Mathematics.

For the physics books I'm also not going to recommend too many standard text
books. I also won't recommend popular science books as they're mostly stupid
and won't stretch your mind a little bit. They may blow your mind a little bit
but they won't stretch your mind. Example physics book recommendations include
Thermodynamics by Enrico Fermi, just beautiful explanations of the most the
basic thermodynamic concepts. Another example is Quantum Paradoxes by Yakir
Aharonov and Daniel Rohlich. I'll stop here as it's too many spoiler alerts.
:)

Let's take a look at the books that I recommended in the first post.

1\. The New Turing Omnibus - I read this book cover to cover in one evening.
It's such a fun read and introduced so many concepts. I enjoyed one of the
chapters about Busy Beaver Problem so much that I spent a few days
implementing Busy Beaver in several languages and wrote a program that
visualizes how the Beaver travels on the tape:
[http://www.catonmat.net/blog/busy-beaver/](http://www.catonmat.net/blog/busy-
beaver/)

2\. The Little Book of Semaphores - I read this book back in 2002 or 2003 when
it was just released in the 1st edition. I printed it for easier reading. I've
a huge stack of printed pdf books and scientific papers (I just snapped some
pics [http://i.imgur.com/bjPgxMD.jpg](http://i.imgur.com/bjPgxMD.jpg),
[http://i.imgur.com/QJFumGl.jpg](http://i.imgur.com/QJFumGl.jpg),
[http://i.imgur.com/FD2dx3L.jpg](http://i.imgur.com/FD2dx3L.jpg)) and I just
found the 1st editon of semaphores in my printed pdf stack
([http://i.imgur.com/qe9hgHM.jpg](http://i.imgur.com/qe9hgHM.jpg)). I worked
through most of the problems.

3\. Programming Pearls and More Programming Pearls - I just love the way Jon
Bentley writes. I don't know what else to say. These two books really teach
the basics of solving programming problems. It takes many years to master the
basics in practice but these books teach the basics well. I once wrote a blog
post ([http://www.catonmat.net/blog/three-beautiful-
quicksorts/](http://www.catonmat.net/blog/three-beautiful-quicksorts/)) about
Jon Bentley's chapter in Beautiful Code that he based on a chapter on quick
sort in Programming Pearls.

4\. The Little Schemer - I've gone through this book at least 5 times. Check
out this photo that I just took of all the notes that I've made while reading
it and the Seasoned/Reasoned Schemers
([http://i.imgur.com/aeLEQh8.jpg](http://i.imgur.com/aeLEQh8.jpg)). That is a
lot of hours spent with these books. I enjoyed this book a lot and I copied
out all the fun code examples and put them on GitHub
([https://github.com/pkrumins/the-little-
schemer](https://github.com/pkrumins/the-little-schemer)), and I also wrote a
blog post about deriving y-combinator based on one of the chapters in this
book [http://www.catonmat.net/blog/derivation-of-
ycombinator/](http://www.catonmat.net/blog/derivation-of-ycombinator/).

5a. The Elements of Style - I first heard about this book in 2006 or so when I
got serious about becoming a great writer, started blogging and wanted to
improve my communication skills. It's the most cited book and I gave in and
bought it. It's really good because you can read it in a few hours and learn a
lot. I follow many of the rules and guidelines in this book. I'm also going to
recommend On Writing Well. Spoilers.

5b. The Elements of Programming Style - The Elements of Style + Brian
Kernighan.

I wouldn't recommend a book that I don't trust is really well written. That
just wouldn't be me. I stand behind my recommendations.

~~~
harperlee
Hey, thank you for the thorough response.

Sorry, I was just trying to send the message of "perhaps we should take these
recommendations with a grain of salt". But we should be doing that with
everything, don't we? All in all, any of your book recommendations that I can
reasonably evaluate for having read the book myself, they all seem quite good.

Mind you, I'm a complete stranger commenting on your free job without a lot of
care :) and written words lose the tone easily. Perhaps it's me, but I read
your justifications and I'm afraid my comment might have struck you the wrong
chord. I didn't mean to bother you, and I'm sorry if that's the case.

I hope I don't miss the subsequent posts of the list.

~~~
pkrumins
Np. I just thought I'd share more insight about my passion. That comment came
into existence by itself. :)

------
apricot
One idiosyncratic list coming up.

Kernighan and Plauger, _Software Tools_ , had a very big influence on my
coding style and appreciation for the Unix Way.

If you want to learn more about Lisp macros, the exuberant book _Let Over
Lambda_ by Doug Hoyte is a fun read.

The best book to learn how to implement Forth-like languages is _Threaded
Interpretive Languages_ by R. Loelige. Dated and long out of print, but worth
getting. Plus, as a Byte Book, it has one of those classic Byte drawings on
the cover.

T is to Scheme what Scheme is to Lisp (kind of), and _The T Programming
Language_ by Jonathan Rees is the kind of book that cleanses your soul.

Donald Knuth's _The Stanford Graphbase_ contains literate programs for several
elegant graph algorithms.

Jim Sather's _Understanding the Apple IIe_ is a terrific description of a
computer from the bottom up, and shows you how deep knowledge of the hardware
enables you to write software that breaks all the rules (viz. the recent demo
that gets 1024 colors on an IBM CGA adapter).

On a more personal note, _Puzzled Programmers_ by Michael Wiesenberg was a
book published by Microsoft Press in the late 1980s. It contained 15 problems
reminiscent of what you can find nowadays on Project Euler -- math problems
for computer solution, but where brute force search is not enough. I spent
many hours on them when I was in high school.

~~~
dman
Do you mean the book on T by Stephen Slade? If Jonathan Rees did indeed write
a book about it then can you share a pointer about it?

~~~
apricot
Sorry to get your hopes up, I meant the Stephen Slade book.

~~~
calibraxis
Ouch, that book doesn't seem easy to obtain through the usual online
sources...

~~~
iak8god
Wow you're not kidding. Out of print, no PDFs anywhere. I've placed an inter-
library loan request, as my soul could use some cleansing.

------
nextos
My favorite one is Concepts, Techniques, and Models of Computer Programming:

[https://www.info.ucl.ac.be/~pvr/book](https://www.info.ucl.ac.be/~pvr/book)

I believe it's a terrific sequel to SICP, despite not using Lisp. The only
little disappointment with the book is when they use Java as a canonical OO
language to compare Oz/Mozart with. They should have used Smalltalk!

As a prequel to SICP, I love The Little Schemer.

I love The Art of Prolog too. As a modern successor to Prolog,
[https://probmods.org/](https://probmods.org/) is awesome.

If we talk about theoretical CS,
[http://en.wikipedia.org/wiki/Computers_and_Intractability](http://en.wikipedia.org/wiki/Computers_and_Intractability)
is terrific. Very short and elegant.

~~~
krat0sprakhar
Is it possible to follow along The Little Schemer with Clojure? I'm afraid I
don't know any other lisp.

~~~
rdc12
I believe I have seen some of The Little Schemer code translated into Clojure,
and most of that looked pretty trivial changes.

But I doubt you would gain anything from doing that. If you know Clojure you
can pick up what you need of Scheme (new concepts get added as you progress
throu the book) almost immediately. It really is not a book on Scheme, but of
thinking about problems in a recursive way.

Some of the TCO stuff, may not translate well either. IMHO it would be
distraction from what the book is about.

------
swanson
I've love to see a condensed list that focuses on the top books for a given
context. The best 2-3 books to read when you are interested in learning how to
program, the best 2-3 books for a new developer in his/her first professional
job, the best 2-3 books for someone looking to move into a senior technical
role, the best 2-3 books for moving from web to mobile, etc.

~~~
arthurjj
Doing that for each "specialty" would be amazing, but necessarily a team
effort. Moving from desktop development to web development a few years ago was
an interesting experience for me.

I actually wrote up a list for "college hires" last year if you need one
[https://medium.com/@the_ajohnston/three-books-developers-
sho...](https://medium.com/@the_ajohnston/three-books-developers-should-read-
when-they-graduate-5ee228251dd2)

~~~
swanson
Absolutely, thanks for the list. I'll share my own personal one for that same
context :)

[http://www.mdswanson.com/blog/2013/05/31/summer-reading-
list...](http://www.mdswanson.com/blog/2013/05/31/summer-reading-list.html)

------
Elrac
I'd like to offer a partial thumbs-down to the one non-programming book
suggestion: Strunk & White's _Elements of Style_ has been criticized as, well,
not the best possible advice, by G.K. Pullum, here:
[http://chronicle.com/article/50-Years-of-Stupid-
Grammar/2549...](http://chronicle.com/article/50-Years-of-Stupid-
Grammar/25497)

I think many of us could do worse than to follow S&W's writing advice, but I
also think the book is given more reverence than it's worth, maybe just
because it's been a tradition in English education.

~~~
drb311
There are much better books that do a similar job. Try out Writing Tools by
Roy Peter Clark and A Sense of Style by Steven Pinker.

------
softbuilder
I did a similar post ages ago[1], although less ambitious at only 7 books.
I've since read the Turing Omnibus and The Little Schemer and I was glad to
see them on the list. I wish I'd had them when I was much younger. In addition
to Programming Pearls I would also add "Software Tools" by Kernighan and
Plauger.

I never read The Elements of Programming Style but very early in my career I
chanced into the single-page excerpt "Brian Kernighan's Programming Style
Tips"[2] which has probably been the single most influential document on
practical programming I've ever read.

Edit: Almost forgot, Programming Erlang by Joe Armstrong was also a landmark
book for me, and if I were to redo my list I'd certainly add it.

[1]
[http://www.youell.com/matt/writing/?p=4](http://www.youell.com/matt/writing/?p=4)
[2]
[http://ellard.org/dan/www/libsq/ref/style.html](http://ellard.org/dan/www/libsq/ref/style.html)

~~~
hga
I read _The Elements of Programming Style_ early in my career, and in the
context of the early '80s I remember it to be superb. And fairly short.

------
MarkG509
"Hacker's Delight" by Henry J. (Hank) Warren. Despite the unfortunate
title[0], it teaches (with code) numerous tricks, algorithms, ideas, that
really improve performance and function of programs.

[0] not "hackers" as in those who try to crack into systems, but rather as in
those who enjoy writing professional, clever, and efficient code.

~~~
thrownaway2424
Get the 2nd edition, of course. It's three times as long.

I don't know if I've ever really learned anything from Hacker's Delight,
though. It's more of a cookbook. If I learned anything it's that a lot of dead
CPU architectures were hard to program.

------
flurdy
Asking about favourite computer books is also something I often do in
interviews, whether I am the interviewer or interviewee. Partly to find out
about if we share a common perception of relevant books but also to find out
about books I am not aware of or to get a new insight into.

So I very much like this post and found several books to add to my reading
list. :)

I did once blog about whether teams/departments should have a required reading
list [http://blog.flurdy.com/2011/04/required-
reading.html](http://blog.flurdy.com/2011/04/required-reading.html) . (Note
that post was 4 years ago so the suggested list would have quite a few tweaks
and was aimed at devs in my then niche)

~~~
EnderMB
I've done this before, and nearly every time the person has said to me "Oh, I
haven't read a programming book since university. I do all my reading online".

It seems to be a common thing, which is a shame. I've always been fond of
books, and unless you're pirating some classic texts and reading them as PDF's
on your computer it feels like people miss out on a lot of quality content.

How often do you come across this? Admittedly, when I've been directly
involved in interviewing this has almost always been for people under 25
coming into a junior level role.

~~~
flurdy
I know but different people learn and keep up to date in different ways (or
not at all) so for me it is not a yes/no criteria on whether they get
hired/approved by me. Just another piece of data to evaluate on.

And similarly unfortunately the majority I encounter don't read many if any
books. If people only read books then that is perhaps an issue as well. And
reading a specific technical book about a specific software version is also
usually a waste of time in my opinion. Read howtos online and experiment away
instead.

I do tend to interview more mid-to-senior level of which how they keep up to
date is more relevant. I am not expecting new grads to have read the entire
backlog of Pragmatic bookshelf if any. Nor am I expecting anyone to have read
the bricks (gang of four, Fowler's application patterns etc) cover to cover.
But for example seniors not having heard of these bricks or the Clean Code and
Pragmatic Programmer books is a red flag. If they know of them but disagree
with them then that is fine, but not heard of them at all is weird.

In a previous job they sent me Clean Code and a couple of other books in the
post to read a few weeks before I started. Which was a good sign that I was
joining the right company, even if I had already read them all previously :)

------
farresito
The Little Schemer is a very fun book! If you are thinking about learning
Lisp, go for it. At least, give it a try. It's quite different from most books
out there, but it's very good nonetheless. I read it last year while in the
train and it's quite entertaining.

EDIT: I forgot to explain why it's such a good book: it teaches you how to
think in Lisp. It doesn't focus at all in the syntax.

~~~
jzig
As someone who has never touched Lisp, why is thinking in Lisp good?

~~~
farresito
Functional programming/paradigm. It's a pretty nice language to learn it (my
intention was to learn Clojure, but I read this book first so that I had an
small base).

~~~
sampo
But today, one can learn functional programming also with other languages than
Lisp.

~~~
cgag
The book isn't really about lisp, it's about thinking in terms of higher order
functions and recursion, which apply in any functional language.

~~~
hga
The same people have also written _The Little MLer_
([http://www.amazon.com/The-Little-MLer-Matthias-
Felleisen/dp/...](http://www.amazon.com/The-Little-MLer-Matthias-
Felleisen/dp/026256114X)).

~~~
rdc12
Which is also brilliant, but is more about thinking in terms of types (more
advanced type systems, then C/C++/Java etc).

Should make a good warm up for learning the likes of OCaml and Haskell

~~~
peteretep
Almost all the exercises can be done in Haskell with a small amount of
syntactic adjustment

------
walterbell
Free online: _Programmers at Work_ , by Susan Lammers (1986),
[https://programmersatwork.wordpress.com/about/](https://programmersatwork.wordpress.com/about/)
interviews the creators of dBase, PacMan, Postscript, Mac OS, DOS, Word,
VisiCalc and more.

------
jplahn
I'm so glad to see The Little Book of Semaphores on here, especially in the
top 5. I didn't expect to see it on a list like this, but I found it to be
immensely helpful. In my OS class last semester, my prof mentioned it almost
in passing, so I don't think many people paid much attention to it, but it
solidified my understanding of threading immensely, especially in anticipation
of the thread pool we had to write.

Also awesome to see The Little Schemer on here. That was also a book that was
recommended in passing in my comparative language class and again I don't
think people paid much attention to it. But I learned a lot from it as well.

I'm looking forward to following this list.

------
joslin01
I got excited for 100 books, then I saw "Part one" and got excited for 20-50
then I got to the article and was like 5!? Well, regardless, thanks for
recommendations and looking forward to the next 19 parts.

------
SonicSoul
Another vote:

 _Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming
Languages_

for people like me who spent most of their career with 1-2 languages this is
very eye opening.

------
pedrorijo91
If you didn't read yet I would totally recommend these two:

\- 7 languages in 7 weeks, as it makes you know and understand decisions about
inclusion/exclusion of some language features, for instance why/when to use
dynamic typed languages vs statically typed \- Programming Language
Pragmatics, 'the bible' for those looking for understand programming language
implementation

~~~
rdc12
I personally didn't like the 7 languages book, to me it was a bit too shallow
flavour of languages. The only take away from the book I had, was that IO
looked to be a very sweet language to play with.

It was a textbook for a class I had on programming languages thou, and the
class ended up not being the stuff I wanted to learn about so that may cloud
my judgement.

------
spitfire
Where's Knuth? Surely you want to focus on the timeless concepts, they'll
never let you down.

~~~
jayvanguard
It really isn't a good read. I own the first three volumes. They are really
just useful as a relatively comprehensive reference text explaining a lot of
base CS algorithms and structures.

------
amitizle
Please hurry and upload part two, as i'm about to finish every book in the
first part.

------
cconroy
Has anyone read the _Art of Prolog_ \-- i have it collecting dust but when I
bought it I was intrigued?

------
sireat
Good start to the list, but pkrumins does that mean there are going to be 19
more posts?

------
ra1n85
No Richard Stevens?

Blasphemy.

------
yegor256a
Here is my 16 favorite ones: [http://www.yegor256.com/2015/04/22/favorite-
software-books.h...](http://www.yegor256.com/2015/04/22/favorite-software-
books.html)

