HN Academy

The best online courses of Hacker News.

Hacker News Comments on
Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)

Coursera · Hebrew University of Jerusalem · 112 HN points · 38 HN comments

HN Academy has aggregated all Hacker News stories and comments that mention Coursera's "Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)" from Hebrew University of Jerusalem.
Course Description

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.

HN Academy Rankings
  • Ranked #13 this month (apr/may) · view
  • Ranked #16 this year (2024) · view
  • Ranked #10 all time · view
Provider Info
This course is offered by Hebrew University of Jerusalem on the Coursera platform.
HN Academy may receive a referral commission when you make purchases on sites after clicking through links on this page. Most courses are available for free with the option to purchase a completion certificate.
See also: all Reddit discussions that mention this course at

Hacker News Stories and Comments

All the comments and stories posted to Hacker News that reference this url.

Was the first time programming clicked. It reminded me of most math books I have used, an explanation of the topic and then tons of problems/examples to solidify/learn the concept. Most other programming books I had used had almost no examples or practice problems. for learning about how a computer worked. Again it clicked for the same reason. Examples and practice problems instead of just descriptions.

> Thus, I am interested in some resources to learn/re-learn more about CS, everything from foundational concepts to more practical (e.g. how does a computer work at the hardware level).

For information on how the computer works at hardware level and how software interacts with it, following two free courses will help:

As you have background in mathematics, any book on algorithms will be an easy read for you. For data-structures the free book should suffice.

For languages, if you have mathematics background, then start with functional programming e.g. Haskell, Clojure. And also start with Python.

That is all it is to CS ;)

For domain specific, then you will have to look at specific text or courses e.g. machine learning, graphics, databases, distributed systems, operating systems etc.

* How to Code: Simple Data and How to Code: Complex Data on edX. Taught by Gregor Kiczales, of Common Lisp and CLOS fame. Uses Racket and graphical programs to teach.

* The From Nand to Teris project, The Elements of Computing Systems: Building a Modern Computer from First Principles book, and/or Coursera course. Builds a hardware stack for a CPU and then a software stack (assembler, VM, high-level language).

* The How to Design Programs book. What the edX course above is based upon.

* Structure and Interpretation of Computer Programs (SICP). Uses Scheme. One can use Racket with the `#lang sicp` language.

YouTube playlist of the course by the authors:

* Thinking as Computation: A First Course. Uses Prolog to solve problems of thinking.

* Turtle Geometry: The Computer as a Medium for Exploring Mathematics (shares an author with SICP). Uses Logo to explore turtle geometry/graphics. Can use any modern Logo implementation.

* Starting Forth. Uses Forth.

* Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction and also The Nature of Code: Simulating Natural Systems with Processing. Uses Processing and p5.js (the JavaScript version of Processing).

The author's YouTube channel:

If you want pacing & support for Nand2Tetris, Coursera has it split into two courses. I've done the first from NAND gates to a working CUP & assembler and can testify it's worthy. Coursera loves to have content sales, so if you're not in a rush you can pick it up for cheap and have their (petty yet ego boosting) certificate of completion to read over one morning with you Cheerios (and then put away in a drawer to be forgotten). Here's the two links:

Part I - Part II -

Some day I hope to pick up Part II, but Part I was still a lot of fun!

Mar 08, 2021 · 1 points, 0 comments · submitted by birriel
nand2tetris teaches compilers backwards.

For that matter, they teach the whole computer backwards. Students start with NAND gates and implement a computer in a hardware definition language. They then implement an assembler for that hardware.

The next step is to implement a virtual stack machine, written in that assembler.

Then the students implement a compiler for an object-oriented language similar to Java. The target for the compiler is the stack machine language. This is done in two passes: lexing and a PEG compiler.

Finally, a simple OS is implemented.

In most courses, if you copy back what has been covered, you will have no problem completing the class. But in nand2tetris, some of the key material is omitted from each stage. You have to figure it out yourself.

Course is available for free on Coursera:

Part 1 - (hardware projects/chapters 1-6)

Part 2 - (software projects/chapters 7-12)

Do the lectures offer anything on top of just reading the book?
The downside is that part two is the software stack and the software grader only supports Python and Java.
It's reasonable to support one great programming language along with Java, which is kind of a market standard.
I didn’t say it wasn’t reasonable, but it is a downside for those wanting to do something different.

I’d prefer they tested emitted code, that way you can use anything you want.

They'd need to maintain trusted sandboxed environments for every supported compiler/interpreter. That's a lot of work.
Not when I took it! I did most of those assignments in Haskell (a choice I came to regret). Double-checking and it seems the grader supports the following languages: C, C++, C#, Elixir, Erlang, Go, Haskell, Java, Lua, Node.js, Perl, PHP, Python 2.7, Python 3, Ruby, Rust, Scala, Swift.
Oh really? I was going off their own FAQ since the graded items requiring paying, and I didn’t want to do it if I couldn’t use the languages I wanted, namely F# and Racket.

From the FAQ:

> > Which programming language do I have to use in order to complete the assignments in this course?

> We expect learners to submit assignments in any version of Java, or Python. We will assume that you have basic programming ability in these languages, including a basic ability to understand and write simple object-based programs.

So is their FAQ out of date I guess?

Yeah, I guess the FAQ is out of date. Think you should be to sign up for free if you want to check for yourself. I highly recommend it! And F# would be a pretty great language for this course, I think. Looks like no Racket (or any Lisp) support, though.
Yea, I have already done the first course part and then the assembler, which is in F# and linked in one of my other comments.

Thanks for letting me know about the extended grader support.

You are probably looking for the videos on coursera [1].


Thanks. Even though I am not the op
Nand to Tetris: how a computer is built from the ground up. Starting from nand logic gates all the way to OO programming

Seconding this. It's the most fun I've ever had on a technical project (with the possible exception of tptacek's, and really opened my eyes to all the problems you have to solve to get a working computer.

Note: you can also complete all the course materials just by going to

My presentation slides promoting nand2tetris to the Austin python group:

I am going to take this next! I am excited to see what it has to offer.
Have never done the course, but I did work through the entire book some years ago and it was an intensely rewarding experience.
The course is good, the book is better, in my opinion. Although it covers the same, but I like its presentation much better than the video course.

Nisam/Schocken: "The Elements of Computing Systems"

I have only finished the hardware part, so far, but skimming the rest I can't find Tetris anywhere. Is that really missing, although it's in the title?

(I know that you can program Tetris on the machine you build in the course, but is it an exercise somewhere?

On Coursera, if I remember right, the first course gets you to the point where you have a CPU that can run machine language and an assembler. They give you an assembly version of Tetris that will run on what you built.

In the second course you build the programming language that could be used to write Tetris, though I don't think you actually go through it as an exercise.

The second edition of the book is actually slated for release in July. You can preorder it on Amazon.
One section asks you to learn Jack (The high-level programming language) by writing a medium-complexity program. The goal of the exercise is not to get proficient in Jack (which is a Java-like-language), but to just learn it well enough to implement the compiler.

I wrote a Tic-Tac-Toe variant - but you could write anything, including Tetris.

Jun 08, 2020 · 1 points, 0 comments · submitted by tams
1. CS50 [difficulty level: medium, has certificate: Yes]

2. Algorithms [difficulty level: hard, has certificate: No]

3. Nand2Tetris [difficulty level: ok, has certificate: Yes]

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

and then part 2:

[Both courses are free]

These are fantastic courses, by far the best MOOCs I have ever taken. I went into them knowing nothing about computer architecture, and by the end of the first course I was able to design a fully-working digital computer in Logisim.

While other courses consist of lectures + text content, with Nand2Tetris the course is practical. The authors have developed a complete software system to allow you to complete the course:

* A simplified hardware programming language to design the ALU, CPU, clock, RAM, etc..

* A hardware simulator and debugger to allow you to test the hardware that you develop

* An assembler for the assembly programs you write for the computer

* A compiler for the higher-level programs you write for the computer

I'm probably banging-on about this course more than I reasonably should, but that's just because I enjoyed the course so much!

Oh, I was hoping the development of an assembler and a compiler was a part of the course.

How useful would that course be for someone who knows about computer architecture, has coded in assembly, understands how compilers work, etc...?

Alternatively, would this course be useful/accessible for complete beginners, e.g. mid/high schoolers?

I have to also mention here. Similar idea, but all presented as an interactive, browser-based game. Start with nand gates and build up to a functioning computer. You never get to tetris, but it's great and super easy to start playing/learning. Delightful.
polycaster You‘re welcome.
Oh man, a big Thank You. I kind of know where I'll be spending 10-12 hours in the next few days.
>Learn whatever assembly language first

On this front, I can highly recommend these two resources, preferably in this order for someone totally new to assembly:

NAND to Tetris, a course that will have you build an emulated general-purpose CPU from first principles even with no prior knowledge. You'll learn exactly about registers and memory by making them. I even recommend this to non-hardware people because the way they divide each layer of complexity is great practice even in software.

Microcorruption, a series of incrementally difficult MSP430 (an easy-to-understand 16-bit instruction set) exploitation exercises in the browser:

These are both geared towards being a gentle introduction to assembly and CPU architecture principles. They don't touch certain facts of X86/64 processors like pipelining or variable-length instructions, but IMO those are best left until you're comfortable with the basics.

Little warning, Microcorruption may be no longer monitored at this time. Account registration is not automated.

A hacker I closely follow tried to play Microcorruption during a Twitch broadcast, and, to my great disappointment, he was unable to due to lack of response.

Luckily their "Hall of Fame" is open for anyone to see. And some of the accounts in there are pretty obvious junk accounts with the usual junk passwords. Would probably take like 5 tries to "brute force" your way in, which given the context of the site would even seem fair game.
I agree that just about nobody would care in spirit.

It should probably at least be explicitly noted by anyone considering doing so: I'm sure that's still super illegal.

.. in the United States
That's fair.

In any case, I should probably write here that I have since tested account creation with another email and received the activation link right away.

I also recommend Xeno Kovah's OpenSecurityTraining courses on YouTube, some of which are specifically dedicated to assembly. The audio quality can sometimes be pretty bad, but the information is good. Though they try to obfuscate things a little bit, these are clearly workshops given to researchers at Mitre, the CVE project maintainer.

For those interested.

> NAND to Tetris

The book version is also great, and suitable for self-study if you prefer to learn that way:

+1 for Nand to Tetris.

As someone who came to computing through high level software and a little later than many (I wasn't dismantling appliances at age 5 like you hear in a lot of people's origin stories) this was a really empowering ground-up introduction to hardware architecture.

One of the few Coursera courses [1] I actually finished and found rewarding, challenging and fun throughout.


The first half of nand2tetris[1] (projects 1-6), which corresponds to their first Coursera course[2] is a great introduction to the digital side of electronics. The second half is more general purpose computer and OS specific but probably still pretty useful. I've only finished up to chapter 5 as of right now, so I can't say anything definite.



The best MOOC course I have taken this year is the one I'm currently doing. It is called nand2tetris [1] where you actually build a 16 bit computer all the way from nand gate. Along the journey you will be building the memory, operating system and also writing a compiler. You can follow my journey in tweets [2].

Another great course I'd recommend is Big History[3]. Like nand2tetris,it gives you a great overview of the entire history of our being. From Big Bang to 2018.

Also, I am looking for some great online courses on Distributed systems. It would be good if assignments are challenging and where you have to write a lot of code.

[1] Nand2tetris:

[2] My Nand2tetris journey in tweets:

[3] Big History Project:

Edit: added extra spaces

I have spent a lot of time taking online courses. Here are my favorites.

CS50 ( - Best Intro to Computer Science

Nand2Tetris I and II ( - Build a computer from logic gates up to a compiler, this is the best class I've ever taken.

Agile Development Using Ruby on Rails ( - Great introduction to web development and software engineering principles

I've also been reading some technical books. Would definitely recommend

Modern Operating Systems - Tanenbaum Designing Data-Intensive Applications - Kleppmann

I'm also a self-taught web dev, trying to learn more about the fundamentals. I've been trying to get through this course, and while the going is slow, it has been pretty incredible:

I'm not familiar with low-level, so I'm not sure how "low" you mean, but I've begun the NAND2Tetris course on coursera and it's pretty great so far. You basically implement a VM from scratch:
Wow I just did the same course this week too.

It's a great course. Though I ended up writing the assembler in Python rather than C.

I actually took that early this year and LOVED it, and was looking for a good followup course. I was toying around with CS140e (also uses RPi 3 and Rust)[1] but this one looks more appropriate.


This might seem like a roundabout way to start, but I'd recommend Code by Charles Petzold[0].

It starts out with just wires, switches, and relays, and as the book progresses he goes through the process of building up a simple CPU and RAM one step at a time. The book even walks you through coming up with opcodes and assembly language.

Even if you already know this stuff, I found the book was helpful in developing an intuitive feel for how everything works and fits together.

After reading it, you'd probably have a good mental model of how you'd want to approach writing an emulator.

The Nand to Tetris courses and their accompanying textbook would probably be helpful here too[1][2].

[0] [1] [2]

There is a book "The Elements of Computing Systems: Building a Modern Computer from First Principles"[0] that is often called "From NAND to Tetris". This has you building a computer simulator from the ground up (NAND to Tetris). There is a website[1] and a Cousera course[2]. And a TED talk[3].





Nand 2 Tetris[1] is a good starting place. You should get a good view of how the different level interact. Coursera have two cources [2][3] that cover the same material as the book

[1] [2] [3]

I second this course. It's awesome. The next step from there is probably Coursera's VLSI course, starting with It's all about how real-world VLSI CADs work.
Thanks! I finished Nand2Tetris and was wondering where to look for a good next step.
I'll take a stab at a newb-friendly explanation, bearing in mind I'm only slightly less of a newb, but have at least studied this stuff to some extent and have played with, which is a game about maliciously editing machine instructions. Onwards!

CPUs have a fixed instruction set. Add, subtract, increment by 1, and so on. These instructions in turn are represented in machine language as a binary string, which represents signals that get sent to the CPU's processing center, the ALU (Arithmetic Logic Unit). The ALU has a number of input ports, with each one corresponding to a different fundamental operation.

There are a number of programs capable of taking an executable and providing a step-by-step breakdown in machine language (which makes sense intuitively because the machine has to do this for itself anyway in order to execute the program). So once you have the machine language instructions, you then study it to see what different sets of instructions are doing. This is made somewhat easier by the fact that computers run through instructions linearly (with the exception of jumps, but you also know that jumps represent some sort of logic operating on input, so those are informative as well).

Although this would take forever to do manually, there are programs that aid in breaking machine language into easier-to-understand chunks, like IDA.

Anyway, once you understand what different chunks of instructions are doing, then you can decide how you want to alter the program. You can use a hex editor for the actual editing (I assume professionals use something different, but some game modders use hex editors), which simply lets you change the individual bits on your drive (if this sounds impressive, realize that every time you save a file or something, that's what's going on at a large scale).

If you want a gentle, newbie-friendly introduction to CPUs which will make a lot of this stuff click better, I highly recommend the NAND to Tetris course, which has a video series on Coursera:

Pretty sure that's part of the first course (, and this one starts above the hardware.
+1 to Code (Petzold). I would absolutely start with that. One of my favorite books. The build a computer course from coursera ( is the natural next step after reading code.
Jun 02, 2017 · indigochill on Network Protocols
Depending on how deep you want to go: - This is a fantastic no-prerequisites course that has you actually implementing a functional CPU in 6 weeks starting from building basic logic gates out of NAND gates. There's a hands-on project every week to help you solidify your understanding of the lectures. The resources are also all available at their site: In case that sounds intimidating, I have no formal CS education either and couldn't implement any of the basic logic gates before I took the course, and I built a CPU by the end so I'm confident others can too. They have a "Part 2" to this course which has you build from the CPU to a functional operating system which would get you an introduction to how kernels work in general, although they recommend some programming experience for that part.

Hacking: The Art of Exploitation - Despite the name, this book is actually an excellent introduction to low-level behavior both on the CPU and on networks (it's split into distinct sections to cover each topic). I would recommend picking this up after the course linked above, because it's somewhat brief with its explanation of CPU architecture. A beginner's course in C programming might also be advisable since this does use some basic C code which might be challenging if you've never been exposed to it before.

I am taking a great coursera course on the very basics of a computer (uses a hardware simulator to build the chipsets necessary to build a computer). It is VERY intro-friendly and gentle, including teaching basic Boolean algebra. Also can be very hands on, which is what I really like about it. Might be a good fit!

+1, along with the author's course "Build a Modern Computer from First Principles: From Nand to Tetris"
Working through the class on Coursera now, and it's a lot of fun.
I wonder if, in that same spirit, it's possible to make building, together , a complex microcontroller , a fun project ?
That classes basically builds a microcontroller. It's Harvard Architecture with a split iROM and dRAM. Simple ALU, 16 bit CPU. You'd need one hell of a bread board to physically build it, though.
Well there is the FAP80 now.
Dec 19, 2016 · 94 points, 17 comments · submitted by ravanpao
If you are self taught, you owe it to yourself to take this course. It's the best tie together class I've ever seen, and made a world of difference to me.

Note that this is one the first half of the coursework, I'm still waiting for the second part.

Seriously, if you're self taught, and have been writing code for a while, this and a great compiler course will take you to a new level.

I'm self-taught. This was the first book that actually answered my question "but how does it work?". I'd been getting incomplete and misguided answers for years when I finally stumbled across this book in an HN thread, and I was finally able to put the full picture together.
I did a course based on this book a while back, and while I didn't quite finish it, I did get a lot of enjoyment from it.

I think I probably did it here. Or at least used this page as reference.

For some background
I had avery similar course to this in college. We build a 4-bit machine (with a very limited instruction set) from scratch (well from basic logic gates and RAM). For the final project grade the professor ran a test program through it and saw if the output matched what was expected.

We actually physically built it on a breadboard.

It was fun and I learned a lot. Hopefully this is a similar experience for those who take it.

Looks like an interesting course, though the submission process seems unpleasant compared to other courses I've taken in the past.
Amazing... I really love this course. I teach it to my students it is great!
I've been going through the book and it's been great fun so far.


Interesting. Anyone know if it's updated from [0]? Wonder if it'll just use the same Software. The book [1] was interesting.



Looks like it's still the same course although with video lectures added
I finished it a couple of months ago. It uses the exact same structure and software as described in the book (HACK language, etc).

The included hands-on projects made it more fun and interesting. Basically you'll build a simple computer from the ground up, starting with flip-flops and going all the up up to ALU, memory and CPU.

The grader works well, so you can submit your code and it'll grade you in realtime. You can finish it in less than a month, if you have experience with electronics and Boolean logic.

I've gone through the book and got as far as building the computer, writing the assembler and running some programs on it. Does the course go beyond this? I haven't built the virtual machine or written the compiler, but it looked like from the description of the course, they didn't do that either.
According to the Nand2Tetris site[0], this is just part 1 and only covers chapters 1-6. Part 2 will cover chapters 7-12 but looks to be still in development.


> Course by Hebrew University of Jerusalem

> Project 1 due December 25th

Sadly it looks like the course stops at week 6 after the assembler has been implemented. The next steps in the book are to implement the VM, compiler and develop programs in the high level language you've implemented.

I started the book back in August and got as far as implementing the lexical analysis in the compiler, I was kinda hoping this course would give the the push to finish everything.

They say in the first video that the software part (from week 7) will follow in a second Coursera course.
I've been waiting for that second course for years now...
Nov 23, 2016 · 3 points, 0 comments · submitted by stpapa
The authors also created a course on Coursera [1] which is also worth a look. Although it only covers the first half of the book (up to Assembler Language.) The authors have promised part 2 but it hasn't been released yet.


I really like nand2tetris [1] in which one builds a computer from NAND gates upwards. You build the ALU etc., an assembler, compiler, a OS and VM on which you can run your own version of tetris, snake, whatever. It doesn't teach programming directly, but could be used to teach programming when the first parts are reached that require programming (I believe it was Chapter 6 - Assembler).

The hardware part of the course is also available on coursera now. [2] Previous discussion on hn [3].




Thanks to the author for the heads up, would be real shame if these courses are removed without someone downloading all the material first (I don't care if it's against the ToS, I still think a torrent is the way to go, free education has a greater value than copyright protection).

I'm a bit confused about which courses will be removed and which ones will stay. Is there a list of courses that are present on the old platform but not on the new platform? Also, I don't know where I'd access the old platform and where I'd access the new platform. Am I right in thinking this is a course on the new platform?

If so, where do I go to see the old platform?

Cool, haven't thought about that. I probably need to get an FPGA. Really liked the book "The Elements of Computing Systems" [1][2] in which one builds a computer from NAND gates upwards, a compiler, vm and finally a simple OS with applications. The hardware part of the course seems to be on coursera now as well. [3]




That's some really neat stuff that I somehow missed in prior research. Thanks for the links. I'm particularly going to have to take another look at the paper that details their methodology for building systems ground up. The abstraction process and samples.
Jun 23, 2015 · e19293001 on Megaprocessor
I just finished the course from coursera It is a very good start learning from the course or from the book for those who are interested to build something like this. I highly recommend it.
Sometimes I do find programmers that do not know how to, say, install a linux distro, or at a lower level, don't understand what a data bus is, or how one bit of information is actually stored in a computer.

> Learning how to make car parts from scratch gives younger workers insights they otherwise wouldn’t get from picking parts from bins and conveyor belts, or pressing buttons on machines.

This is also the spirit of the nand2tetris [1] course, currently running on coursera [2]. The book is a really entertaining read too. Depending on how familiar you are with electronics you may be able to outpace the video course quite a bit.


> “Fully automated machines don’t evolve on their own,”

not yet... :p



I know a computer science professor that asked me how to make a website as recently as 2007
Not entirely sure what your point is here but I assume that you mean he should have known.

Can't imagine why a computer SCIENCE professor would be expected to know how to make a website any more than my Newtonian mechanics professor would have been expected to know how to build a car.

Apr 12, 2015 · 2 points, 0 comments · submitted by pykello
Mar 24, 2015 · 3 points, 0 comments · submitted by AlexeyBrin
Mar 24, 2015 · 7 points, 0 comments · submitted by signa11
Feb 17, 2015 · 1 points, 0 comments · submitted by ludicast
HN Academy is an independent project and is not operated by Y Combinator, Coursera, edX, or any of the universities and other institutions providing courses.
~ yaj@
;laksdfhjdhksalkfj more things ~ Privacy Policy ~
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.