Nand2Tetris 从与非门构建现代计算机:CS 自学指南中的体系结构入门课详解
本篇技术指南基于 Nand2Tetris 课程文档(中文版见 docs/体系结构/N2T.md)展开,系统介绍希伯来大学在 Coursera 上开设的 Nand2Tetris 课程:它如何以无门槛的方式,引导学习者从单个与非门(NAND)出发,逐步搭建 CPU、编写编译器与虚拟机,最终在自造计算机上运行俄罗斯方块。读完本篇,你将掌握该课程的完整学习路径、硬件与软件两大模块的技术脉络、10 个 Project 的递进结构,以及配套的教材与资源获取方式。
课程定位:为什么它是体系结构入门课
Nand2Tetris 是 Coursera 上最受欢迎的课程之一,在课程平台被数万人打出满分评价,并被全球四百多所高校与高中采用(课程背景引自 docs/体系结构/N2T.en.md)。在 CS 自学指南(cs-self-learning 仓库)中,它被明确定位为体系结构入门方向的首选课程:
- 在 使用指南 的"删繁就简"核心课程清单中,它与 CS61C 一起构成"体系结构入门 + 体系结构进阶"的梯度组合,前者面向时间有限、希望补足底层理解的读者,后者面向想深挖现代体系结构细节的读者。
- 在 CS 学习规划 中,作者建议"花一到两个月的时间"学习这门无门槛课程,认为它在低年级阶段就帮助学习者建立对整个计算机体系"从上至下、从软至硬"的鸟瞰图大有裨益。
课程的核心理念是"麻雀虽小,五脏俱全":它提取出计算机的本质,略去现代计算机系统为追求效率与性能而引入的众多复杂细节,力图让完全零基础的读者(课程作者的预期是高中生也能理解)都能完整走通"逻辑门 → CPU → 编译器 → 虚拟机 → 操作系统"的全链路。
课程基本信息
以下为课程文档中给出的元数据,可直接用于评估课程投入:
| 项目 | 说明 |
|---|---|
| 所属大学 | 希伯来大学(Hebrew University of Jerusalem) |
| 先修要求 | 无(面向完全无计算机基础的读者) |
| 编程语言 | 任选(由学习者自行选择) |
| 课程难度 | 3 星(指南内难度标尺的中档) |
| 预计学时 | 40 小时 |
| 作业形式 | 10 个 Project,覆盖造一台计算机的全过程 |
| 配套教材 | 《计算机系统要素:从零开始构建现代计算机》(The Elements of Computing Systems) |
从"40 小时 + 无先修要求"的参数组合看,这是一门密度很高但边界清晰的实践型课程:按部就班跟随课程规划,一个月内学完是文档给出的可达预期。
硬件模块:从 0/1 世界搭出一台 CPU
硬件模块让学习者进入基于 0 和 1 的世界,完成"自底向上"的电路综合:
- 逻辑门综合:以 NAND 门为唯一原语,构造出 AND、OR、NOT 等基础逻辑门。NAND 是功能完备门(functionally complete gate),仅凭它就可以组合出任意布尔函数,这正是课程选择它作为起点的原因。
- 组合电路搭建:在基础门之上继续综合多路选择器、加法器(adders)等更复杂的组合逻辑电路。
- CPU 构建:逐步搭建出一个 CPU,使其能够运行课程设计者定义的一套简化指令集(汇编)。这一步让学习者亲手验证"取指—译码—执行"的完整指令周期。
这一部分的训练重点在于:理解指令如何在晶体管级的布尔逻辑上被"实现"出来。学完后,你对汇编指令与硬件电路之间的映射关系会有一手的、可验证的认识,而不是停留在概念层面。
软件模块:从高级语言到自造 CPU 上的俄罗斯方块
软件模块完成"自顶向下"的语言翻译链路,与硬件模块形成闭环:
- 编译器(Compiler):编写一个编译器,将课程设计者开发的高级语言 Jack 编译为可运行在虚拟机上的字节码。
- 虚拟机(VM)翻译:进一步把字节码翻译为汇编代码——注意,这里翻译的目标正是你在硬件模块中亲手搭建的 CPU 所运行的指令集,软硬件两条链路在此汇合。
- 简易操作系统(OS):开发一个支持图形界面的简易 OS,让计算机具备输入输出能力。
- 终点项目:用 Jack 语言开发俄罗斯方块(Tetris)游戏,将其编译为汇编语言,运行在自造的 CPU 上,并通过自己开发的 OS 与游戏交互。
学完这一全程后,文档给出的学习收益是:对整个计算机体系结构建立全局且深刻的理解——从逻辑门、数字电路、汇编、体系结构,到虚拟机、编译、操作系统,一条完整的软件栈-硬件栈知识链被压缩在一门课内走完。这正是 CS 学习规划 中评价它"涵盖了编译、虚拟机、汇编、体系结构、数字电路、逻辑门等等从上至下、从软至硬的各类知识"的依据。
10 个 Project:课程的实践骨架
课程文档明确说明作业由 10 个 Project 组成,"带你造一台计算机"。从文档描述的硬件/软件两分结构可以推断,这 10 个 Project 恰好沿"硬件 5 步 + 软件 5 步"递进:硬件侧从逻辑门综合到可运行指令集的完整计算机,软件侧从 Jack 编译器、虚拟机实现到支持 GUI 的操作系统与最终的游戏项目。每个 Project 的输入都是上一个 Project 的产物(例如 CPU 是虚拟机翻译器的运行目标),这种严格的依赖链保证了"造出来的每一层都必须真的能跑"。各 Project 的具体要求细节,以课程网站上的官方说明为准。
课程资源清单
文档中列出的全部课程资源如下,按"获取入口 → 教材 → 作业 → 个人资源"组织:
- 课程网站:分为 Nand2Tetris I 与 Nand2Tetris II 两个系列,分别对应硬件模块与软件模块(原文档指向 Coursera 平台上的对应课程页面)。
- 课程视频:录播视频随课程网站提供。
- 课程教材:The Elements of Computing Systems: Building a Modern Computer from First Principles(中文译名《计算机系统要素:从零开始构建现代计算机》),原文档指向了该教材的 CN-zh 版本 PDF。教材与课程作业一一对应,是自学时最重要的案头参考。
- 课程作业:10 个 Project,具体要求详见课程网站。
- 个人资源汇总:仓库作者 @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都维护在 PKUFlyingPig/NandToTetris 仓库中(见 docs/体系结构/N2T.md 的"资源汇总"一节)。该仓库可作为对照参考:卡住时可以查看他人的实现思路,评分脚本与测试用例也能帮助自检验证。
学习建议与难度预期
基于原文档给出的信息,给出以下自学要点:
- 难度预期:课程"完全为外行设计",课程作者的预期是高中生都能理解内容。但"不难懂"不等于"不花时间"——40 小时的预计学时主要消耗在 Project 实现与调试上,建议按周切分 Project 节奏,一个月内完成是合理目标。
- 按部就班是关键:10 个 Project 存在严格的前后依赖(逻辑门 → 加法器 → ALU → CPU → 编译器 → 虚拟机 → OS),跳步学习会直接导致后续环节无法自验。
- 与进阶课程的衔接:如果想进一步深入现代体系结构的复杂细节(流水线、Cache、虚存、并发),本指南推荐衔接 CS61C: Great Ideas in Computer Architecture。CS61C 文档 中明确对比:CS61C 在难度与深度上比 Nand2Tetris 提高很多,且以 C 与 RISC-V 汇编为载体。两者构成"入门鸟瞰 → 深入细节"的自然学习梯度。
- 收获验证:课程完成度的检验标准是文档描述的那个终点——用 Jack 写的俄罗斯方块跑在你用与非门搭出的 CPU 上,并经由你自建的 OS 完成交互。能完整复现这个闭环,即意味着掌握了整门课的知识链。
延伸阅读(本仓库内)
- docs/体系结构/N2T.en.md / docs/体系结构/N2T.md:本篇所基于的原始课程文档(英/中)。
- docs/体系结构/CS61C.md:体系结构进阶课程,本文硬件/软件全链路的"深度版"衔接。
- docs/CS学习规划.md:体系结构方向在整体自学路线图中的位置说明。
- docs/使用指南.md:按人群给出的核心课程选取建议。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00