Follow me on Twitter for my latest adventures!

**30**Comments July 05, 2015

# My Top 100 Programming, Computer and Science Books: Part Four

Hey everyone! Here's part four of my 100 favorite programming, computer and science books. If you're just joining, please see part one, part two and part three for introduction.

This time I'm sharing my favorite books about fundamentals of computation, mathematical foundations of cryptography, type-directed functional programming, low level bit hacks, and visual thinking.

I love reading. The most fun part about reading a lot is that you never know how ideas will click together and where you'll need them. The more I read the more cross-linked ideas I've. Here's an interesting insight about how I approach reading. I rarely have time to read books cover to cover in one sitting as I'm so busy running Browserling. I split reading the whole book into reading 5 pages a day, put every reading session in calendar and a month or two later later I'm done with the book. Actually I apply this approach to getting anything done. Split it in parts. Get each part done separately. Merge results. Divide and conquer in real life (except with one execution branch). Just like I've split writing this article series five books at a time. It will take me 5 or 10 years to finish this series but the end result is going to be awesome and I'll get the whole series done.

If you're interested in this article series, you can subscribe to rss feed of my blog and follow me on twitter for updates.

I read a lot. This is my bookshelf.

Here are this week's five books.

## #16 Feynman Lectures on Computation

A timeless classic by Feynman. It's one of Feynman's least known books but it's also one of his best books, especially if you love computers, theory of computation and physics. In this book Feynman explores the fundamental ideas in theory of computation, information theory and physical limits of computing processes.

This book is geek's dream come true. It's a pleasure to read as it's written in Feynman's pedagogical writing style and is packed with so many topics. Feynman starts with basic logic gates, proceeds to finite state machines, Turing machines, and Halting problem. Then he discusses coding and information theory, Hamming codes, Shannon's theorem, and Huffman coding. He then explains reversible computation and thermodynamics of computing, entropy in thermodynamics and information theory and Maxwell's daemon. This chapter demonstrates a billiard ball computer, which is a reversible computer that can actually do calculations. Mind=blown. The book ends with a brief introduction to quantum computing (quantum computing was just starting when the book was written), and then explains physical aspects of computation.

Maxwell's Demon at work.

Author: Richard P. Feynman

## #17 A Course in Number Theory and Cryptography

I won't be sharing too many textbooks but this one needs attention. Written by Neal Koblitz, one of my favorite mathematicians and the inventor of elliptic curve cryptography. I love two of his books. This is one of them. I'll keep the other book secret until the next part of the series. I love Neal's book because he gets straight to the point and uses a smaller font in his books to pack more information on one page.

This is one of the first books I ever read on mathematical foundations of cryptography. It says graduate on the cover but don't listen to that. It's really an undergraduate level book. All you need to know is a bit of algebra. Book starts with a review of several key number theory topics, moves to finite fields, then to the public key cryptography, RSA, zero-knowledge proofs, then primality testing, factoring and finally elliptic curves.

This book follows definition-theorem-proof-example style that I like and it has many exercises with answers. If you like math but don't have experience with fundamentals of cryptography then this is the book to get to quickly get yourself up to speed. Fundamentals don't change and once you master what's in this book (shouldn't take more than a week or two if you're smart and dedicated), you'll be able to read any crypto text.

Asymptotic running time of quadratic sieve algorithm.

Author: Neal I. Koblitz.

## #18 The Little MLer

In parts one, two and three I listed The Little Schemer, The Seasoned Schemer, and The Reasoned Schemer, and now it's time for The Little MLer.

The Little MLer takes you on a new super fun adventure! This book teaches you programming with types, pattern matching, lambdas, recursion, type inference, schonfinkeling, exceptions, and modular programming with signatures, structures and functors (keep in mind functors mean different things in different languages). After the first few chapters your mind will bend. After the next few chapters your hat won't fit anymore. This book will really make you think. A willingness to use pen and paper to ensure understanding is absolutely necessary!

You'll truly appreciate this book only after having read the other books in the series. Get those first, and then read this book. And then read all the books again for full effect.

Chapter 7, Functions are people, too.

Here's my github repository with all the exercises and code examples from The Little MLer, including the hidden code for loyal Schemers: the-little-mler github repo. My repository also contains a very detailed review of all 10 chapters of the book.

I just can't hide my excitement for these books. In a few weeks another book in this series will be released called The Little Prover. The Little Prover will teach inductive proofs as a way to determine facts about computer programs. I can already imagine how fun this book is going to be. I haven't even seen it but this book has already made it to my favorite books because I've such high expectations for it. I preordered my copy already a month ago! Preorder yours too! I will in fact take a day off at Browserling for the first time in years just to read this book cover to cover in one sitting.

Authors: Matthias Felleisen and Daniel P. Friedman.

## #19 Hacker's Delight

Any book with the word "hacker" catches my attention. I probably have 10 books or more with this word in the title. This book is special because it was the first books with the word "hacker" that I ever got. The word "hacker" in this book is meant in original sense of an aficionado of computers - someone, who enjoys making computers do new things, and do old things in a new and clever way.

Hacker's Delight is another timeless classic. It's a collection of small programming tricks that the author, Harry Warren, software veteran with 50 years of experience, has come across in his career. These programming tricks exclusively revolve around low-level bithacks, creative arithmetic, and finding the most effective ways to count the number of 1 bits in a word, transposing bit matrices, permuting bits, reversing and rearranging bits and bytes, dividing by constants, and many more.

Some of the most interesting parts of the book include computing reminders without computing quotient, cyclic redundancy checking (CRC), Hamming SEC-DED algorithm and error correcting codes, unusual bases for number systems, such as bases -2 and -1+i, generating Hilbert curves, and formulas for generating primes, and a gallery of graphs of discrete functions.

Sheep and goats function SAG(x, m). Read pages 161-165 for explanation.

If you spend more than a week with this book you'll start dreaming in binary and hex, and your brain will get filled with tons of geeky magical numbers, such as, 0x40490FDB and 0x7F80000.

The author has also composed a poem about division, found on page 202 (1st Edition) and page 278 (2nd Edition):

I think that I shall never envision

An op unlovely as division.

An op whose answer must be guessed

And then, through multiply, assessed;

An op for which we dearly pay,

In cycles wasted every day.

Division code is often hairy;

Long division's downright scary.

The proofs can overtax your brain,

The ceiling and floor may drive you insane.

Good code to divide takes a Knuthian hero,

But even God can't divide by zero!

Author: Henry S. Warren, Jr.

## #20 Proofs Without Words: Exercises in Visual Thinking

Wow! When I found these books I immediately fell in love. I'm a visual thinker and I love visual proofs. These books have no words but have hundreds of proofs. One proof per page. I wish I had more time to work through all these proofs. Some of the proofs take a few seconds to understand but many others take hours. These books are the real vitamins for the brain.

Here are some of my favorite proofs from these books. Proof that sum of odd numbers always gives a perfect square:

1 + 3 + 5 + ... + (2n-1) = n^{2}.

Proof that 1/4 + 1/16 + 1/64 + ... = 1/3:

1/4 + (1/4)^{2} + (1/4)^{3} + ... = 1/3.

Proof that e^{π} > π^{e}:

e^{π} > π^{e}.

Author: Roger B. Nelsen.

## Until next time!

As always, I hope you liked these five book recommendations. Let me know in the comments what your favorite books are, subscribe to my blog, follow me on twitter, and until next time! I can't wait to publish the next part already.

## Comments

Nice to see more maths books. I wonder if "proofs from the book" is going to be one of your books...

Maybe... :)

there is no way in hell you read a 100 books on computer science in this life time?

what is your secret?

I've been on a mission to collect the most interesting programming/cs/physics/math/science books for more than 10 years so it's less than 10 books per year. I don't necessarily have read all of them entirely but I've spent a lot of time reading. I've probably over 1000 books (paper, electronic and printed pdfs http://i.imgur.com/vQy2Cfm.jpg) so 100 is just a small fraction of the books that I like. This is going to be one lengthy article series.

100 is really quite a big number :) but I like Hackers delight, I still need to read it again, only got 20% in first two reading :)

I've read like 50% of it. Some examples just take days to understand, don't have time to work through all of them.

Great list, thank you very much!

You're welcome. :)

Hi Peter,

Thanks for sharing. I really like this series. I also like books. Though my problem is I get little retention after reading hard technical books. I'm wondering if you can share your reading process? Ex. Do you take notes? How much exercise do you do? ... etc.

Thank you,

Yu Shih

I just stuff myself with tons of random information and don't worry too much about retention. Don't force yourself to remember stuff. Neurons fire in unexpected ways and you remember things when you need them.

I take a lot of notes. I'll take a photo some time soon. I've like 1000 pages of notes.

I do as many exercises as I can. :) But only if they're interesting. I don't force myself to do exercises.

Feynman and Hackers Delight are great! I didn't get all ticks from Hackers anyway;) But there is another not mentioned book: "Concepts Techniques and Models" this is really, truly awesome! I would recommend it as a great pleasure for everybody.

I haven't read that one so I won't be recommending it yet. It's on my toread list but like 5 years form now.

Hi, first: beautiful list! Do you have any networks book indication?

I've many favorite networking books. I'll try to post some in next few posts. For example, Network Warrior, TCP/IP Illustrated, Unix Network Programming, and others.

Quick question: at the top of this part of the series you mention you "put every reading session in calendar". Why is this? What's the benefit of doing it?

Thanks for the great tips! (especially the part about not being worried about retention)

I'm just planning my time effectively. I love todo lists. I talked about using a calendar in more details in my Fog Creek interview. Also it's sometimes useful to know what I was doing in that particular month.

Hey is fifth part coming out soon?

Of course! Working on that right now in fact. :)

Part 4 was a long time ago,

are you still pursuing this serie of post ?

When can we expect a part five ?

Sure. All the way up to part 20 and beyond.

This series is amazing! I can't wait to see part 5 :)

How is going the work for part 5? I really want to see the future episodes!

Sorry for the delay guys, been extremely busy with Browserling. I'm 30% done with part 5!

60% done with part 5, coming soon!

Awesome, thanks! Eagerly waiting for it!

I love this series! how's it going with part 5? Are you releasing it soon? (please say yeeees)

Sorry, had so much to do at Browserling. Part 5 is coming. :) 85% done. :)

Part 5 is out everyone! www.catonmat.net/blog/top-100-books-part-five/

"Proof that sum of odd numbers always gives a perfect square:"

Maybe you want to rephrase this.

1 is an odd number

5 is an odd number

1+5 -> 6

6 is not a perfect square.

Nice list though - very helpful

and I'm a little embarrassed to say it, but I don't see how the the first example "proves" that 1 + 3 + 5 .. = n * n .

oh well.

## Leave a new comment