We may earn an affiliate commission when you visit our partners.
Course image
Shimon Schocken and Noam Nisan

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:

Read more

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.

Enroll now

What's inside

Syllabus

Introduction
Course introduction and overview, the roles of abstraction and implementation in systems design, the road ahead.
Boolean Functions and Gate Logic
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Significant practical experience through simulation, including a project where you design a modern computer system, from the ground up, including boolean functions, gate logic, and memory
Taught by two professors in the field of computer science, Shimon Schocken and Noam Nisan
Develops project-management skills as you build a computer system, from the ground up
Teaches foundational skills and knowledge in computer system design
Suitable for beginners with no prior experience in computer science or engineering

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Build a computer from scratch

According to learners, this course offers a unique and incredibly rewarding experience where you literally build a modern computer from first principles. Many highlight the hands-on, project-based approach, stating it provides a deep and intuitive understanding of how computers work, from logic gates to machine language. Students appreciate the clear lectures and well-designed projects that reinforce concepts. While some find the projects challenging and time-consuming, particularly in later modules, the sense of accomplishment upon completion is frequently mentioned as a major positive. The course is widely regarded as a solid foundation for further studies in computer science or engineering.
Projects require effort but yield great rewards.
"The projects are challenging, especially in later weeks, requiring significant time and effort."
"It's not an easy course, but the sense of accomplishment when you complete the projects is immense."
"Be prepared to spend substantial time on the projects; they are demanding but incredibly rewarding."
"Some modules were quite difficult, but working through the challenges was part of the learning process."
Simulators and tools are helpful for projects.
"The provided hardware simulator and other tools are user-friendly and essential for completing the projects."
"The tools make the building process feasible and help visualize the concepts."
"Using the simulator felt like designing actual chips."
"The software environment was stable and easy to set up."
Excellent first course in computer architecture.
"This course is an excellent starting point for anyone interested in computer architecture or systems."
"Even with no prior knowledge, I was able to follow along and successfully complete the projects."
"Perfect for beginners or those who want to fill in gaps in their understanding."
"Highly recommend this as a foundational course before diving into more advanced topics."
Content is presented effectively and clearly.
"The lectures are clear, concise, and build logically from one topic to the next."
"Instructors explain complex topics in a very accessible way, even for beginners."
"Video lectures were excellent, providing just enough theory before diving into the practical projects."
"I found the explanations throughout the course to be very easy to follow."
Provides fundamental insights into computing.
"This course gives you a deep understanding of how computers *actually* work at the most fundamental level."
"It demystifies the computer stack, starting from boolean logic all the way up to software."
"The course provided me with invaluable insights into the architecture of computing systems from scratch."
"Really helped me understand the connection between hardware and software."
Building is key to understanding concepts.
"The hands-on building process of the entire computer system from logic gates is unique and highly effective."
"The project-based approach is outstanding. It's not just theory, you get to build everything step by step."
"This is the most rewarding project-based course I've ever taken. Building the computer piece by piece solidified everything."
"I love how the projects guide you through the entire process, making the concepts tangible."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course) with these activities:
Review Programming Concepts in a Preferred Language
Refreshing your programming skills in a preferred language will provide a solid foundation for the hands-on programming projects in the course.
Browse courses on Programming
Show steps
  • Choose a programming language that you are familiar with.
  • Review basic programming concepts such as variables, data types, control flow, and functions.
Review the Syllabus and Course Materials
Reviewing the syllabus and course materials will help you get familiar with the course structure, topics, and expectations, giving you a head start and laying a strong foundation for your learning journey.
Show steps
  • Thoroughly read the course syllabus to understand the course objectives, grading scheme, and schedule.
  • Examine the course materials, including lecture notes, textbooks, and any online resources, to get an overview of the topics that will be covered.
Practice Binary Arithmetic Operations
Practicing binary arithmetic operations will strengthen your understanding of the fundamental concepts used in computer systems and the course projects.
Browse courses on Binary Arithmetic
Show steps
  • Review the basics of binary number representation and arithmetic.
  • Solve practice problems involving binary addition, subtraction, multiplication, and division.
Five other activities
Expand to see all activities and additional details
Show all eight activities
Participate in a Study Group or Discussion Forum
Engaging in discussions with peers will foster collaboration, enhance your understanding of course material, and expose you to diverse perspectives.
Show steps
  • Join a study group or participate in discussion forums related to the course topics.
  • Actively participate in discussions, ask questions, share your insights, and engage with other students' perspectives.
Design and Simulate a Simple Logic Circuit
Designing and simulating a simple logic circuit will provide you with hands-on experience in applying the concepts of Boolean algebra and logic gates, which are essential for understanding computer architecture.
Browse courses on Logic Gates
Show steps
  • Choose a simple logic function to implement, such as an AND gate or an OR gate.
  • Design the logic circuit using logic gates.
  • Simulate the logic circuit using a circuit simulator to verify its functionality.
Explore Online Tutorials on Computer Architecture
Exploring online tutorials on computer architecture will supplement your understanding of the concepts covered in the course and provide additional insights into the design and operation of computer systems.
Browse courses on Computer Architecture
Show steps
  • Search for reputable online resources and tutorials on computer architecture.
  • Select tutorials that cover topics relevant to the course, such as CPU design, memory organization, and instruction sets.
Write a Summary of a Course Lecture
Summarizing a course lecture will help you reinforce your understanding of the material, identify key concepts, and improve your note-taking skills.
Show steps
  • Choose a lecture topic that you find particularly interesting or challenging.
  • Write a concise summary that captures the main points, key terms, and important concepts discussed in the lecture.
Volunteer at a Local Tech Event or Workshop
Volunteering at a tech event or workshop will provide you with practical experience, allow you to connect with industry professionals, and gain valuable insights into the field of computer systems.
Show steps
  • Identify local tech events or workshops that align with your interests.
  • Reach out to the organizers and express your interest in volunteering.

Career center

Learners who complete Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course) will develop knowledge and skills that may be useful to these careers:
Embedded Systems Engineer
An Embedded Systems Engineer designs, develops, and tests embedded systems, which are computer systems that are built into other devices. Typically requires a bachelor's degree in computer engineering or a related field. This course can help build a foundation in embedded systems design and implementation.
Firmware Engineer
A Firmware Engineer designs, develops, and tests firmware, which is software that is embedded in hardware. Typically requires a bachelor's degree in computer engineering or a related field. This course can help build a foundation in firmware design and implementation.
Hardware Architect
A Hardware Architect designs the architecture for computer hardware systems. Typically requires a bachelor's degree in computer engineering or a related field. This course can help build a foundation in computer architecture.
Computer Hardware Engineer
A Computer Hardware Engineer designs, develops, and tests computer hardware components, such as processors, motherboards, and memory. This role typically requires a bachelor's degree in computer engineering or a related field. This course can help build a foundation in hardware design and implementation.
Database Administrator
A Database Administrator manages and maintains databases, ensuring that they are available and secure. Typically requires a bachelor's degree in computer science or a related field. This course may be useful for building a foundation in database management.
Robotics Engineer
A Robotics Engineer designs, builds, and tests robots. Typically requires a bachelor's degree in robotics, computer engineering, or a related field. This course may be useful for building a foundation in computer architecture and embedded systems.
Computer Programmer
A Computer Programmer writes and tests code that makes computers perform certain actions. This role typically requires a bachelor's degree in computer science or a related field. This course can help build a foundation in programming and computer architecture.
Software Architect
A Software Architect designs and builds the architecture for software systems. Typically requires a bachelor's degree in computer science or a related field. This course can help build a foundation in software architecture.
Software Engineer
A Software Engineer designs, develops, and tests software applications. Typically requires a bachelor's degree in computer science or a related field. This course can help build a foundation in software development and computer architecture.
Data Architect
A Data Architect designs and builds the architecture for data storage and retrieval systems. Typically requires a bachelor's degree in computer science or a related field. This course may be useful for building a foundation in computer architecture and data management.
Web Developer
A Web Developer designs and develops websites and web applications. Typically requires a bachelor's degree in computer science or a related field. This course may be useful for building a foundation in web development and computer architecture.
Computer Scientist
A Computer Scientist performs research to advance our understanding of computer systems and to invent new technologies. Typically requires a master's degree or doctorate. This course may be useful for building a foundation in computer science fundamentals.
Network Architect
A Network Architect designs and builds the architecture for computer networks. Typically requires a bachelor's degree in computer science or a related field. This course may be useful for building a foundation in network architecture.
Systems Administrator
A Systems Administrator manages and maintains computer systems, including hardware, software, and networks. Typically requires a bachelor's degree in computer science or a related field. This course may be useful for building a foundation in systems administration.
Computer Systems Analyst
A Computer Systems Analyst studies the way computers are used to solve problems in an enterprise. This role also designs and develops computer applications and systems. Typically requires a bachelor's degree, but it may be possible to enter this career with experience and certification. This course may be useful for building a foundation.

Reading list

We've selected 41 books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course).
Provides a comprehensive overview of the fundamental concepts of computing, covering topics such as data structures, algorithms, and computer architecture. It is an excellent resource for gaining a deeper understanding of the theoretical foundations of computer science.
Provides a comprehensive overview of computer systems, covering topics such as computer architecture, operating systems, and networking, It is an excellent resource for gaining a deeper understanding of the underlying principles of computer systems.
Classic textbook on computer organization and design. It provides a comprehensive overview of the hardware and software components of computer systems.
Classic textbook on algorithms. It provides a comprehensive overview of the fundamental algorithms used in computer science.
Provides a comprehensive overview of digital design and computer architecture, covering topics such as logic gates, flip-flops, and microprocessors. It is an excellent resource for gaining a deeper understanding of the hardware components of computer systems.
Provides a comprehensive overview of computer security. It is an excellent resource for gaining a deeper understanding of the principles of computer security.
Provides a comprehensive overview of software engineering. It is an excellent resource for gaining a deeper understanding of the principles of software engineering.
Classic work on software engineering. It provides a number of insights into the challenges of software development.
Provides a number of design patterns that can be used to improve the design of software. It is an excellent resource for gaining a deeper understanding of how to design software that is flexible and maintainable.
Provides a number of tips for writing clean code. It is an excellent resource for gaining a deeper understanding of how to write code that is easy to read and maintain.
Provides a detailed overview of digital design and computer architecture, covering topics such as logic gates, combinational circuits, and sequential circuits. It good reference for understanding the hardware design of computers.
Provides a comprehensive overview of operating systems, covering topics such as process management, memory management, and file systems. It good reference for understanding the fundamental concepts of operating systems.
Provides a comprehensive overview of computer networks, covering topics such as network protocols, routing, and security. It good reference for understanding the fundamental concepts of computer networks.
Provides a comprehensive overview of computer networks. It is an excellent resource for gaining a deeper understanding of the principles of computer networking.
Provides a comprehensive overview of computer systems performance analysis, covering topics such as experimental design, measurement, simulation, and modeling. It good reference for understanding how to evaluate the performance of computer systems.
Provides a comprehensive overview of data structures and algorithms, covering topics such as arrays, linked lists, and trees. It good reference for understanding the fundamental concepts of data structures and algorithms.
Provides a comprehensive overview of machine learning, covering topics such as supervised learning, unsupervised learning, and reinforcement learning. It good reference for understanding the fundamental concepts of machine learning.
Provides a comprehensive overview of deep learning, covering topics such as convolutional neural networks, recurrent neural networks, and generative adversarial networks. It good reference for understanding the fundamental concepts of deep learning.
Provides a comprehensive overview of natural language processing, covering topics such as tokenization, stemming, and machine translation. It good reference for understanding the fundamental concepts of natural language processing.
Provides a comprehensive overview of computer architecture, covering topics such as processor design, memory organization, and I/O devices. It good reference for understanding the underlying principles of computer design.
Provides a comprehensive overview of robotics, covering topics such as kinematics, dynamics, and control. It good reference for understanding the fundamental concepts of robotics.
Provides a comprehensive overview of embedded systems, covering topics such as hardware design, software design, and system integration. It good reference for understanding the fundamental concepts of embedded systems.
Provides a comprehensive overview of systems analysis and design, covering topics such as requirements gathering, analysis, and design. It good reference for understanding the fundamental concepts of systems analysis and design.
Provides a good overview of the fundamentals of computer networks, making it a good resource for students who want to learn how computer networks work.
Provides a good overview of the fundamentals of computer security, making it a good resource for students who want to learn how to protect computer systems from attack.
Many computer architecture courses use this book as a textbook. It provides a good overview of the fundamental concepts of computer architecture and includes plenty of exercises and problems.
Provides a good overview of the fundamentals of data structures and algorithms in Python, making it a good resource for students who want to learn how to design and implement efficient data structures and algorithms in Python.
Provides a comprehensive overview of operating systems. It would be a useful reference for students who want to learn more about how operating systems work.
Provides a good overview of the fundamentals of machine learning, making it a good resource for students who want to learn how to design and implement machine learning algorithms.
Provides a good overview of the fundamentals of algorithms, making it a good resource for students who want to learn how to design and implement efficient algorithms.
Provides a good overview of the fundamentals of operating systems, making it a good resource for students who want to learn how operating systems work.
Provides a good overview of the fundamentals of computer graphics, making it a good resource for students who want to learn how to design and implement computer graphics systems.
Provides a good overview of the fundamentals of computer science using Python, making it a good resource for students who want to learn the basics of computer programming.
Covers the fundamentals of computer logic and design. It great book to read in addition to what is covered in the course and also for someone who wants a deeper understanding of computer design.
Provides a comprehensive overview of computer systems, from the basics of computer hardware to the software that runs on them. It would be a useful reference for students who want to learn more about the full stack of computer systems.
Provides a structured overview of computer organization. It would be a useful reference for students who want to learn more about the different levels of computer organization.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser