The Elements of Computing Systems - Building a Modern Computer from First Principles

Noam Nisan and Shimon Schocken

Publisher MIT Press
ISBN 978-0-262-14087-4
RRP £32.95
Reviewed by Patrick Hill CEng MBCS CITP
Score 9 out of 10


ElementsCSs This book's authors argue that fundamental ideas and techniques of computer science, once common knowledge among computer students and professionals, are now being obscured by the complexity of modern computer systems and the abstractions that sit between the user and the machine. This has reached the point where the computer science students are 'missing the forest for the trees'. 

This book has been written, therefore, to provide a means for readers to discover the 'bigger picture' - what are the key hardware and software components that a computer system is made up of, how do these components work, and how they interact to form a working computer system?

The main content of the book is divided into 12 similarly structured chapters. The five hardware-related chapters cover Boolean logic, Boolean arithmetic, sequential logic, machine language and CPU design. The remaining chapters are more software oriented, and include coverage of assemblers, stack arithmetic, VM design, and compiler design.

On the face of it, this is a lot of content to cover in such a slender volume. However, because the basic pedagogic philosophy of the book is to encourage learning by doing, the book is much more that just its 300 or so pages.

Thus, while the text is enjoyable, informative and serves well when using the book in 'reference mode', much of the value of the book derives from the reader engaging with the practical projects that accompany each chapter and learning through discovery.

Taken together, these projects build, from scratch, a virtual computer platform including the CPU and memory circuits, a basic OS and an object-oriented programming language and compiler.

The projects are supported by a suite of software, written in Java, that provides a hardware simulator (using a variant of HDL), and reference implementations of the software components of the system. The software may be downloaded from the book’s website.

This book is an excellent introduction to computer architecture and while certain topics (such as language design and hardware optimisation) are deliberately omitted, the text and supporting software promote further research and experimentation.

MIT Press