2009 Yong Joseph Bakos. (303) 653-3017

From NAND to Tetris

Building a Modern Computer from First Principles


This is a proposal for an excellent university-level course that fills the gaps within a modern computer science curriculum and ensures that students understand, in great detail, how a computer works by guiding them through building one from scratch. It is based on the excellent book The Elements of Computing Systems from MIT Press and successful classes from the Efi Arazi School of Computer Science (Interdisciplinary Center of Herzliya).

The Problem

As both an employer of software developers and an instructor of computer science, I have witnessed an unfortunate deficiency in today's computer science graduates: a majority of students lack critical fundamental understanding of first principles and fail to understand how a computer and computer program really work.

"Once upon a time, every computer specialist had a gestalt understanding of how computers worked. Failure to see this intricate enterprise in the flesh leaves many students and professionals with an uneasy feeling that, well, they don't fully understand what's going on inside computers." (Nisan, p. ix)

This problem should be familiar to most computer science departments in the United States.

"It is our view that Computer Science (CS) education is neglecting basic skills, in particular in the areas of programming and formal methods. We consider that the general adoption of Java as a first programming language is in part responsible for this decline. We examine briefly the set of programming skills that should be part of every software professional's repertoire." (Dewar, url)

"To sum up Dewar’s argument: today’s college computer science programs aren’t rigorous enough, and don’t promote in-depth thinking and problem solving. Instead, in an effort to boost enrollment, CS programs focus on easily accessible curricula, and so fail to prepare students to compete with their international peers. " (Maguire, url)

A July 2009 article from Communications of the ACM also discusses the issue:

"Another company noted that it had found it a complete waste of time to even interview graduates from U.S. universities, so they added at the end of the job description the sentence 'This work will not involve Web applications or the use of Java,' and that had served to almost completely eliminate U.S. applicants.'" (Dewar, url)

In short, there is compelling evidence that our computer science graduates have become ill-prepared for building complex software systems, and the first fundamental problem underlying the issue at large is that they lack a deep understanding of how computers and software work.

The Solution (how this course helps)

From NAND to Tetris bridges the gap between the typical courses found in every modern computer science curriculum and ensures that all students have a deep understanding of boolean logic and math, logic gates, machine language, computer architecture, assembly language, operating systems, virtual machines, compilers, and high-level languages. It accomplishes this goal by guiding students through the construction of the entire abstraction stack of a modern computer with a fun, engaging, continuous project over the course of 12 weeks (one semester).

This class is based primarily on the work of Noam Nisan and Shimon Schocken. It is heavily interactive and provides a complete hardware simulator and programming environment with which a computer is built. To get a ten-minute summary of this class, please watch this video. For a more thorough, hour-long presentation please view this longer video.

Upon completion of this course a student should have an intimate understanding of each layer of abstraction present within a modern computer system. This understanding serves as the critical foundation for further exploration and education may be built. For upper-level students, the course fills in knowledge gaps and provides coherence between other classes in a computer science curriculum.

Course Plan

This course fits a typical 12-week semester very well and can also be stretched across two quarters if necessary. Take a look at a typical semester study plan. A typical syllabus is available here.

Execution & Curriculum Integration

This class is ready to immediately become a part of any university computer science or electrical engineering curriculum. It can serve as a great intro to computer science course or as an elective. From my informal surveys, the student interest and response to this course is very positive. Please direct any questions about this proposal to me by calling (303) 653-3017.


Nisan, Noam & Schocken, Shimon. The Elements of Computing Systems. 2005, MIT Press. more info

Maguire, James. "Who Killed the Software Engineer? (Hint: It Happened in College)," Datamation. http://itmanagement.earthweb.com/career/article.php/3722876

Dewar, Robert & Schonberg, Edmond. "Computer Science Education: Where Are the Software Engineers of Tomorrow?" Crosstalk. http://www.stsc.hill.af.mil/crossTalk/2008/01/0801DewarSchonberg.html

Dewar, Robert & Astrachan Owen. "CS Education in the U.S.: Heading in the Wrong Direction?" Communications of the ACM. http://cacm.acm.org/magazines/2009/7/32090-cs-education-in-the-us-heading-in-the-wrong-direction

If you are interested in this proposal, contact me directly at (303) 653-3017.