I really enjoyed reading this textbook. That's not something I've ever written after reading a technical book, but Charles Fox writes with a style that is both conversational and invitational that kept me reading.
One of the things I most liked about this textbook are the exercises at the end of each chapter. I often have found textbook exercises impossible to figure out, and in 1978 I worked with a study group to solve homework problems. Fox's exercises are more interesting, although I skipped the "Challenging" ones. Fox also introduces open source tools including Logisim, a Java-based tool for designing and simulating logic circuits.
I knew that the instruction set I began using with the Intel 8080 had grown, but not that it has continued to grow almost exponentially. From less than 70 instructions to over 3,800 instructions today, described in a five volume set of manuals that Fox suggests only compiler writers will ever read. His description of RISC forms a welcome contrast to x86, although I did encounter an error here, one that Fox told me occurred during editing.
Fox often includes assembly language examples and exercises and I wondered about this. On the one hand, doing so fits in neatly with the way he explains different subjects. On the other hand, very few programmers today have any experience with assembler--not that I think this is a good thing. But if you really want to understand the bare machine, knowing how to boot an amd64 into 64-bit mode may be more important than simply a mind-boggling example of what happens when a CPU design maintains backward compatibility. Fox also includes code examples for some simpler home computers that so many hackers used during the 1980s, such as the Commodore Amiga.
I reviewed the e-Book version, and found the illustrations worked fine in grayscale, with the exception of the register set for amd64 (Figure 15-3) where having some colors beyond shades of gray would have been helpful. Jumping around in e-Books is also tricky in my preferred PDF reader (Okular), and I missed seeing the introduction, where one of my big questions had been answered: who should read this book?
In the introduction, Computer Architecture is clearly described as a textbook, and I believe will work incredibly well in this regard. But what about programmers who never got to take an architecture class, or did take one from an indifferent teacher? I think that any programmer who wants a better understanding of the systems she is using would find her time well spent reading this book. There are times when I did wish Fox would emphasize certain hardware features and how they impact performance a bit more. While Fox includes the table of the hierarchy of memory based on how fast each tier is, knowing just how critical locality is to memory, whether in the cache or in DRAM, can have a strong impact when working with large data (see algorithms for the 21st century, by Steve Johnson). Fox does mention that reading memory is fast once a row is selected, but not that it can up to ten times faster. But that's just a particular peeve of my own. This is really an excellent book.
Computer Architecture
Charles Fox
NoStarch Press: March 2024, 535 pages