This book has an ambitious aim: to enable readers to build their own computer-based system (or at least a simulator for one) from scratch, all the way from logic gates to an operating system, at both hardware and software levels, in a single framework. It is intended for a university-level computer science course, giving a horizontal but connected view of various aspects of computer systems normally covered in discrete, in-depth course units.
The authors suggest that the material could be presented after an initial programming course or at the end of an entire course - both reasonable suggestions. They also say that it is suitable for undergraduate or graduate courses, but the breadth of coverage makes it much better suited to the former.
The book takes a bottom-up approach, starting with hardware at the Boolean and sequential logic level, and proceeding through machine language, computer architecture, an assembler, a virtual machine, high-level language, a compiler and an operating system. Each chapter ends with suggested project work. This is quite general in nature, but it will allow good students to demonstrate their expertise.
Optimisation is covered but the problems are not dwelt on, which is reasonable for a book of this size and scope. Such problems are very important in real designs, but at least this book covers the basics. The system, based around an object-oriented Java-like language called Jack (to run on the "Hack" hardware), is reasonably realistic. Certainly students who complete a course based on this book should feel a sense of achievement.
The book's very practical approach emphasises abstraction, which is good, but only in an ad hoc manner. The formal underpinning of the various components and how they link together is not covered. To do so would be an even more ambitious undertaking. The book does manage to relate the various levels of a computer system in an informal way, which helps give insight and know-how into the operation of a computer system at the various levels.
However, it does not develop a deeper understanding of the mathematical modelling of such systems.
A dedicated website (www1. idc.ac.il/tecs) accompanies the book. Software simulators for use under Windows and Unix are available for all the practical work. This is a very substantial associated component of the book. However, the software fits the Unix mould and installation is not particularly easy - the Java Runtime Environment is required from another website. Now that Windows users expect simple automated installation of software, this aspect needs to be addressed if the authors wish the book to be a success.
Although hardware is covered, all the practical aspects are undertaken with simulation programs. This means that all the associated project work can be undertaken using any PC with the appropriate software loaded and configured. It might be possible to undertake some of the practical work with hardware, but of course this would require provision of dedicated hardware equipment - in a laboratory if many students are involved - with significant additional effort needed.
Overall, the book is a refreshingly new way of looking at computer systems as a whole by considering all aspects of a complete system in an integrated manner. The authors' aim is largely achieved. However, as they stress, it is important that students undertake the practical work while working through the material in the book.
Jonathan Bowen is professor of computing, London South Bank University.
The Elements of Computing Systems: Building a Modern Computer from First Principles
Author - Noam Nisan and Shimon Schocken
Publisher - MIT Press
Pages - 325
Price - £32.95
ISBN - 0 262 14087 X