**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 a year or two 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.

Very exciting news at Browserling - we just launched multiple Windows platforms! You can now cross-browser test your apps in all the browsers on Windows 8, Windows 7, Windows Vista and Windows XP.

You can now cross-browser test in Windows 8, 7, Vista and XP!

Browserling now also has a new browser sharing scheme:

browserling.com/browse/Os/Os_Version/Browser/Version/Url

For example, here's a URL to my blog in Internet Explorer 9 on Windows Vista:

browserling.com/browse/win/vista/ie/9/http://www.catonmat.net

Browserling's Live API supports multiple OS platforms too via `setPlatformName()`

and `setPlatformVersion()`

functions.

Next we're adding Windows 8.1 and Androids. Shortly after that OSX, iOS, and Linux browsers.

Browserling is an interactive cross-browser testing service. It lets you test your website in older Internet Explorers such as IE 6, IE 7, IE 8, IE 9, IE 10, and Firefox, Chrome, Opera and Safari!

For updates follow @browserling and until next time!

This blog post is a repost of the original announcement on Browserling's cross-browser testing blog: Browserling now supports multiple operating systems.

**5**Comments June 02, 2015

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

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

This time I'll be sharing my favorite books about Unix, logic programming, thermodynamics, and mathematical foundations of computer science.

In one of the next posts I'll create a neat pdf with all the books listed so far and keep updating it as I write more posts.

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

My bookshelf.

Here are this week's five books.

## #11 The Unix Haters Handbook (free pdf)

This book is true Unix classic. If you know and love Unix, you'll love this book. This is one of the first books I ever read and I love it. I'm a huge fan of Unix and computing history and this book taught me tons of facts and trivia about both topics. It contains hundreds of hilarious stories about what Unix gets wrong (and also right). It's a bit outdated but for true geeks it shouldn't matter, it's still a very fun read.

Here's what preface says about Unix: *Modern UNIX is a catastrophe. It's the "Un-Operating System": unreliable, unintuitive, unforgiving, unhelpful, and underpowered. Little is more frustrating than trying to force UNIX to do something useful and nontrivial. Modern UNIX impedes progress in computer science, wastes billions of dollars, and destroys the common sense of many who seriously use it. An exaggeration? You won't think so after reading this book.*

Chapter 1 is called *Unix is the world's first computer virus*, and this is how the book illustrates C++ is written:

How C++ is written according to The Unix Haters Handbook.

If you want a physical copy there are some used copies at Amazon and eBay. Just don't expect used copies to come with a Unix barf bag as it's probably been used by the reader already. :)

Unix barf bag that comes with the book.

Authors: Simson Garfinkel, Daniel Weise, and Steven Strassmann.

## #12 Unix and Linux System Administration Handbook

I call this book the Unix bible. I got this book (third edition) 13 years ago and read it pretty much cover to cover in a few weeks. Even 13 years later I still refer to it every now and then, and I always find something new. This book is a true classic and pretty much the only general Unix sysadmin book you will ever need. If you're just starting with Unix and Linux, then this is the book to get. At over 1000 pages, it's packed with tons of useful information and not only you'll become a Unix expert, but also add a ton of points to your geekiness levels. I remember how I spent several nights setting up my own caching `bind`

server after reading the chapter on DNS. Fun times!

This book covers the major variants of Unix and Linux distributions such Solaris, HP-UX, AIX, and Ubuntu, Suse, Redhat. This book is divided into three large chunks - basic administration, networking, and other stuff.

Section one - Basic system administration.

Basic administration presents a broad overview of Unix and Linux from a system administrator's perspective. The chapters in this section cover most of the facts and techniques needed to run a stand-alone system, such as managing storage and file system, controlling processes, setting up backups and configuring the kernel.

Section two - Networking.

The networking section describes the protocols used on Unix systems and the techniques used to set up, extend, and maintain networks and Internet-facing servers. High-level network software is also covered here. Among the featured topics are the routing and network management, the network file system, electronic mail, and network security.

Section three - Stuff.

Other stuff includes a variety of supplemental information. Some chapters discuss optional features such as printing, server virtualization, eco-friendly computing and the politics of running a system administration group. Quote from part three: *Good sysadmins have both technical skills and “soft skills.” The ability to organize a group of administrators and make sure they meet the organization's needs can be the difference between an OK administrator and a great one.*

This book also has an insanely cool domain name admin.com.

Authors: Evi Nemeth, Garth Snyder, Trent R. Hein, and Ben Whaley.

## #13 The Reasoned Schemer

In parts one and two I recommended The Little Schemer and The Seasoned Schemer. Now it's time for The Reasoned Schemer.

This book takes you on the next adventure. The Little Schemer taught lists and recursion, The Seasoned Schemer taught computation and now Reasoned Schemer teaches you logic programming and relational programming. Relational programming describes what you want in the result rather than how to get to result. As any book in the Schemer series, it's extremely fun to read and it will bend your mind. It will make you think from the first page. All in all this book teaches the essence of Prolog - the most well-known logic programming language.

Oleg Kiselyov is one of the authors. He's the craziest functional programming guy I know. I'm a big fan of his work. I once said that anything by Oleg Kiselyov gets an automatic upvote and so does this book. Oleg also implemented the logic programming language used in this book. It's called Kanren. If you're working through this book you've to download Kanren and run all the examples through it. It will help you to get through the book.

Only the true schemer fan will understand this message.

Authors: Daniel P. Friedman, William E. Byrd, and Oleg Kiselyov.

## #14 Thermodynamics

Now from computers to physics. This is a classic science book by one of the great physicists of all time, a Nobel Prize winner and one of the chief developers of quantum mechanics - Enrico Fermi. The text is elementary in treatment and remarkable for its clarity and organization. It covers the core of thermodynamics - thermodynamic systems, laws of thermodynamics, entropy, ideal and real gases, and other core topics.

Everyone should read this book to be a well rounded person. At 150 pages, it's pretty easy to go through. From my own experience this book can be worked through in two full nights. I did that right before the exams. :)

As I was writing about this book I remembered the puzzle of using a barometer to measure height of a building. How would you do that? One of the solutions is to use the ideal gas law to come up with the solution. Here's my solution to this puzzle.

Author: Enrico Fermi.

## #15 Concrete Mathematics: A Foundation for Computer Science

Yet another classic. Concrete Mathematics is the second most accessible book by Knuth as one of the co-authors. Concrete Mathematics is a blending of CONtinuous and disCRETE mathematics. This book focuses on practical skills rather than theory. It contains many examples, tricks of trade, and problems with solutions. This book is also fun to read. After reading this book you will be very comfortable manipulating sums, recurrences, discrete probabilities, and number theory.

I learned most of the math used in computer science during my studies but I still got this book to see what I missed. I have read parts of it and the material is very accessible and at the right density, meaning trivial steps from one equation to the next are left out but the most difficult steps are explained.

This is not a comment.

(If you missed, I listed the most accessible book by Knuth Selected Papers on Computer Science in part two of this article series.)

Authors: Ronald L. Graham, Donald E. Knuth, and Oren Patashnik.

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

**4**Comments May 03, 2015

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

Welcome to part two of my 100 favorite programming, computer and science books. If you're just joining, please see part one for introduction. In this part I'll cover a mix of my favorite theoretical and practical books because as Donald Knuth says in his Selected Papers on Computer Science, "*The best theory is inspired by practice; The best practice is inspired by theory*."

Slide 28 on page 161 from Don Knuth's Selected Papers on Computer Science.

I'm a huge fan both of theory and practice split 20/80. I love to get practical things done and I also like to learn theory behind what I'm doing. My most creative ideas always come from theoretical books. Read many of them and suddenly many ideas click together and form something amazing.

Some readers asked why I only do five books at a time. Very simple - writing a single blog post about 100 books would take me several weeks of effort. Splitting it in tiny parts makes it much easier to get done. Progress feels good and the series is incrementally getting published.

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

My super nerdy bookshelf.

Alright, let's get to this week's books!

## #6 Don Knuth's Selected Papers on Computer Science

This is one of the most accessible of Knuth's books. I enjoyed it a lot. It's written for people who aren't necessarily specialists in the subject. It's for educated people in all fields and you don't need to know too much math to read through this book.

Knuth says the following about this book, "*If any of my work deserves to be remembered, it is now in the form that I most wish people to remember it.*". Knuth discusses topics such as coping with finiteness, usefulness of toy problems, theory vs practice, history of algorithms, Von Neumann's first computer program, and many others.

This is the book to buy if you want to get familiar with Knuth's work in an accessible way and learn something new without much effort.

I just remembered I had written a blog post many years ago called Donald Knuth's First Computer based on a chapter in this book. I even scanned a picture from the book of young Donald Knuth at age of 20 working on his favorite IBM 650 computer in 1958:

Young Donald Knuth, age 20, at his first IBM 650 computer in 1958.

Author: Donald E. Knuth

## #7 To Mock a Mockingbird

One of the most remarkable and fun books I've ever worked through. This book teaches combinatory logic by masking combinators as singing birds. You'll be hearing Turing birds sing and you'll be traveling to Godel's forest. Make sure to be prepared for your journey with a lot of paper and tea as this book will capture you once you start working through the problems. You'll be having so much fun along the way as you discover new birds and your mind will stretch a lot. If you've patience to work through all the chapters, you'll learn about Church encoding and Godel's incompleteness theorem in the end.

THE MASTER FOREST - ONLY THE ELITE ARE ALLOWED TO ENTER.

This book may be very hard to find as it's out of print. I got my copy years ago when it was still in print. There are 10 used books available on Amazon right now. It's also available on Kindle and Nook. If you want a printed copy try try searching Ebay and Powell's. There are a few copies on sale.

Author: Raymond Smullyan

## #8 The Seasoned Schemer

The Seasoned Schemer is continuation of The Little Schemer that I listed as my #4 favorite book in the first part of this series. This book is written in the same style as The Little Schemer and it's extremely fun to read. It's a dialogue between you and the authors but unlike The Little Schemer that teaches you to think recursively this book teaches you to think about the nature of computation. You'll learn about closures, continuations and continuation passing style (cps), y-combinator and implement your own Lisp in Lisp at the end.

When I read the book, I collected all the code examples and programming commandments on github: the-seasoned-schemer repository.

A solution to one of the problems in The Seasoned Schemer.

Authors: Daniel P. Friedman and Matthias Felleisen.

## #9 Expert C Programming

Back to practical books, this is a classic book on C programming. I learned the language purely by programming and reading code examples without ever reading a single tutorial and this was my first real book on C programming language. This book is for people who already know C well. It presents subtle aspects of the language and reveals *the shocking truth* that C arrays and pointers are not the same thing. Language quirks are accompanied by interesting stories and suggestions called handy heuristics. It's amusingly written, and the historical anecdotes are very interesting as well.

I heard someone say, "*You'll definitely know you're a geek when you find yourself chuckling at all of the hilarious comments in the book. What Peter van der Linden has produced is not so much a book about C programming as it is a dense little slab of hacker culture. It's a snapshot of the days when "the Internet" was almost synonymous with "UNIX account."*"

Spot on. This book will increase your geekiness level by 10 points. Go get this book!

A hilarious programming challenge.

Author: Peter van der Linden

## #10 Laszlo Lovasz's Combinatorial Problems and Exercises

This book is probably the most advanced book that I will recommend in the whole series. But it's so good that I just had to recommend it as soon as possible and put it in spot #10. This book is written in problem-hint-solution style. Problems take the first 100 pages, followed by hints and solutions in the next 500 pages. Lovasz starts off with simple problems that anyone can solve and quickly moves to more advanced problems. There is no theory in this book.

Every once in a while when I feel like doing some math I work through a couple of problems. I've found that problem-hint-solution style is perfect for quickly learning new problem solving techniques. If you want to improve your combinatorics skills and get better in graph theory, and you love to solve problems then this is the book to buy.

Funny story - I've heard that the first year PhD students in Hungary (where the author is from) are required to work through all the problems in this book. Those who can't solve the problems don't make it to second year of PhD studies.

This book is also out of print so try scouting ebay and other book stores for it.

Author: Laszlo Lovasz

## Until next time!

I hope you liked these five book recommendations. As always, let me know in the comments what your favorite books are, subscribe to my blog, follow me on twitter, and until next time!

When you're in the zone coding away you don't want a slightest disturbance. Any external noise can throw you off. Your phone ringing, a louder car outside or with the new open plan offices, or your coworkers talking in background. You don't want any of these noises interrupt your work flow. You want to stay in the zone for hours and get tons of work done.

My kitty approves Bose QC25 headphones. She says these headphones help her catch more mice.

Noise eliminating and cancelling headphones are a must for staying in the zone and getting things done. I've been trying all kinds of headphones and I think I just found the perfect headphones for programming and concentration - Bose QuietComfort 25 headphones with active noise cancellation. The way they work is they record sound around you, invert the sound waves, and emit the opposite sound, effectively cancelling sound around you.

When I put them on it feels like I'm in a vacuum chamber or something similar. Everything becomes strangely quiet. Nothing emits sound. You get used to this feeling in a few hours. Typing on a keyboard is noiseless. You can barely hear someone talking to you directly behind you. They're also very light and comfortable.

These headphones are not cheap but I love to spend money on high quality equipment that lets me get my work done quicker and more efficiently. I'll be sticking with these headphones for years now.

Unboxing Bose QuietComfort 25 was a pleasure. The box was small and neat, and headphones were packed into a very good looking and compact case.

Neatly packed Bose QC 25 headphones.

Pro tip: These headphones use a single AAA battery for noise cancellation. Make sure you don't waste money on batteries. You'll be changing regular Duracells ever 3 days. Get Eneloop Pro Rechargeable AAAs and Eneloop Pro Charger. Eneloop AAA Pros are at 950mAh and they'll last more than 3 days. Eneloop batteries are currently the most competitive rechargeable batteries on the market.

My other kitty tests Eneloop AAAs and Eneloop Pro Charger.

I'll be modding these headphones and adding a USB power cable so I don't have to use batteries at all. If you're interested in hearing about that, subscribe to my blog or follow me on twitter. Until next time!