The Elements of Computing Systems (From NAND to Tetris)

Are you interested in a Computer Science course in which you will build your own computer (in a simulator), your own assembly language, compiler, operating system, and an application on top of all this? If you are already excited then this is just the course for you !

In a typical Computer Science program, we learn many key topics such as algorithms, computer architecture, operating systems, compilers, software engineering, etc. However, almost always, we learn all of these topics in isolation. This leaves a student with a lot of throretical knowledge, but often in the dark about how all these peices play together.

The Elements of Computing Systems - is a course which takes a student across the entire computing stack in a hands on manner. In this course, students start with the primitive NAND gate, and using a hardware simulator and HDL, they build basic gates, using which they build an ALU (Arithmatic Logic Unit), going on to building an actual computer (in simulation). Then they create an assembly language for this computer, followed by a high level language, an operating system, and finally a game using the language they created, on the machine they created.

In the process, students explore many ideas and techniques used in the design of modern hardware and software systems, and discuss major trade-offs and future trends.?

This course is a one of a kind course which unifies the most important concepts a student learns in Computer Science, in a fun and hands on way. The hands on approach is important because many of the topics covered in this course are dealt only at a theoretical level in most university courses.

This course was originally created by Professor Shimon Schocken, and Professor Noam Nisan. The creators of this course have very kindly made the content available online and through their book, so we can all benefit from it. Here is a link to the original course page.

Here is a 10 minute video where Professor Shimon Schocken talks about why he created the course and what it contains. Please note: I have embedded this video to give participants a better idea of the course. It does not mean that Prof. Schocken is endorsing the course on


Even though Professor Schocken has made most of the material freely available on the course website, participants are encouraged to purchase the book for a better learning experience.
Submitting Responses to Activities
At, we normally encourage participants to blog their solutions to various course activities, and submit links to their blog posts for peer review. However, this course is based on a book, which is often used in university courses. For that reason, as well as for preserving the experience of future learners, the authors have requested that we follow the code sharing guidelines stated below. I request all course participants to co-operate with the code sharing policy stated below. Very soon I will create a private pastebin for this course where everyone is encouraged to post their solution code for peer review.
Code Sharing Policy: We developed this course and made all its materials freely available because we want as many people in the world to learn computer science on their own terms. We believe that students and self-learners who set out to do the hardware and software projects should have the benefit and challenge of doing original work, without seeing published solutions. Therefore, we request that you don't post solutions publicly on the web, e.g. in blogs or forums. If your course instructor or organizer creates a private space in which students can share their work outside the public domain, that's fine. Likewise, you can share your work with others using a password-protected space. Please use your judgment and help ensure that many more students, like you, will be able to fully benefit from this learning experience. Thx – Noam Nisan and Shimon Schocken
Recent Course Updates: