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.

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) = n2.

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.