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

I've been collecting and researching science, math, physics, programming books since 2001 or 2002, so it's been close to 15 years of book research. I'm really passionate about high quality books. For every high quality book there are a thousand sloppy books and I want nothing to do with them. I'm only interested in books that have the highest value. 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.

This time I'm sharing my favorite books about Linux assembly programming, quantum physics and physics of computation, computational logic and inductive computer program proofs, and general Unix programming.

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. It will be a handy reference for quality books.

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.

#21 Programming from the Ground Up (free pdf)

Programming from the Ground Up is a fantastic, practical book to get into x86 assembler and assembly programming on Linux quickly. This book was published in 2004 but it doesn't make it outdated. The material in this book gives you fundamental knowledge about how Linux programs work and how to write them in GNU AS assembler.

Jonathan Bartlett wrote this book because he was frustrated to no end with the existing books. At the end of them he could still ask, "How does the computer really work?" and not have a good answer. Jonathan's goal is to take you from knowing nothing about programming to understanding how to think, write, and learn like a programmer. You won't know everything, but you will have a background for how everything fits together.

Even now in 2016 there are no better book to learn assembly than this one. At least I haven't seen one. Jonathan Bartlett has written a masterpiece. (If you know any fantastic recent (last 10 years) assembly books, let me know so I can evaluate them.)

The introductory will capture anyone who's interested in computers. It says:

Programming is like poetry. It conveys a message, not only to the computer, but to those who modify and use your program. With a program, you build your own world with your own rules. You create your world according to your conception of both the problem and the solution. Masterful programmers create worlds with programs that are clear and succinct, much like a poem or essay.

This book not just teaches assembly but also good programming style and philosophy of writing good programs. It says, "Your goal as a programmer is to solve the problem at hand, doing so with balance and taste, and teach your solution to future programmers." That's something programmers often forget or ignore. This book is filled with advice like this and even has a whole chapter on developing robust programs. It is a very didactic book.

I also really like this paragraphs from the book:

The difference between mediocre and star programmers is that star programmers understand assembly language, whether or not they use it on a daily basis. Assembly language is the language of the computer itself. To be a programmer without ever learning assembly language is like being a professional race car driver without understanding how your carburetor works. To be a truly successful programmer, you have to understand exactly what the computer sees when it is running a program. Nothing short of learning assembly language will do that for you. Assembly language is often seen as a black art among today's programmers - with those knowing this art being more productive, more knowledgeable, and better paid, even if they primarily work in other languages.

Appendixes are very useful as well. There's one on common x86 instructions, difference between AT&T syntax and Intel syntax, important system calls, summary of using gdb, and C programming idioms in asm. C idioms in asm is the most awesome appendix.

I remember how I went through this book in 2004, a day before a job interview, and I exactly got asked a question about how C functions get compiled to assembly, how the stack and memory management works. I got that job.

Layout of the %eax register.

Author: Jonathan Bartlett.

#22 Quantum Paradoxes: Quantum Theory for the Perplexed

I'm a huge fan of paradoxes, counter examples, thought experiments, and unexpected results. When I was studying physics I loved when professors showed these things. They really made you jump in excitement, made you feel pleasantly eerie, they broke your brain a little bit and made you think a lot.

Paradoxes, thought experiments, accidents, toy examples, and counterexamples play a major role in scientific development. How did Einstein invent the relativity theory? He imagined chasing after a beam of light at the speed of light, and this thought experiment played a vital role in his development of special relativity.

This book is a super fun graduate-level physics book. It's designed for physics students, physicists and philosophers of science with an interest in fundamental aspects of quantum theory. This book is not a science fiction book. Unless you're a trained physicist you won't understand much. But if you're a physicist you'll want to understand every single paradox in this book and you'll want more after you've done reading.

Each chapter begins with a paradox motivating the study of a fundamental aspect of the theory. There are more than two dozen paradoxes examined in this book, such as arrow of time, time reversal, quantum walks, quantum shell games, a quantum catalogs, quantum card tricks, Zeno effect, and quantum cats.

Close-up of book's cover.

I can't believe I've put this book #22 as it should've been top 10, but you can't put all of them in top 10. If did an article series called "My top 100 books sorted by information density," then this book would definitely be #1 or #2.

A Stern-Gerlach measurement inside a spaceship.

I've got several other excellent paradoxes/counter examples/thought experiment books and I'll share them in the upcoming articles.

Authors: Yakir Aharonov and Daniel Rohrlich.

#23 Feynman and Computation: Exploring Limits of Computers

Hell yes! Feynman again! The great teacher and all around fun guy. In previous part I listed Feynman Lectures on Computation, one of Feynman's least known books. This is even less known of Feynman's books but also one of the best.

This volume follows-up on Feynman Lectures on Computation. It's now nearly 20 years old but the content is timeless. It's a collection of fascinating scientific publications and stories by and about Richard Feynman. Feynman had a tendency to tell captivating stories. It was part and parcel of his style. And it's generally fun to see more of his stories and more stories about him. This book will boost your geekiness levels, expand your brain size, as well as provide a historical insight into development of neural networks, nanotechnology, quantum computers and information theory.

Feynman was decades ahead when he gave his original talks There's Plenty of Room at the Bottom (pdf) and Simulating Physics with Computers (pdf). These two provocative talks (both transcribed and reprinted in this book) anticipated several breakthroughs that have since become fields of science in their own right, such as nanotechnology and quantum computing. Many of the stories in this book cross-reference these two talks.

The book is divided into five sections: Looking at the original series of lectures on computation, reducing the size of computers, limits on computers imposed by quantum mechanics, parallel computation, and fundamental computing theories such as reversible computing and information theory.

Other fun topics include analysis of chaotic motion of Pluto, quantum robots, crystalline computation, fungibility of computation, parallel computation and algorithmic randomness.

In his There's Plenty of Room at the Bottom talk Feynman offered a $1000 prize to anyone who invented an operating motor that's 1/64 inch cube in size. Here's a picture of Feynman examining the the winner's motor:

Feynman examines Bill McLellan's micromotor.

There's also a TED Talk Feynman and Computation by Tony Hey, the author of this book.

Author: Anthony J.G. Hey.

#24 The Little Prover

Here we go again! In parts one, two, three and four I listed The Little Schemer, The Seasoned Schemer, The Reasoned Schemer, The Little MLer, and now it's time for a new adventure with The Little Prover.

The Little Prover was published just a few months ago and when I learned it's getting published I pre-ordered a bunch of copies not just for myself but for all my friends. I was that excited! I also ordered bigger hats as this book really makes your brain grow.

The Little Prover teaches you how to determine facts about recursive functions using induction. The book starts with programming concepts such as recursive functions and lists, and leads the reader along the shortest path to inductive proofs. It assumes knowledge of neither logic nor mathematics beyond arithmetic. Just like all other books in the series, it's written as a dialog between the authors and you in a super fun style with a lot of jokes and insider references. This book will make you think from page one and it will stretch your mind quite a bit.

You'll learn about axioms, theorems, what it means for something to be true in computing, conjectures, claims, counterexamples, total functions, partial functions, conjunctions, induction, natural recursion, and more.

While working through this book, you'll need j-bob, the proof assistant:

https://github.com/the-little-prover/j-bob

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.

Only the true fan will understand this message.

I also just started a GitHub repository the-little-prover that contains all code examples from the book (just like I did for all previous books in the series.)

Author: Daniel P. Friedman and Carl Eastlund. Illustrations by Duane Bibby.

#25 Advanced Programming in the UNIX Environment (APUE) (3rd Ed)

Sir. Richard. Stevens. Himself. Do I need to say more? I've got all his books and almost all of them are in top 100. I also have all three editions of this book. This book is a classic. As long as there will be Unix (forever), this book will be relevant. I haven't read it cover to cover but I've consulted it hundreds of times. This is the definitive reference book for every serious and professional UNIX systems programmer. Every concept is explained clearly, there are thousands of code examples, hundreds of illustrations and graphics that show how various concepts work.

I don't know what else to say. Get this book if you want to live.

Extra tip: The book contains a rich set of examples and downloadable code that is very useful. Here's the link to source code from the book: http://www.apuebook.com/code3e.html.

Relationship between the seven exec functions.

Another new, seemingly great book about programming in the Unix environment that was recently published is The Linux Programming Interface. This book is written by Michael Kerrisk, the current maintainer of Linux man pages. I haven't gone through it in detail but it's worth mentioning.

Pro tip: Want to know what's happening in Linux userspace and kernelspace but don't have much time? Follow man pages changelog! The latest changes always get reflected in man pages. It's the quickest way to know what's happening.

Author: William R. Stevens (W. Richard Stevens)

Until next time!

As always, I hope you liked these five book recommendations. Let me know in the comments what your all-time favorite books are and what your new favorite books are.

Also I just recently got four new interesting books but I haven't spent much time with them:

Don't forget to subscribe to my blog, follow me on twitter, and until next time! I can't wait to publish the next part already!