从与非门到俄罗斯方块:Nand2Tetris 计算机体系结构入门课自学指南
本篇指南基于 CS 自学指南中的 Coursera: Nand2Tetris 课程文档展开,系统介绍这门希伯来大学出品的无门槛体系结构课程:它的硬件/软件两大模块如何从与非门一路搭建到可运行游戏的完整计算机、10 个 Project 的学习路径、配套教材与资源,以及它在自学路线图中作为“体系结构入门课”的定位与衔接方式。读完后你将清楚如何按部就班地在一个月内从零亲手造出一台计算机,并建立对整个计算机体系结构的全局鸟瞰。
课程概览
Nand2Tetris(Nand to Tetris,简称 N2T)是 CS 自学指南在 体系结构 板块首推的入门课,其核心信息如下:
| 项目 | 说明 |
|---|---|
| 所属大学 | 希伯来大学(Hebrew University of Jerusalem) |
| 先修要求 | 无 |
| 编程语言 | 任选一个编程语言 |
| 课程难度 | 🌟🌟🌟 |
| 预计学时 | 40 小时 |
这门课在 Coursera 平台被数万人评为满分,在全球四百多所高校、高中被采用。它的核心命题极具吸引力:让一个完全没有计算机基础的人从与非门(Nand gate)开始造一台计算机,并在上面运行俄罗斯方块小游戏。听起来很酷,实现起来更酷——因为课程的目标就是让你亲手把这件事做出来。
课程结构:硬件与软件两大模块
N2T 课程分为硬件和软件两个部分,覆盖了从上至下、从软至硬的完整栈。
硬件部分:进入 01 的世界
硬件部分的目标是从最底层的逻辑门开始,逐层向上搭建出能够执行程序指令的 CPU:
- 逻辑电路:用与非门构造出各种基本逻辑门(与、或、非等),再组合出加法器、多路选择器等更复杂的组合电路与寄存器、RAM 等时序电路;
- CPU 设计:将数据通路与控制器整合,逐步搭建出一个完整的 CPU;
- 运行简易汇编:这个 CPU 能够运行一套课程作者定义的简易汇编指令集——这是硬件部分的终点,也是与软件部分的接口。
硬件部分刻意略去了现代计算机为性能而设计的众多复杂细节(如流水线、Cache、虚拟内存等),提取出计算机最本质的部分,让零基础学习者也能理解“一条指令是如何被电路执行的”。
软件部分:从高级语言到可运行的游戏
软件部分建立在硬件部分搭好的 CPU 之上,沿着“高级语言 → 字节码 → 汇编 → 机器”的方向逐层翻译:
- 编写编译器:将课程作者开发的高级语言 Jack 编译为可以运行在虚拟机(VM)上的字节码;
- VM 到汇编:将字节码进一步翻译为硬件部分那个 CPU 能够执行的汇编代码;
- 开发简易 OS:开发一个简易操作系统,让你的计算机支持输入输出与图形界面;
- 终点项目:用 Jack 开发一个俄罗斯方块(Tetris)小游戏,将它编译为汇编代码,运行在你用与非门搭建出的 CPU 上,通过你开发的 OS 与游戏交互。
走完这条链路后,你实际上已经独立实现了计算机体系结构中数字电路、指令集、汇编、虚拟机、编译器、操作系统这几个核心环节的“麻雀虽小、五脏俱全”版本。
10 个 Project 带你造台计算机
课程以 10 个 Project 贯穿整个学习过程,从简单的逻辑门组合到最终的俄罗斯方块游戏,每个 Project 都有明确的验收标准,带你一步步把一台计算机真正“造”出来。具体的每个 Project 要求详见课程网站(Nand2Tetris I / II)。这种以 Project 为驱动的设计,正是课程能保持低难度高完成度的关键:你始终在“造东西”,而不是被动听课。
教材与课程资源
按 课程文档 所列,本课程的核心资源包括:
- 课程网站:Nand2Tetris I(硬件部分)与 Nand2Tetris II(软件部分)两个系列,均在 Coursera 平台提供,课程视频随网站附设;
- 课程教材:《计算机系统要素:从零开始构建现代计算机》(The Elements of Computing Systems: Building a Modern Computer from First Principles),由课程作者 Shimon Schohn 与 Noam Nisan 编写,与两个系列课程一一对应;
- 课程作业:10 个 Project 带你造台计算机,具体要求详见课程网站;
- 资源汇总:指南维护者 PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在其 NandToTetris 仓库中,可作为学习参考与实现对照。
在 CS 自学指南中的定位
在 CS 自学指南的整体规划中,Nand2Tetris 被明确定位为体系结构的入门课,与进阶课程形成清晰衔接:
- 在 一份仅供参考的 CS 学习规划 的体系结构章节中,作者建议“花一到两个月的时间”学习这门无门槛课程,认为它在低年级阶段就能帮助学习者“从宏观上建立对整个计算机体系的鸟瞰图,大有裨益”;
- 在 如何使用这本书 的“删繁就简”课程表中,Nand2Tetris 被列为体系结构入门的核心课程之一;
- 若学完 N2T 想深入现代计算机的复杂细节(流水线、Cache、虚存、并发),可接着学习伯克利的 UCB CS61C: Great Ideas in Computer Architecture。从 CS61C 的文档描述看,两门课的定位差异很明确:CS61C“在难度和深度上都会提高很多,具体会涉及到流水线、Cache、虚存以及并发相关的内容”;而希伯来大学的 ETHz: Digital Design and Computer Architecture 与 ETHz: Computer Architecture 则是另外两条偏硬件设计与 Verilog 实践的体系结构学习路线。
这种“N2T 建立全局观 → CS61C 深入细节”的递进,正是它作为入门课的价值的体现。
自学建议:零基础也能一个月学完
课程文档给出的几点关键信息,直接决定了这门课对自学者的友好程度:
- 无先修要求:课程面向完全没有计算机基础的人,课程作者的目标是让高中生都能理解。如果你对计算机世界由 01 构成的说法感到好奇,这门课就是最直接的入口;
- 编程语言任选:软件部分(编译器、VM 等)可以用你自选的任意编程语言实现,你可以用自己最熟练的语言降低学习摩擦;
- 预计 40 小时:只要按部就班跟着课程规划走,一个月内学完绰绰有余。建议将 10 个 Project 作为进度锚点,每完成一个 Project 就是一次可验证的里程碑;
- 难度设计精巧:这门课很好地提取出了计算机的本质,而不过多地陷于现代计算机为性能而设计的众多复杂细节,让学习者能在轻松愉快的体验中感受计算机的优雅与神奇。
需要说明的前提是:本文描述的课程信息(学时、难度、资源构成)以当前仓库文档为准,实际开设形式与内容以 Coursera 课程网站最新说明为准。
学完能获得什么
完成 Nand2Tetris 后,你将对整个计算机的体系结构有一个全局且深刻的理解:从逻辑门、数据通路,到指令集、汇编、虚拟机、编译器、操作系统,每一层如何工作、层与层之间如何衔接,你都有了亲手实现过的第一手经验。正如课程文档所总结的——这对后续课程(操作系统、编译原理、体系结构专业课等)的学习有着莫大的帮助,也是从“会用计算机的人”走向“理解计算机的人”的关键一步。
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