subject
Intro

Coursera: Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)

 with  Shimon Schocken and Noam Nisan

HIGHEST RATED MOOC

This course is a Top 50 MOOC of All Time based on thousands of reviews written by Class Central users. It's guaranteed to be good!

Check out the rest of the Top 50 here.

What you’ll achieve:
In this project-centered course* you will build a modern computer system, from the ground up. We’ll divide this fascinating journey into six hands-on projects that will take you from constructing elementary logic gates all the way through creating a fully functioning general purpose computer. In the process, you will learn - in the most direct and constructive way - how computers work, and how they are designed.

What you’ll need:
This is a self-contained course: all the knowledge necessary to succeed in the course and build the computer system will be given as part of the learning experience. Therefore, we assume no previous computer science or engineering knowledge, and all learners are welcome aboard. You will need no physical materials, since you will build the computer on your own PC, using a software-based hardware simulator, just like real computers are designed by computer engineers in the field. The hardware simulator, as well as other software tools, will be supplied freely after you enroll in the course.

Course format:
The course consists of six modules, each comprising a series of video lectures, and a project. You will need about 2-3 hours to watch each module's lectures, and about 5-10 hours to complete each one of the six projects. The course can be completed in six weeks, but you are welcome to take it at your own pace. You can watch a TED talk about this course by Googling "nand2tetris TED talk".

*About Project-Centered Courses: Project-centered courses are designed to help you complete a personally meaningful real-world project, with your instructor and a community of learners with similar goals providing guidance and suggestions along the way. By actively applying new concepts as you learn, you’ll master the course content more efficiently; you’ll also get a head start on using the skills you gain to make positive changes in your life and career. When you complete the course, you’ll have a finished project that you’ll be proud to use and share.

Syllabus

Introduction
Course introduction and overview, the roles of abstraction and implementation in systems design, the road ahead.

Boolean Functions and Gate Logic
We will start with a brief introduction of Boolean algebra, and learn how Boolean functions can be physically implemented using logic gates. We will then learn how to specify gates and chips using a Hardware Description Language (HDL), and how to simulate the behaviour of the resulting chip specifications using a hardware simulator. This background will set the stage for Project 1, in which you will build, simulate, and test 15 elementary logic gates. The chipset that you will build this module will be later used to construct the computer's Arithmetic Logic Unit (ALU) and memory system. This will be done in modules 2 and 3, respectively.

General Course Information
General Course Information

Boolean Arithmetic and the ALU
Using the chipset that we've built in the previous module, we will now proceed to build a family of adders -- chips designed to add numbers. We will then take a big step forward and build an Arithmetic Logic Unit. The ALU, which is designed to perform a whole set of arithmetic and logical operations, is the computer's calculating brain. Later in the course we will use this ALU as the centerpiece chip from which we will build the computer's Central Processing Unit, or CPU. Since all these chips operate on binary numbers (0's and 1's), we will start this module with a general overview of binary arithmetic, and only then delve into building the ALU.

Memory
Having built the computer's ALU, this module we turn to building the computer's main memory unit, also known as Random Access Memory, or RAM. This will be done gradually, going bottom-up from elementary flip-flop gates to one-bit registers to n-bit registers to a family of RAM chips. Unlike the computer's processing chips, which are based on combinational logic, the computer's memory logic requires a clock-based sequential logic. We will start with an overview of this theoretical background, and then move on to build our memory chipset.

Machine Language
A critically important aspect of building a new computer system is designing the low-level machine language, or instruction set, with which the computer can be instructed to do various things. As it turns out, this can be done before the computer itself is actually built. For example, we can write a Java program that emulates the yet-to-be-built computer, and then use it to emulate the execution of programs written in the new machine language. Such experiments can give us a good appreciation of the bare bone "look and feel" of the new computer, and lead to decisions that may well change and improve both the hardware and the language designs. Taking a similar approach, in this module we assume that the Hack computer and machine language have been built, and write some low-level programs using the Hack machine language. We will then use a supplied CPU Emulator (a computer program) to test and execute our programs. This experience will give you a taste of low-level programming, as well as a solid hands-on overview of the Hack computer platform.

Computer Architecture
Let's recap the last four modules: we've built some elementary logic gates (module 1), and then used them to build an ALU (module 2) and a RAM (module 3). We then played with low-level programming (module 4), assuming that the overall computer is actually available. In this module we assemble all these building blocks into a general-purpose 16-bit computer called Hack. We will start by building the Hack Central Processing Unit (CPU), and we will then integrate the CPU with the RAM, creating a full-blown computer system capable of executing programs written in the Hack machine language.

Assembler
Every computer has a binary machine language, in which instructions are written as series of 0's and 1's, and a symbolic machine language, also known as assembly language, in which instructions are expressed using human-friendly mnemonics. Both languages do exactly the same thing, and are completely equivalent. But, writing programs in assembly is far easier and safer then writing in binary. In order to enjoy this luxury, someone has to translate our symbolic programs into binary code that can execute as-is on the target computer. This translation service is done by an agent called assembler. The assembler can be either a person who carries out the translation manually, or a computer program that automates the process. In this module and final project in the course we learn how to build an assembler. In particular, we'll develop the capability of translating symbolic Hack programs into binary code that can be executed as-is on the Hack platform. Each one of you can choose to accomplish this feat in two different ways: you can either implement an assembler using a high-level language, or you can simulate the assembler's operation using paper and pencil. In both cases we give detailed guidelines about how to carry out your work.

20 Student
reviews
Cost Free Online Course (Audit)
Pace Upcoming
Provider Coursera
Language English
Certificates Paid Certificate Available
Hours 5-10 hours a week
Calendar 6 weeks long
Sign up for free? Learn how
+ Add to My Courses
Learn Data Analysis udacity.com

Learn to become a Data Analyst. Job offer guaranteed or get a full refund.

Advertisement
Become a Data Scientist datacamp.com

Learn Python & R at your own pace. Start now for free!

Advertisement
FAQ View All
What are MOOCs?
MOOCs stand for Massive Open Online Courses. These are free online courses from universities around the world (eg. Stanford Harvard MIT) offered to anyone with an internet connection.
How do I register?
To register for a course, click on "Go to Class" button on the course page. This will take you to the providers website where you can register for the course.
How do these MOOCs or free online courses work?
MOOCs are designed for an online audience, teaching primarily through short (5-20 min.) pre recorded video lectures, that you watch on weekly schedule when convenient for you.  They also have student discussion forums, homework/assignments, and online quizzes or exams.

20 reviews for Coursera's Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)

Write a review
3 out of 3 people found the following review useful
2 years ago
profile picture
José Diaz Seng completed this course, spending 3 hours a week on it and found the course difficulty to be medium.
A year before I took this course I had already read the part of the book on which the course is based and done most of the exercises, so the time I spent per week was mostly spent watching the videos and reading some additional material. Without preparation I assume it would have taken me about 5-6 hours per week. I h Read More
A year before I took this course I had already read the part of the book on which the course is based and done most of the exercises, so the time I spent per week was mostly spent watching the videos and reading some additional material. Without preparation I assume it would have taken me about 5-6 hours per week.

I heartily recommend the book as well as the online course if you want to make the very rewarding experience of knowing from first principles how a computer can be built. The course is very focused and the architecture of the (virtual) computer cleverly chosen to allow to reach that goal in just a few weeks. There is very good supporting software where you can emulate all the components you build and debug them, giving you essential feedback. The online evaluation of the exercises worked flawlessly.

I very much liked the lectures which were delivered in a very friendly and clear way by Professors Nisan and Schocken, especially the end-of-week lecture where they jointly discussed FAQs.

As soon as I have some spare time I will work through the second part of the book in preparation for the second part of this course, which I hope will start in the near future.
Was this review helpful to you? YES | NO
4 months ago
Farsan Rashid completed this course, spending 7 hours a week on it and found the course difficulty to be medium.
Even with 1+ year professional experience in software industry it was not clear to me how a program written in high level language gets executed in machine level and "Nand to Tetris" is exactly the course that I was looking for. Building a computer from scratch sounds scary as computer is a complex machine consisting o Read More
Even with 1+ year professional experience in software industry it was not clear to me how a program written in high level language gets executed in machine level and "Nand to Tetris" is exactly the course that I was looking for. Building a computer from scratch sounds scary as computer is a complex machine consisting of memory unit, CPU, hardware devices and more than that you have to understand computer architecture to make them work together. True beauty of this course is it has perfectly organized all these complex topics in such a way that it becomes very easy for the learner to proceed step by step.

Pros:

1. Perfectly organized

2. Course assignments are fun and engaging

3. Great opportunity to build a computer from scratch

4. Well balanced combination of knowledge and implementation

Cons: 1. Hardware simulator provided with the course materials is not that user friendly.

Difficulty: Medium or easy if you have programming experience. It is completely fine if you do not have programming experience but you have to put a little extra effort.
Was this review helpful to you? YES | NO
3 out of 4 people found the following review useful
2 years ago
Mayank Jain partially completed this course, spending 5 hours a week on it and found the course difficulty to be medium.
Its one of the best course I've taken so far (Among Proglang at coursera). You get to build the whole computer hardware in Part 1, from a Nand gate to building half adder to full adder to ALU to memory to CPU to assembler (and write some assembly code as well!) I highly recommend this course to anyone whose serious a Read More
Its one of the best course I've taken so far (Among Proglang at coursera).

You get to build the whole computer hardware in Part 1, from a Nand gate to building half adder to full adder to ALU to memory to CPU to assembler (and write some assembly code as well!)

I highly recommend this course to anyone whose serious about computer science. You can't beat this course in terms of "hands on"!

Just Fantastic!
Was this review helpful to you? YES | NO
2 out of 2 people found the following review useful
a year ago
profile picture
Anonymous is taking this course right now.
It is a very good course. Thank you very much. Also the book is good too.

Also I highly recommend to read 'Code' by Charlez Petzold
Was this review helpful to you? YES | NO
2 months ago
profile picture
Alex completed this course, spending 8 hours a week on it and found the course difficulty to be hard.
Absolutely amazing course. The teachers are clear and easy to understand, the videos are high quality and contain great (and very useful) visual material to supplement the content. The graded assignments are quite difficult if you're new to low-level hardware, so you'll really rack your brain trying to complete them. I Read More
Absolutely amazing course. The teachers are clear and easy to understand, the videos are high quality and contain great (and very useful) visual material to supplement the content. The graded assignments are quite difficult if you're new to low-level hardware, so you'll really rack your brain trying to complete them. I recommend buying the book as well, and reading the chapter before watching the videos for that chapter. I also suggest reading the discussion forums for help with assignments. This is an extremely high quality course in terms of content, assignments, and mind-blowing knowledge you'll obtain at the end. The assignments really help cement the ideas and concepts in your head - so it's not just a memorization experiment. Worth every penny.
Was this review helpful to you? YES | NO
2 years ago
Abhijit completed this course, spending 7 hours a week on it and found the course difficulty to be medium.
This is the first MOOC for which I have a verified certificate.

It revised my concept from engineering days and helped me understand sequential and computational circuits better.

The use of simulator give feel of developing actual computer and I was able to start taking more courses in computer architecture and assembly programming post this course.

Was this review helpful to you? YES | NO
2 years ago
profile picture
Anonymous completed this course.
This is a great course. It takes you on a full journey of starting with a simple virtual electronic gate and allows you to build virtual computer and add OS to it. How cool is that!

You'd learn a lot of interesting intricate details about hardware and computers. I very much recommend this course.
Was this review helpful to you? YES | NO
3 months ago
profile picture
Anonymous completed this course.
Best MOOC every created. Period. The course is very well organized and the projects can be challenging but it is so rewarding to get it done. Just do it.
Was this review helpful to you? YES | NO
1 out of 1 people found the following review useful
2 years ago
profile picture
Pawel Mirecki completed this course.
Was this review helpful to you? YES | NO
1 out of 1 people found the following review useful
2 years ago
Gregory Deangelis completed this course.
Was this review helpful to you? YES | NO
10 months ago
profile picture
Alex Dawson completed this course.
Was this review helpful to you? YES | NO
7 months ago
Abhilash Vj completed this course.
Was this review helpful to you? YES | NO
a year ago
Сергей Бадулин partially completed this course.
Was this review helpful to you? YES | NO
2 years ago
profile picture
Aleksandr completed this course.
Was this review helpful to you? YES | NO
a year ago
profile picture
Alex Ksikes completed this course.
Was this review helpful to you? YES | NO
5 months ago
Jon Ingram completed this course.
Was this review helpful to you? YES | NO
5 months ago
Rodrigo Proença completed this course.
Was this review helpful to you? YES | NO
a year ago
Alexander Todorov completed this course.
Was this review helpful to you? YES | NO
2 years ago
Dontomato is taking this course right now.
Was this review helpful to you? YES | NO
10 months ago
Alexey Filatov completed this course.
Was this review helpful to you? YES | NO