Building a Modern Computer From First Principles

A computer science textbook that wasn't discussed here before, and that many of you may haven't encountered yet.

The basic approach is summarized in the title of the authors presentation From Nand to Tetris in 12 Steps (3.5 MB, Powerpoint).

I am sure LtU readers will find a lot to complain about (they authors build an OO language...), but I am fond of the hands on approach, which is kind of similar to the approach taken by our favorites: SICP, CTM, EOPL etc.

Update: The published book is The Elements of Computing Systems, Building a Modern Computer from First Principles. Noam Nisan and Shimon Schocken, MIT Press, 2005.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Availability of the Text

I have already attempted to secure a copy from Barnes & Nobel, only to discover that despite The MIT Press listing of the text as a November 2004 title, it has not yet in fact shipped.

However, there are some PDF excerpts available on the companion website.

Peter J. Wasilko, Esq.
Executive Director & Chief Technology Officer
The Institute for End User Computing, Inc.

These comments are not official IEUC positions unless otherwise noted.

Firstly, I have to say I hear

Firstly, I have to say I heartily agree with some of the statements of the authors. I've always considered knowledge of a general-purpose assembly language one of the requisites for calling oneself a "programmer". Learning assembly usually does involve machine architecture and compiler aspects, e.g. the AoA.

A relatively recent online resource for the pre-NAND part (though it doesn't go into logic gates) is Designing Analog Chips.

Designing Analog Chips

I second your recommendation; Camenzind's book is fantastic, and I've learned a huge amount from it despite lacking much of the requisite background.

Probably unsuitable for self-study

I browsed the powerpoint, the software, and a few of the chapters online. The material is easy to follow if you already learned it, but otherwise it looks hopeless.

Maybe a brilliant kid with recreational programming experience could work through it, falling back on Google for help on parsing (the book sure doesn't explain it), but otherwise, it seems like it's only a satisfying recapitulation to be presented at the end of an undergraduate CS/EE program.

I do really admire the approach.

Is your assessment based on

Is your assessment based on trying the software out? The authors claim that the rapid feedback students get from the software is crucial to what they claim is relatively good success in their classes. (Also, their students have the book.)


Judging from the slides this book tries to be everything, and succeeds being nothing at all.

Two years at the university brought me the same knowledge they are teaching, but because it was spread out among different classes, and because we could use the best books in each area, every topic had somewhat higher quality.

Replace the hardware part with Hennessy&Patterson, the programming language part with a Scheme book, compilers with the Appel book, the high level part with any software engineering course.

As it is, I see no reason at all why anyone should read this book, and several why one shouldn't (like the OO language as the end-all of software engineering; even SE classes allow to discuss their concepts without OO sometimes, or see Szyperski's Component Software).

It is intended to complement other courses

I don't think they're suggesting it will cover everything. Rather it is intended to add context to other courses.

Personally, I would have enjoyed this course as an undergraduate.

I have often wished for wikipedia-style courses.

I've wished for courses much like this book that start at the bottom and work their way up to a certain goal. For example, I have great interest in tiling. I wish wikipedia articles had something like debian package dependencies, "tiling depends on group theory" "tiling is required by quasi-tiling".

Tiling led me to penrose tiles, then to group theory, now I have related questions that I don't know how to ask, because I don't know the answers to "what else depends on group theory?" or "what else requires tiling?"

If wikipedia artictles had such dependencies, it would easy to build a course that connected any two nodes.
Interesting courses that come to mind are, "Binary, Trinary, and Analog - How the Cold War Influenced the Computer Architecture of Today." , "Unicycles as Physical Analogs of Linear Logic, an overview of the works of Henry Baker" or possibly "Libraries, a crutch for insufficiently expressive programming languages? Provocative ideas from Discordian Theoreticians."

Though maybe that last one is a bit too radical.

In any case, are there more examples of this top to bottom coverage of a subject?

--Shae Erisson -

I have the book / Mini-Review

I received the book from MIT Press.

I don't have the time for a complete review at the moment, but here are a couple of observations.

The book is quite impressive. It is accompanied by huge amounts of support code and tools, that enable its hands-on, laboratory, approach.

The authors draw attention to basic software engineering concepts from the very beginning (e.g., interfaces vs. implementation, unit testing, modularity).

The programming language that is built during the course, called Jack, isn't state of the art (and as we know, it is possible to build a Scheme interpreter, which LtU readers would have preferred over the object-based language in the book). The authors are wise enough to provide a section explaining their design choices (sec. 9.4), in which they write Jack is an "object-based" language, meaning that is supports objects and classes, but not inheritance... [Jack's] primitive type system is, well, rather primitive... it is s weakly typed language... all these deviations from normal programming languages were introduced into Jack with one purpose: to allow the development of elegant and simple Jack compilers...

You may disagree with the choices the authors made, but at least they are explicit about them and mention that there are alternatives.

I gave the book to a friend of mine, now finishing his MSc. He was very enthusiastic and said that the book gives a very nice integrated picture of many important topics.

A response from one the book's authors

I've been following the discussion of our book ( in this blog with a mix of pain and amusement. In particular I am rather impressed by the ability of some of the contributors to form extremely solid opinions about a book that they've never seen (by their own cheerful admission).

Noam Nisan and I spent 5 years writing the book and related software. Please spend 5 minutes looking *at the actual text* before writing the next post about it.

If one of you is seriously interested in writing a book review I will gladly send him/her a copy. Let me know at .

-- Shimon

Nothing to complain about

I've been following the discussion of our book in this blog . . . Please spend 5 minutes looking *at the actual text* before writing the next post about it.

Well, you haven't reviewed this particular discussion too closely, as there is exactly one poster who hasn't read any of the book but pans it anyway.

One other poster says he didn't like it, but he has looked through the sample chapters, just as you demand. Three other people praise the book.

I have the book...

I have the book, read several chapters carefully, asked other people for opinion after lending them the book, and wrote a positive micro-review.

I disagree

The actual text does not seem to be available online at present. The majority of potential readers will not benefit from text that is not available online; buying a book from Amazon is quite costly (it looks like in Argentina, where I am, this book would cost US$37 in shipping, plus the US$22 for the book, a total of AR$215), uncertain of success, and requires all of this up front, before the reader has had the opportunity to evaluate the text themselves. Additionally, material that is not online cannot be passed through Google Translate, cannot be copied and pasted into email to friends when you need help, cannot be bookmarked on Delicious, cannot be commented on on Reddit, etc. However, the printed format is convenient if you want to make an illegal printed copy of the book, as photocopies are considerably cheaper than printing from a computer (though not enough to pay the Amazon fees).

Consequently, reviews based on the contents of the text will not be useful to the majority of potential readers.

A cheaper source

You can get the book from The Book Depository for USD24 with free delivery. They say they ship to Argentina. I have always found their deliveries to Australia very prompt.

Thanks! I may try that out,

Thanks! I may try that out, once I have some extra money. My other points still stand.


I've been raving about the book to my friends, it's sad that you got a bad impression from this site!
(ahem - I thought I was replying to a recent comment.)

Video presentation from author

FYI, the author made a presentation at Google, which is available online: