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

share ›
‹ links

Below are the top discussions from Reddit that mention this online Coursera course from Hebrew University of Jerusalem.

What you’ll achieve: In this project-centered course* you will build a modern computer system, from the ground up.

Logic Gate Computer Architecture Assembly Languages Hardware Description Language (HDL)

Reddsera may receive an affiliate commission if you enroll in a paid course after using these buttons to visit Coursera. Thank you for using these buttons to support Reddsera.

Taught by
Shimon Schocken
Professor
and 1 more instructor

Offered by
Hebrew University of Jerusalem

Reddit Posts and Comments

6 posts • 273 mentions • top 50 shown below

r/brasil • post
63 points • rodrigomlp
Nand2Tetris, o melhor curso online já criado

Apenas gostaria de compartilhar aqui uma das maiores descobertas que já tive na internet, um curso no Coursera chamado Nand2Tetris que começou essa semana (acho que dá pra se inscrever ainda!).

Imaginem um curso onde o professor passou 5 anos planejando cada detalhe da aula visando o maior aprendizado do aluno no menor espaço de tempo. Eis o que esses talentosos professores de Israel conseguiram alcançar. A parte I no curso que presume 0 conhecimento prévio de computação te leva do tijolo básico dos computadores, a porta lógica NAND(eles explicam, não se preocupem!), até você construir o seu próprio computador e escrever um jogo de tetris para o computador que você mesmo construiu. Tudo isso em 13 semanas =)

Como eu sei que tem muita gente aqui no Reddit curiosa e que gosta de aprender pensei que seria uma boa compartilhar. Se alguém quiser participar criei um Slack para compartilhar ideias e duvidas sobre o curso. Se metade das minhas aulas fossem tão boas quanto esse curso eu teria ganhado um Nobel (brincadeira haha).

Obs: Acabei não mencionando, mas a construção do computer é feito em um simulador simples e gratuito fornecido pelos autores do curso! O site do curso é esse aqui: https://www.coursera.org/learn/build-a-computer

Abraços

r/programming • post
55 points • codesuki_
Course starts today: Build a Modern Computer from First Principles: From Nand to Tetris
r/programming • post
30 points • ApoMechanesTheos
NAND2Tetris course on Coursera [new session]
r/INTP • post
29 points • Appbeza
"From Nand to Tetris." Quite an interesting course I've been taking recently. Read the overview to see if it's for you. You build a computer system. It's free and everything is done in simulations.
r/programming • comment
27 points • sake_92

Also https://www.nand2tetris.org/
Not only you make real CPU from simple circuits, but also an assembler, a VM, a compiler and a mini OS!!!
There's also free (without certificate) 2-part course on Coursera, with videos etc!
https://www.coursera.org/learn/build-a-computer

r/compsci • comment
11 points • plexust

I found this free Coursera course to be pretty helpful in learning computer architecture (and it includes lecture videos): Build a Modern Computer from First Principles: From Nand to Tetris.

r/FPGA • post
38 points • amurices
Step-by-step on how to become a competent hardware programmer?

I'd love to get you guys' thoughts on how to at least start a journey of learning how to build circuits and reason about them. I've made posts related to this before, because I have a product in mind (https://www.reddit.com/r/FPGA/comments/a3re63/beginner_question_should_i_use_fpga_for_a/) that depends on a solid hardware design that I'd have to come up with myself - and I just have no idea where to start. Now I've decided that I want to start at the beginning; but I just don't know where that beginning is. I've seen books that seem standard recommended to other people, but I wouldn't be a good judge of whether they're good for people who have no experience with circuit/hardware designs.

​

For reference, I'm a software guy. I'm into functional programming, and the most contact I've had with FPGAs and HW designs is playing around with Vivado for a couple of months at my last job, and doing the first part of the Nand2Tetris course on coursera (https://www.coursera.org/learn/build-a-computer).

​

What books and/or tutorials do you think I should start with?

r/learnprogramming • post
29 points • walking_pineapple
How and where to learn about low-level concepts?

I apologise that this isn't a direct programming question, but after checking out the other cs/programming subreddits, this seemed the least inappropriate place to ask something like this.

So I am CS student who feels like his curriculum doesn't go into much depth on lower level subjects. To clarify, by low-level I mean the stuff right above the electrical engineering level computer architecture type of stuff. I suppose not having enough knowledge in the area makes it hard to precisely state exactly what I want to learn :P, but I hope that's enough. Basically I feel like there's still too much of the computer that feels like black magic to me, and when someone starts talking about caching or branch prediction, I look at them as some kind of wizard.

My goal is to first of all satiate my curiosity about these subjects, but also hopefully to make me a better programmer who has a better idea of what the hell is going beneath the layer I am working at. I am not trying to become a computer engineer, embedded systems programmer or anything like that.

I should also note that I do sort of have a basic idea of these things, but my knowledge is sort of scattered all over the place, and probably most of it is outdated or misunderstood. I want to sort of try to tie it together into this coherent whole.

To further clarify what I am looking for, here are a couple of resources I've found myself for getting started that seem to align with what I want to learn:

So my question is, what resources would you recommend for someone like me? Are the above any good? Is something better than the others? Where to start and where to go from there?

r/computerscience • comment
6 points • QuietlyReading
r/learnprogramming • comment
6 points • grrrranimal

The authors of the book have a free course on coursera, which has a great added benefit of allowing assignments to be submitted and auto-graded so you actually can get feedback. And a forum if you want to ask specific question: https://www.coursera.org/learn/build-a-computer

Happens to start today too...

r/EmuDev • comment
5 points • stillmotion

If you don’t yet know how to program, I would recommend doing the first 5 units of this amazing course, NAND2Tetris: https://www.coursera.org/learn/build-a-computer

You build a computer from scratch, in software they provide for you, starting with the very basic building blocks and work your way up to functioning hardware. This won’t tell you how to program in a specific language, but will guide you through a conceptual understanding of all the components of computer hardware and how they all work together. After doing it myself, reading Gameboy datasheets and implementing it all in C became very straightforward to understand.

r/computerscience • comment
15 points • wsppan

Didn't help me before the degree as I majored in Information Studies but what really helped me later as my career morphed into software engineering were starting my self studies from first principles:

  1. Read Code: The Hidden Language of Computer Hardware and Software
  2. Watch all 41 videos of A Crash Course in Computer Science
  3. Take the Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)

I then took up C programming as my programming language of choice for learning Data Structures and Algorithms, Operating Systems, Compilers and Language Design, Networking, etc... These CS subjects were doable (I would say critical) as self studying due to the 3 first principle subjects I mentioned above.

r/cyberpub • post
4 points • cypunkrs
These courses teach you how to build your own 8 bit computer from scratch
r/learnprogramming • post
3 points • Ard__Ri
Coursera has a free course where they show you how to build Tetris from binary up.

https://www.coursera.org/learn/build-a-computer

r/OSUOnlineCS • post
7 points • idontwanttopickone
Any resources to prep for CS 271 (Assembly)?

I'm looking to get a head start on 271 since I have a very busy fall semester and it's the class I'm most concerned with being that I am not at all familiar with Assembly. Are there any resources that help with this class? I tend to like video-based formats like Coursera, Udemy.

I found this: https://www.coursera.org/learn/build-a-computer

Does this cover some of the 271 stuff? Also it leads to a project that could be good for the resume. 6 weeks in length so pretty good timing as well.

r/ArtisanVideos • comment
3 points • stainedpickle

Check out the NAND to Tetris course on Coursera. It covers a ton of the basics (though not really at the electronics level), and you get to build a virtual computer from scratch (eventually going on to build a basic VM, OS and apps to run on it).

r/WGU_CompSci • comment
2 points • type1advocate

I have an unlimited Coursera subscription and I definitely plan to take this course once I'm ready for C952.

I've already started messing around with the nand2tetris course which is absolutely amazing. I highly recommend it to everyone in this degree. There's a structured 2 part course on Coursera but there's also free versions out there if you Google it.

https://www.coursera.org/learn/build-a-computer

r/NandToTetris • post
2 points • EpicSolo
January 2017 study group

Anyone wants to form a study group over slack/discord/etc.? We can follow coursera(https://www.coursera.org/learn/build-a-computer) and/or the book (The Elements of Computing).

r/computerscience • comment
2 points • bartuka

Maybe this course is what you want https://www.coursera.org/learn/build-a-computer

r/electronics • comment
2 points • cadr

Looks like the book I always recommend has a free https://www.coursera.org/learn/build-a-computer course.

r/Showerthoughts • comment
2 points • the_other_pink_meat

For anyone interested in learning about compilers and such I can highly recommend NAND2Tetris. It's a two part online course where you first "build" your own computer using entirely NAND gates. Then later develop an assembler, VM translator and "Jack" compiler. All up it's 16 weeks worth of highly rewarding project centered work. I did this for fun being an IT professional. But I'd recommended it to anyone who wanted to get a really good understanding of how a modern computer works.

r/learnprogramming • comment
2 points • chaotic_thought

I would use the lectures and do the projects on the corresponding Coursera courses. You can use the book for reference as needed, but from what I've seen the book is best as a companion for the course:

https://www.coursera.org/learn/build-a-computer/home/welcome

There are two courses. The first one focuses on the hardware platform ("Hack") and the assembler. The second one focuses on building a simple operating system and high level language ("Jack").

r/AskReddit • comment
2 points • kaplanfx

This course is much more straight forward: https://www.coursera.org/learn/build-a-computer

It will blow your mind that you CAN learn the basics pretty clearly in just a few weeks.

r/learnprogramming • comment
4 points • tufflax

If you really wanna get to the bottom of things I suggest

I don't really understand what you mean by the "words" that you have to place etc., but if you have a specific example or question I'd be happy to answer. Also, keep in mind that there are many different programming languages, and just because one language is a certain way doesn't mean that all programming is like that. What the computer really does is to just do simple caculations, like adding and subtracting, with binary numbers. All this talk about "access modifiers" like "private", and "methods", etc. are just concepts in C#, they don't necessarily make sense in another language.

r/todayilearned • comment
4 points • Eziekel13

Just in case anyone loves tetris and wants to know how a computer works check out the sites below....They teach you how to build a CPU/computer from scratch and how to program it...From boolean logic gates to nand gates....From binary to assembly code to programing languages...and at the end you get tetris

http://nand2tetris.org/

or

https://www.coursera.org/learn/build-a-computer

r/embedded • post
4 points • mercfh85
CS majors in Embedded field?

So I graduated with a CS major about 6-7 years ago. I've been doing Test Automation at a web dev company for awhile. I still code but it's mostly test/ui automation. I enjoy my job but I long for more coding, and web-dev isn't really something im interested in.

I've always been interested in Embedded, however Im not really 100% what someone who knows C.S. should concentrate on, and what a "typical" embedded dev does as well as how "far down" the rabbit hole they go into logic/gates/etc...

I've been learning https://www.coursera.org/learn/build-a-computer here the past week, and while it's very hard it's quite interesting. I've used Arduino in the past, but it's a little hand-holdy for me. Would a typical Embedded Dev go so far down as writing HDL/etc... or is that more for EE/Circuit designers/etc?

I find it interesting, but wonder if that course is really "helpful" in doing embedded work.

If not maybe this course:https://www.edx.org/course/embedded-systems-shape-world-utaustinx-ut-6-10x I've seen it recommended a lot.

r/learnprogramming • comment
4 points • HelpIProcrastinate
r/learnprogramming • comment
6 points • firesofmay

Highly highly recommended handson material for exactly what you are asking:

http://www.nand2tetris.org

You start with a simple nand gate and build everything upto a game. Everything below the stack is made by you (using simulators, no actual hardwares but you have that aha moment!!)

Mooc on coursera by the same author Part 1 - https://www.coursera.org/learn/build-a-computer

Part 2 - https://www.coursera.org/learn/nand2tetris2

r/rust • comment
1 points • TheWass

Hack is a small assembly language created for the "From Nand to Tetris" book and course. See https://www.coursera.org/learn/build-a-computer. It's an enjoyable class that walks you through computer architecture from basic electronics (nand gates) to memory chips to CPU design to assembly language to writing a higher level compiler for your assembly language so you can build a very simple "OS".

r/AskComputerScience • comment
1 points • mulletlaw

This https://www.coursera.org/learn/build-a-computer is a companion course taught by the creators that is very well done, and totally free.

r/askscience • comment
1 points • y-aji

There is also a really cool course you can take that really delves into what he's talking about online..

Front NAND to Tetris

https://www.coursera.org/learn/build-a-computer

r/programming • comment
5 points • wengemurphy

> Playing around with the Pi and following this Spectre/Meltdown disaster has taught me so much more about how modern processors work than I ever could have learned in a classroom setting over the time span of a couple of weeks

Eventually you'll cover all of this in a computer architecture class (not to discourage you from continuing to experiment and learn on your own time!)

If you want to go super deep, try Nand2Tetris

http://nand2tetris.org/

https://www.coursera.org/learn/build-a-computer

Or this excellent video series on building a breadboard computer

https://www.youtube.com/watch?v=HyznrdDSSGM&list=PLowKtXNTBypGqImE405J2565dvjafglHU

And if you're not ready yet (and you probably aren't) that's fine. There's nothing wrong with revisiting something many times, learning bit by bit. But I will say I once took an assembly language class that turned out to be more like Nand2Tetris, and we were building adders in Logisim within the first few weeks, and this course was offered to students with only 1 or 2 pre-reqs, so it's doable for students with limited experience.

r/cybersecurity • comment
1 points • NetherTheWorlock

At your age, I'd start with the fundamentals. A lot of infosec, involves knowing how computers work at a low level. There is a free class on Coursera called Build a Modern Computer from First Principles: From Nand to Tetris. That will teach you how computer hardware is built starting from gates and working up to high level languages.

r/roblox • comment
1 points • direMitten

For anyone interested in this stuff, I really recommend the first part of this free course:

https://www.coursera.org/learn/build-a-computer

It teaches you how computers work, starting from the simplest logic gates.

r/learnprogramming • comment
1 points • alanone1

I would start off with Danny Hillis' book "The Pattern On The Stone", which is very well written, and has a great introduction to how to make working computer logic from almost anything, included TinkerToys (Danny and Brian Silverman made a whole TIC TAC TOE playing computer from TinkerToys years ago (check it out online).

The progression has some parallels to going from 6 simple chemical elements to eventually define the architecture of a living -- and maybe thinking -- live creature. Computers are simpler by far, but still have a fair amount of detail, and a couple of sticking places (for example the design of the control elements).

I think -- after some physical manipulations -- I'd then get the kid to make some simulated logic gates in a graphical language like Scratch or GP or Etoys. These will allow a few simple things to be made (for example it is easier to make a flipflop and see why it works this way, and to see how one would make it from physical materials).

I think I'd then try to find the simplest logic CAD system and simulator on a personal computer and do some simple organizations that are completely understandable: go from flip flips to making an array that can act as a memory, add address lines and bus lines, etc.

Another fairly simple design and build project is to make a simple ALU that can do a few things and hook it to the address lines.

So far we have something that is about the complexity of an old-time built from scratch model airplane: in the range of some 12 year olds and most 14 year olds, and a very few special 10 year olds.

A working memory and an ALU with busses can be used to show how a typical computer gets works from memory, does something with them and puts them back into memory. This is already quite a project. Note that every part of it is very understandable -- what's tough is the amount of stuff that has to be assembled to make this.

The next level is to build the control part, and this is the first organizational part that is a bit more tricky, and a bit more complex to design and understand. It might be more worthwhile to look at the simplest pedagogical computers rather than trying to build one here.

There are courses -- mostly for college -- that do this entire chain of being with perhaps high school students onwards. A really good one is by Nisan and Schocken at Hebrew University of Jerusalem. It includes a CAD/SIM system and you can do everything from scratch. https://www.coursera.org/learn/build-a-computer

r/learnprogramming • comment
1 points • dougouverson

https://www.coursera.org/learn/build-a-computer

r/AskElectronics • comment
1 points • E_surname

Take a look at the nand2tetris course which has a section on logic gates.

r/beneater • comment
1 points • FredSchwartz

Here’s a free online course using it.

https://www.coursera.org/learn/build-a-computer

r/EngineeringStudents • comment
1 points • newobrain

Check this out. It's free and will guide you through the logic of building a computer. I'm a computer science major and I enrolled in that coursera course a few days ago. I'm going to switch to computer engineering now because my Computer Architecture class has shown me how much fun it is!

If you decide to take the coursera course dm me and keep me updated on your progress. I'll try to help you understand any concepts you don't fully grasp.

r/computerscience • comment
3 points • peroz1

You should try Nand2Tetris, there is also a Coursera version

r/answers • comment
3 points • 2059FF

I highly recommend the Nand to Tetris course, available for free on Coursera, if you want to learn how assembling thousands of gates into a working CPU can be done without too much pain, by carefully subdividing the CPU into a few parts, themselves divided into parts, and so on. Once you know how to make a part, you can use it as a "black box" to design the next level up.

And yes, today's very complicated processors (much, much more complicated than the one you build in Nand to Tetris) are "compiled" in pretty much the same way programs are. The compiler gets a description of the circuitry (some written by humans, some produced by other programs), and produces precise instructions detailing where to put every item, and what connects to what. Such compilers include lots of optimization techniques that try to maximize the use of space, and generally do much better than a human could, simply because they can very quickly analyze millions upon millions of combinations.

The last major CPU's layout that was fully done by hand was probably the MOS 6502, with 3510 transistors.

r/ProgrammerHumor • comment
1 points • bob152637485

Oh goodness, I think it first started around the age of 16, believe it or not from Minecraft. I haven't played the game in many years, but it got me into programming(java) and digital electronics(those silly redstone computers), both of which helped me pursue my electrical engineering career I have now.

My initial digital skills were very much self taught, with minor guides, but I did have a formal digital electronics class as a senior in high school, which corrected a couple of the bad habits I had formed and helped me to know what to look for if I wanted to learn more. Before this, I actually made all of my gates from scratch using transistors lol! I did most of my playing around in an awesome logic gate simulator I found online for free at www.kolls.net/gatesim where I even made a crappy computer within it once.

Specifically regarding the custom CPU and assembly language stuff, the first time I did that was actually a course called Nand2Tetris. Granted, they have several things they oversimplify in my opinion, and the computer structure they use is a bit dated, you WILL get to make a computer from the ground up using their custom HDL language, and at the end of the first part, you get to write several programs in the custom assembly language for said computer. I never did the second part of the course, but I believe you get to make a custom OS, low level language, and virtual machine/high level language, and of course, you get to finish off by programming Tetris. If you are curious: https://www.coursera.org/learn/build-a-computer?

r/C_Programming • comment
1 points • booblaboobloo

  • I would add nand2tetris to the list as a potential alternative to #1. By far the best, fulfilling and challenging course I've done in my life.
  • Watch out for #4, I've learned pointers from that source and later realized the coding styles and syntax conform to C99. The theory in that source also have some loopholes. I'm not an expert yet on them, but these problems have been pointed out to me by some experienced programmers in this sub.

r/explainlikeimfive • comment
1 points • Leodip

Other answer are great ELI5. However, for those of you who are interested in actually learning how a computer works, I strongly recommend the NAND to Tetris course on Coursera.

It takes you from 0 to building a quite inefficient APU and all the other components from there on. It doesn't hide anything from you, so you get to know how everything works.

r/computerscience • comment
1 points • lordvader_31

Build a Modern Computer from First Principles : From NAND to Tetris

This is a great course for the Fundamentals of Computer Architecture and plenty more.

r/cpp • comment
1 points • lothiack

There is a course from the authors of Nand2Tetris at coursera.

r/asm • comment
1 points • tanypteryx

If you would like to go a bit deeper than "just" assembly in understanding what makes a computer tick, look no further than this course:

https://www.coursera.org/learn/build-a-computer (Did it about 5 years ago & I think it's still free if you're not looking for a certificate)

Not only will you design your own ALU from first principles, you'll also write your own assembler.

Granted, the architecture used differs quite a bit from that of a standard PC, but the content of this course serves as a great foundation for further explorations. It did for me, at least.

r/Unity3D • comment
1 points • cfinger

Love it. Especially after taking Nand to Tetris: https://www.coursera.org/learn/build-a-computer

Plz have all the levels add up to building a computer :)

r/dataengineering • comment
1 points • nivenkos

The main things are:

  • Use of sets vs. lists and discussion of computational complexity

  • Use of recursion vs. a task queue/stack to avoid the stack recursion limit (and discussion of why it happens - what a stack frame is, tail call optimisation, etc.)

Plus trivial screening questions on writing a function, nested loops, error handling from API calls, use of regexs, correct handling and parsing of timestamps with timezones, etc.

If you struggle with some of the CS concepts, I'd recommend doing the Nand2Tetris course on Coursera - https://www.coursera.org/learn/build-a-computer - it's really fun, and you'll never forget about the stack vs. heap, or primitive types vs. objects when you have to implement it all yourself.

r/electronics • comment
1 points • zurkog

> the cpu is still this mystery chip to me

https://www.coursera.org/learn/build-a-computer

Can't recommend it enough.