In this project-centered course you will build a modern software hierarchy, designed to enable the translation and execution of object-based, high-level languages on a bare-bone computer hardware platform. In particular, you will implement a virtual machine and a compiler for a simple, Java-like programming language, and you will develop a basic operating system that closes gaps between the high-level language and the underlying hardware platform. In the process, you will gain a deep, hands-on understanding of numerous topics in applied computer science, e.g. stack processing, parsing, code generation, and classical algorithms and data structures for memory management, vector graphics, input-output handling, and various other topics that lie at the very core of every modern computer system.
This is a self-contained course: all the knowledge necessary to succeed in the course and build the various systems will be given as part of the learning experience. The only prerequisite is knowledge of programming at the level acquired in introduction to computer science courses. All the software tools and materials that are necessary to complete the course will be supplied freely after you enrol in the course.
This course is accompanied by the textbook "The Elements of Computing Systems" (Nisan and Schocken, MIT Press). While not required for taking the course, the book provides a convenient coverage of all the course topics. The book is available in either hardcopy or ebook form, and MIT Press is offering a 30% discount off the cover price by using the discount code MNTT30 at https://mitpress.mit.edu/books/elements-computing-systems.
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 15 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.
What's included
2 videos1 reading1 programming assignment
Show info about module content
2 videos•Total 26 minutes
Course Overview•21 minutes
Project 0 Overview•5 minutes
1 reading•Total 5 minutes
Week 1 Overview (start here)•5 minutes
1 programming assignment•Total 60 minutes
Project 0•60 minutes
Machine Language
Module 2•8 hours to complete
Module details
What's included
10 videos1 reading1 programming assignment
Show info about module content
10 videos•Total 187 minutes
Unit 0.0: Machine Language Primer•8 minutes
Unit 0.1: Machine Language Overview•12 minutes
Unit 0.2: Machine Language Elements•17 minutes
Unit 0.3: The Hack Computer and Machine Language•16 minutes
Unit 0.4: Hack Language Specification•10 minutes
Unit 0.5: Handling Input and Output•27 minutes
Unit 0.6: Low-Level Programming, Part I•24 minutes
Unit 0.7: Low-Level Programming, Part II•21 minutes
Unit 0.8: Low-Level Programming, Part III•32 minutes
Unit 0.9: Project 4 Overview•19 minutes
1 reading•Total 10 minutes
Module Overview (start here)•10 minutes
1 programming assignment•Total 300 minutes
Project 4•300 minutes
Virtual Machine I: Stack Arithmetic
Module 3•13 hours to complete
Module details
What's included
11 videos1 reading1 programming assignment
Show info about module content
11 videos•Total 188 minutes
Unit 1.0: The Road Ahead•22 minutes
Unit 1.1: Program Compilation Preview•13 minutes
Unit 1.2: VM Abstraction: the Stack•16 minutes
Unit 1.3: VM Abstraction: Memory Segments•10 minutes
Unit 1.4: VM Implementation: the Stack•17 minutes
Unit 1.5: VM Implementation: Memory Segments•27 minutes
Unit 1.6: The VM Emulator•23 minutes
Unit 1.7: VM Implementation on the Hack Platform•9 minutes
Unit 1.8: VM Translator: Proposed Implementation•12 minutes
Unit 1.9: Project 7: Building the VM Translator, Part I•23 minutes
Unit 1.10: Perspective•17 minutes
1 reading•Total 10 minutes
Module Overview (start here)•10 minutes
1 programming assignment•Total 600 minutes
Project 7•600 minutes
Virtual Machine II: Program Control
Module 4•13 hours to complete
Module details
What's included
10 videos1 reading1 programming assignment
Show info about module content
10 videos•Total 166 minutes
Unit 2.1: Program Control•10 minutes
Unit 2.2: Branching•9 minutes
Unit 2.3: Functions: Abstraction•22 minutes
Unit 2.4: Function Call and Return: Implementation Preview•24 minutes
Unit 2.5: Function Call and Return: Run-time Simulation•17 minutes
Unit 2.6: Function Call and Return Implementation•25 minutes
Unit 2.7: VM Implementation on the Hack Platform•11 minutes
Unit 2.8: VM Translator: Proposed Implementation•10 minutes
Unit 2.9: Project 8: Building the VM Translator, Part II•27 minutes
Unit 2.10: Perspective•12 minutes
1 reading•Total 10 minutes
Module overview (start here)•10 minutes
1 programming assignment•Total 600 minutes
Project 8•600 minutes
High-Level Language
Module 5•13 hours to complete
Module details
What's included
11 videos1 reading1 peer review
Show info about module content
11 videos•Total 179 minutes
Unit 3.1: The Jack Language in a nutshell•11 minutes
Unit 3.2: Object-Based Programming•21 minutes
Unit 3.3: List Processing•22 minutes
Unit 3.4: Jack Language Specification: Syntax•5 minutes
Unit 3.5: Jack Language Specification: Data Types•9 minutes
Unit 3.6: Jack Language Specification: Classes•15 minutes
Unit 3.7: Jack Language Specification: Methods•19 minutes
Unit 3.8: Developing Apps using the Jack language and OS•19 minutes
Unit 3.9: A Sample Jack App: Square Dance•25 minutes
Unit 3.10: Graphics Optimization•22 minutes
Unit 3.11: Perspective•12 minutes
1 reading•Total 10 minutes
Module Overview (start here)•10 minutes
1 peer review•Total 600 minutes
Project 9•600 minutes
Compiler I: Syntax Analysis
Module 6•12 hours to complete
Module details
What's included
10 videos1 reading1 programming assignment
Show info about module content
10 videos•Total 131 minutes
Unit 4.1: Syntax Analysis•7 minutes
Unit 4.2: Lexical Analysis•9 minutes
Unit 4.3: Grammars•15 minutes
Unit 4.4: Parse Trees•7 minutes
Unit 4.5: Parser Logic•20 minutes
Unit 4.6: The Jack Grammar•14 minutes
Unit 4.7: The Jack Analyzer•11 minutes
Unit 4.8: The Jack Analyzer: Proposed Implementation•20 minutes
Unit 4.9: Project 10: Building a Syntax Analyzer•16 minutes
Unit 4.10: Perspective•13 minutes
1 reading•Total 10 minutes
Module Overview (start here)•10 minutes
1 programming assignment•Total 600 minutes
Project 10•600 minutes
Compiler II: Code Generation
Module 7•14 hours to complete
Module details
What's included
12 videos1 reading1 programming assignment
Show info about module content
12 videos•Total 224 minutes
Unit 5.1: Code Generation•12 minutes
Unit 5.2: Handling Variables•20 minutes
Unit 5.3: Handling Expressions•23 minutes
Unit 5.4: Handling Flow of Control•16 minutes
Unit 5.5: Handling Objects: Low-Level Aspects•14 minutes
Unit 5.6: Handling Objects: Construction•20 minutes
Unit 5.7: Handling Objects: Manipulation•21 minutes
Unit 5.8: Handling Arrays•23 minutes
Unit 5.9: Standard Mapping Over the Virtual Machine•19 minutes
Unit 5.10: Completing the Compiler: Proposed Implementation•17 minutes
Unit 5.11: Project 11•29 minutes
Unit 5.12: Perspective•10 minutes
1 reading•Total 10 minutes
Module Overview (start here)•10 minutes
1 programming assignment•Total 600 minutes
Project 11•600 minutes
Operating System
Module 8•14 hours to complete
Module details
What's included
14 videos1 reading1 programming assignment
Show info about module content
14 videos•Total 230 minutes
Unit 6.1: Operating System•15 minutes
Unit 6.2: Efficiency Matters•18 minutes
Unit 6.3: Mathematical Operations•21 minutes
Unit 6.4: Memory Access•13 minutes
Unit 6.5: Heap Management•31 minutes
Unit 6.6: Graphics•15 minutes
Unit 6.7: Line Drawing•25 minutes
Unit 6.8: Handling Textual Output•19 minutes
Unit 6.9: Input•17 minutes
Unit 6.10: String Processing•18 minutes
Unit 6.11: Array Processing•6 minutes
Unit 6.12: The Sys Class•13 minutes
Unit 6.13: Project 12: Building the OS•12 minutes
Unit 6.14: Perspective•8 minutes
1 reading•Total 10 minutes
Module Overview (start here)•10 minutes
1 programming assignment•Total 600 minutes
Project 12•600 minutes
Postscript: More Fun to Go
Module 9•1 hour to complete
Module details
What's included
4 videos
Show info about module content
4 videos•Total 31 minutes
Unit 7.1: More Fun To Go•10 minutes
Unit 7.2: More Fun To Go•9 minutes
Unit 7.3: More Fun To Go•8 minutes
Unit 7.4: More Fun To Go•5 minutes
Instructor
Instructor ratings
Instructor ratings
We asked all learners to give feedback on our instructors based on the quality of their teaching style.
Ranked among the top academic and research institutions worldwide, the Hebrew University of Jerusalem is Israel's leading university and premier research institution. Serving 23,000 students from 70 countries, the Hebrew University produces a third of Israel’s civilian research and is ranked 12th worldwide in biotechnology patent filings and commercial development. The Hebrew University was founded in 1918 by visionaries including Albert Einstein, Sigmund Freud, Martin Buber and Chaim Weizmann. It is located on three campuses in Jerusalem and a fourth in Rehovot. Visit the website at http://new.huji.ac.il/en. Join our online learners community at https://www.facebook.com/groups/hujimooc/.
OK
Why people choose Coursera for their career
Felipe M.
Learner since 2018
"To be able to take courses at my own pace and rhythm has been an amazing experience. I can learn whenever it fits my schedule and mood."
Jennifer J.
Learner since 2020
"I directly applied the concepts and skills I learned from my courses to an exciting new project at work."
Larry W.
Learner since 2021
"When I need courses on topics that my university doesn't offer, Coursera is one of the best places to go."
Chaitanya A.
"Learning isn't just about being better at your job: it's so much more than that. Coursera allows me to learn without limits."
Learner reviews
4.9
534 reviews
5 stars
94.56%
4 stars
4.49%
3 stars
0.37%
2 stars
0.18%
1 star
0.37%
Showing 3 of 534
P
PV
5·
Reviewed on Jun 23, 2020
Amazing course. Learnt a lot, and goes in depth, in a very elegant manner, making concepts seem simple, and at the same time, difficult.
Z
ZN
5·
Reviewed on Apr 7, 2022
Great course in every way. I can't imagine how much efforts Noam, Shimon and their team have taken. Everyone who's trying to understand computer in a more comprehensive way should take this course.
M
MS
5·
Reviewed on Jan 14, 2018
This is by far one of the best online-courses I have completed. Thumbs up, it was well worth my time and it will definitely help me on my never-ending journey of becoming a better software developer.
Do I have to take Nand to Tetris Part I before taking Nand to Tetris Part II?
Nand to Tetris Part I and Nand to Tetris Part II are two separate and stand alone courses. Although it is recommended to take Part I before taking Part II, you can take any of these courses, in any order that suites you.
How much computer science do I have to know before taking this course?
The only requirement is programming ability at the level acquired in typical introduction to computer science courses.
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.
How many assignments do I have to submit in order to pass the course?
The course consists of 6 projects (programming assignments), numbered 7, 8, 9, 10, 11, 12, and an optional project, numbered 4. In order to pass the course you must submit at least 5 projects out of projects 7, 8, 9, 10, 11, and 12. (The project numbering scheme maintains consistency with the project numbers in the Nand to Tetris Part I course)
When will I have access to the lectures and assignments?
To access the course materials, assignments and to earn a Certificate, you will need to purchase the Certificate experience when you enroll in a course. You can try a Free Trial instead, or apply for Financial Aid. The course may offer 'Full Course, No Certificate' instead. This option lets you see all course materials, submit required assessments, and get a final grade. This also means that you will not be able to purchase a Certificate experience.
What will I get if I purchase the Certificate?
When you purchase a Certificate you get access to all course materials, including graded assignments. Upon completing the course, your electronic Certificate will be added to your Accomplishments page - from there, you can print your Certificate or add it to your LinkedIn profile.
Is financial aid available?
Yes. In select learning programs, you can apply for financial aid or a scholarship if you can’t afford the enrollment fee. If fin aid or scholarship is available for your learning program selection, you’ll find a link to apply on the description page.