Computers are an integral part of our society. They drive our markets
and cars, monitor our health, keep our savings and form the substrate
of our digital social networks.
The innerworking of the computer is for many developers a lost
art. Elements of Computing Systems allows anyone to relearn this art
in a hands-on fashion. Lovingly called “from NAND to Tetris” by
enthousiasts the book does precisely that. I.e. Starting form first
princples; the lowest level hardware, building up to a playable game;
Elements of Computing Systems has a bottom up approach to explaining
the innerworkings of a computer. The book is subdivided into two
parts, the hardware and the software. One first learns and build the
hardware before one starts programming on the hardware build.
The book is further subdivided in chapters that follow the same
principle. First a bit of theory is presented. Then a project is
described that ingrains the theory.
An extensive toolsuite is provided by the authors of Elements of
Computing Systems that allow the hardware and software projects to be
simulated and tested. This enables a healthy feedback loop for the
practitioner that tells her if she is on track.
Eventhough the projects build upon each other, it is possible to do
the projects out of order because the tool suite provide default
implementations for all the parts that one skips over.
To get an impression how the book explains the innards of a computer
the chapters are given below.
- Boolean Logic
- Boolean Arithmetic
- Sequential Logic
- Machine Language
- Computer Architecture
- VM I: Stack Arithmetic
- VM II: Program Control
- High-Level Language Project
- Compiler I: Syntax Analysis
- Compiler II: Code Generation
- Operating System
- More Fun to Go
Elements of Computing System is a very readable book giving a thorough
introduction to the full stack of computer systems. The projects give
a realistic view of how hardware and software is designed.
If you would like to know how a computer works I would definitely
recommend this book.