Some of My All-Time Favorite Computer Books

The famous Powell’s Technical Books once found in Portland (photo from Wikipedia)

There was a time, not so long ago, when bookstores sold computer books. And lots of them.

Some places, like San Diego and Portland, once had entire stores dedicated to nothing but computer and technical books.

Powell’s Technical Books, in particular, was a place like no other on this planet. The store filled up a beautiful brick building along North Park Blocks in Portland—and, for someone like me, it was like visiting the Holy Land.

Fup. Photo from Powell’s Twitter feed.

Most importantly, the Portland technical book store was home to the beloved cat, “Fup”, who you could only hope might grace you with a brush of her tail while you browsed thousands of books on every technical topic that ever existed, or that ever wanted to exist.

What makes a particular computer book a favorite is often a very personal thing, but these are a few I have connected with the most throughout the years, and some modern treasures I’ve begun to love just as much…



Crafting Interpreters

There are very few technical books that combine both brilliant writing with beautiful design. Crafting Interprets by Robert Nystrom is a stunning book that does just that. The layout and typography are beautiful. It’s filled with wonderful illustrations that actually help you understand the material. Even the soft, velvety finish of the paper cover is somehow a pleasure to hold while you read it.

What really makes this book so successful, though, is Robert’s deep understanding of the subject combined with his very approachable writing style. It is so easy and fun to read that it’s the first book on compilers I’ve honestly been able to follow. I feel like I could actually write my own computer language, now, and I think I might!

All of this, in my opinion, makes this book an instant classic, and perhaps the best technical book I’ve ever owned. It will definitely hold a place of prominence on my bookshelf for a long time to come.

Joel On Software

Before he went off and helped start Stack Overflow and Trello (no big deal), Joel Spolsky had put out some really smart thinking (both his own, and curated writings of others) in book form that had spoke to the very best of what software development was all about.

I had this book on my shelves for years, until it fell victim to a purge of books we made for our move to the Bay Area. I was only reminded of it again, recently, when it came up in a search for some other books, and I couldn’t wait to get another copy of it back on my shelf to have around.

Some of the writings on specific technologies may feel a bit dated now, but the bigger ideas behind them remain as clever as they ever were.

No Bullshit Guide to Math & Physics

Maybe not technically a computer book, but I have often felt lacking in math skills from time to time, especially when trying to come up with algorithms involving data analysis or specialized graphic rendering.

Ivan Savov’s book is a math book I actually enjoy reading. I only wished I had it when I was in High School, or that it could be handed out to every other kid who struggles with math. The first paragraph of the first chapter says everything about why it’s on the list:

“Some people say they hate math, or could never learn it. It’s not uncommon for children who score poorly on their school math exams to develop math complexes in their grown lives. If you are carrying any such emotional baggage, you can drop it right here and right now.

- Ivan Savov, No Bullshit Guide to Math & Physics


The Design of Everyday Things

What could be said about Don Norman that hasn’t already been said. He created a watershed book for the tech world (and the world in general) when he wrote this one. It made all of us think about things in a whole new (and better) way.

His ideas and in-depth analysis for what makes something usable, and what doesn’t, is something we all should be reading as part of our professional training.

I have always liked thinking about software as being an “experience” we build for our users, and I learned to really appreciate and understand that idea better after reading Don Norman’s book.

“Experience: note the word. Engineers tend not to like it; it is too subjective. But when I ask them about their favorite automobile or test equipment, they will smile delightedly as they discuss the fit and finish, the sensation of power during acceleration, their ease of control while shifting or steering, or the wonderful feel of the knobs and switches on the instrument. Those are experiences.”

-
Don Norman, The Design of Everyday Things

Compute! Books

Compute! Publications put out some of the very best technical books in the 80s and 90s. They mostly only covered the 8-bit era, but I have often wished they were still around, publishing new books today, so that I could have read their take on things like full-stack development, Data Science, and developing AI with Python. (A Compute! book on Swift and SwiftUI would have been a lot of fun, too.)

Luckily, they were around to give me my early, high-school era foundation in Computer Science. You simply couldn’t have written a Machine Language program for the Commodore 64 without their Mapping the Commodore 64 reference guide, covering every single one of the 65,536 memory locations inside that computer, describing in detail what it was for and how it could be used.

Machine Language for the Commodore 64, 128, and Other Commodore Computers

The other thing you needed in order to program 8-bit Machine and Assembly Language was to read anything written by Jim Butterfield. He had articles in almost every computer magazine that existed, at one point, but this particular book of his was especially helpful.

Actually, you needed a bunch of books to learn 6502 Machine Language, digging through book after book, looking for that one perspective or bit of information the others didn’t have. It’s not for the faint of heart. But this book was vital, and it introduced you to most of what you needed to understand in a way that was (mostly) easy to follow.


Thinking in C++ and Thinking in Java

I owe most of what I know about Object Oriented Programming to Bruce Eckel and his books. I had struggled with the concept for a while, until one day, out of pure frustration, I started reading Thinking in C++.

It was a revelation. Plus a major turning point in the quality of my code and how I thought about it. A year or so later I solidified my OOP knowledge (along with my love of Java, we’re just friends now) by reading his Thinking in Java book. It was just as brilliant, and may be one of the greatest books on Java ever written. (In my humble opinion.)

More importantly, these books opened the floodgates for me wanting to read everything I could about writing better code.

Macintosh Revealed

Much like Machine Language programming, developing for the original Macintosh was a bit of a challenge. Its entirely new UI concepts and event-driven paradigms were completely foreign to most developers back then, and the APIs to program them with were confusing and barely documented. (What is this thing called a “handle,” and why is it on a “heap”?)

Stephen Chernicoff worked for Apple, helping them write their original Inside Macintosh series. He knew, in depth, how the Macintosh APIs really worked, so his four-volume set gave us mere mortals access to that information in a form we could all understand. With useful examples, alongside clear coverage of all the related APIs, his books gave us hope that we could actually write our own software for that crazy machine.

Scott Knaster’s Two Masterpieces

Once you had the basics down from reading Stephen Chernicoff’s books, you started to realize there were more advanced things you needed to know about Macintosh programming that wasn’t covered anywhere else. “How do I hide the menu bar,” for example (something Apple discourage, even though it was necessary for things like games and multimedia). Or “My application keeps crashing, how do I debug that?”

Scott Knaster had been another important insider at Apple. He provided technical support to developers, having to answer all of their tough questions about how to do things (or why you shouldn’t do things) that no one else had thought of. Best of all, he wrote great books, and reading them was like having direct, personal access to an Apple expert.

By the time he was putting out his second and third editions, he had become so legendary in the Macintosh community that he could ask other legends like Mad magazine illustrator Angelo Torres to create his book covers.

Inside Macintosh
(the 1992-1994 Version)

To me, both System 6.0.8 and System 7.1 (each for different reasons) were the pinnacle of the original Macintosh experience. They presented the best of the Macintosh User Interface design principles in perfect form. The massive 1992-1994 revamped, multi-volume version of Inside Macintosh documented that period of the Macintosh Toolbox and System software just as brilliantly.

The section on Color in the Macintosh Human Interface Guidelines volume is particularly fun to page through, decades later, because it discussed how to properly apply color to what had been, up until System 7, a black and white world!


Mastering SwiftUI

This digital-only book has become one of my favorite sources for learning and keeping up with SwiftUI. Simon Ng has organized his book well, starting out with simple ideas and examples, and building on those until you find yourself creating robust, mind-bending SwiftUI features.

Best of all, he continues to updated his book quickly, each and every time Apple updates their SwiftUI framework and development tools, often adding new chapters to cover the new stuff. The current edition (Mastering SwiftUI 5) is up to 56 chapters!




Guide to Swift Strings

Like Stephen Chernicoff and Scott Knaster before him, Mattt (not a typo) has been another modern-day Apple insider (according to his web site), contributing to Apple’s own official Swift technical documentation. He (along with three others helping him) have put out a series called “Flight School” that covers some foundational aspects of Swift development.

I’m particularly thankful he put out this in-depth “Guide to Swift Strings,” since Swift’s approach to dealing with strings is rather robust and complex with its Unicode and multi-byte character support. I’m looking forward to reading their “Guide to Swift Codable” next.

Game Programming Patterns

In 2014, before Robert Nystrom had published his brilliant book on interpreters, he put out a book on game programming. (Or at least that’s what the title led us to believe.) I’ve often fantasized (or hallucinated, maybe) about being a game developer one day, and I’ve picked up books on the subject from time to time. So having already been blown away by his Crafting Interpreters book, I grabbed a copy of this first book of his as soon as I saw it. What I found inside, hidden in plain sight, was so much more than I had expected.

This is a book about how to write better game code, that is true. But it’s also a masterful re-telling of the legendary “Gang of Four” Design Patterns book in a clearer, livelier, and more digestible format for the next generation of developers.

I had contemplated, long and hard, about including the original Gang of Four book here. (What respectable technical book list doesn’t include it?) For me, this book does it better.

Naming Things:
The Hardest Problem in Software Engineering

Another recent favorite. I particularly like how the author, Tom Benner, subtitled his book “The Hardest Problem in Software Engineering.” I couldn’t agree more.

I know, at least, that the comments I’m often leaving the most on GitLab or GitHub when reviewing someone else’s code, are suggestions to rename a variable, a function, or a class name. Which, I’m pretty sure, only gets me eye rolls. Now I have a book I can point to.

The C Programming Language

A common favorite for many, maybe even a cliche, but I had actually been completely unaware of this legendary book when I first started learning C, along with the incredible history surrounding it.

I would eventually come to know it, of course, and Dennis Ritchie’s extraordinary contributions to the world. When I found myself needing a C refresher, I read this for my second go-round.

Clear, concise, and to-the-point, it’s the perfect example of how to write a computer language book that both teaches you the language quickly, and then gives you an excellent reference as you go off to write software with it. You can clearly see why so many people have recommend it throughout the years, and why they continue to do so today. It may be missing some of the newer additions to the language, but it provides a brilliant foundation.

What struck me most, though, was how so many of the language books I had read before reading this one (Herbert Schildt’s teaching C and C++ books, Bruce Eckel’s C++ and Java books, even Apple’s official Swift book) were so clearly influenced by the format and writing style that this book set over 45 years ago.

Clean Code

You might be required (by some kind of developers’ code of honor) to include Robert C. Martin’s Clean Code on your list of favorites if you had ever read it at one point in your life.

We developers are mere stewards of the code we are put in charge of, and great developers leave that code better than how they found it. That would probably be my brief, one-sentance summary of what this book is all about. The real value, though, is that by the end of the book you actually know how to leave your code better. (And I particularly like that it can be found spiral bound.)

It may be a bit too tied to Java these days, but the OOP philosophies and best practices it provides are still very much relevant, today, for writing code that is easier for others to read and maintain. In this book are ideas that can help you master your craft over a lifetime of coding (I still struggle, for example, writing functions that do just one thing), no matter what language you use.

Plus, it has long been one of the original advocates on naming things. See Chapter 2. Then read the rest of the book, and see how it’s a foundational idea used (and infused) throughout.

Code Complete

While Clean Code teaches you how to write good code, Code Complete by Steve McConnell teaches us all how to construct professional software.

This is another one of those books that has probably been (or should have been) read by every developer.

For a self-taught engineer like myself, though, this book was essential to giving me the complete knowledge and principles I needed to be a legitimate, professional-grade engineer.

Python Crash Course

To learn Python for the first time, I had been looking forward to reading Eric Matthes’s Python Crash Course. In part because of all the great reviews that all three editions of his book had received—so many programmers commenting on how they wished they had this as their text book in school.

And it didn’t disappoint. This is a wonderful introduction to Python (and programming in general), written with the same kind of care and thoughtfulness that some of the great programming books of the past were once written with. It reminded me a lot, in fact, of the way Bruce Eckel’s books had introduced me to C++ and Java.

It starts out gently with the “how” of programming in Python, getting you comfortable with the core concepts and constructs of the language. Then it quickly ramps up with the “where,” walking you through three practical projects that cover (almost) every type of application you might use Python for.

By the end, you not only know Python, you know how it can be used in the real world.

The Science of Storytelling

Also not a computer book, I know, but I really love how Will Storr shows us, with his book, how fundamental storytelling is in all of our lives, and how it can be applied in unexpected ways.

On the surface, it may very well be for authors and writers, but the ideas inside this book show us how we all see the world, and how we all communicate the things we see to others. It’s filled with fundamental ideas about how we can understand life better, and how we can better communicate with those around us.


That’s My List

Or at least a list. It changes and evolves from time to time. What’s on your list?

Previous
Previous

Crafting a Data-Driven Date Picker for SwiftUI

Next
Next

Switching From React Native to Proper iOS and Android Deployment