Remember my article on why vi uses hjkl keys? It got very popular so I thought I'd also do an article about Emacs.

When Stallman and Steele created Emacs, they both worked at MIT's AI lab. The systems they worked on had these funny keyboards with a bunch of extra keys called Hyper, Super, Meta and Control. Meta was closer to the pinky finger so that's why it was adopted by Emacs. Hyper and Super not so much.

The original Emacs keyboard with hyper, super, meta, ctrl keys.

Here is how the full keyboard looked back in the day:

Symbolics space-cadet keyboard used on Lisp Machines.

The IBM PC keyboards don't have Super, Hyper, or Meta keys. Meta key is Alt on IBM PCs, and Control is the same Control. So when you see M- notation in Emacs documents, it actually means Alt key.

Extra geekiness: TECO and DDT song. TECO was a direct ancestor of Emacs, which was originally implemented in TECO macros.

Until next time!

This article is part of the article series "My Top 100 Programming, Computer and Science Books."
<- previous article next article ->

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.

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

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

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

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:

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)

Advanced Programming in the UNIX Environment.

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:

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!

This is how Browserling is made. These are commits to Browserling's private repositories. I just hit 370 days of nonstop commits. I'm on a mission to build a great company.

I thought I'd document this once-in-a-lifetime accomplishment. Until next time.

Update 5-5-16: 410 days of commits.

I'm on a mission to make developers' lives as simple as possible, and I just released Browserling's Safari extension. Safari extension lets you quickly access all Browserling's browsers with one click right from your browser. No need to go to first. Just install the extension and you can start testing.

Install Browserling's Safari Extension

Download and install here:

Browserling now has extensions for four major browsers - Firefox, Opera, Chrome and Safari.

I've also submitted Safari extension to Safari Extension Gallery and it will soon be available there. I'll make an announcement when it is.

Work continues on finishing the extension for Internet Explorer. Once done Browserling will have extensions for all five major browsers.

Follow @browserling and me for updates and until next time!

This blog post is a repost of Announcing Browserling's Safari Extension from Browserling's Cross-browser Testing Blog.