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."
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.
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:
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.
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.
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!
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