从 NAND 到 Tetris(2017)

《从 NAND 到 Tetris》是一门课程和一本书,带领学习者从最基础的 NAND 门一路构建到一个简单的计算机、操作系统以及高级语言,被广泛赞誉为真正从第一性原理理解计算机工作方式的最有收获的方法之一。评论者强调它如何揭开硬件与软件技术栈的神秘面纱,并常常把它与 Ben Eater 的视频、Turing Complete 以及相关的硬件或编译器项目结合起来,以加深理解。尽管有人质疑它对网页开发等领域的直接实用价值,或对其使用自定义 HDL 而不是 Verilog 的选择提出疑问,但大多数人都认为,它带来的概念清晰度和自信足以证明投入时间是值得的。

总体评价与个人影响

  • 被广泛称赞为最有收获的 CS/CE 学习体验之一;很多人表示“强烈推荐,不够夸张”。
  • 有几个人把职业转变、拿到第一份工作,或终于从门电路到高层代码“真正理解”整个技术栈归功于它。
  • 一个常见主题是反复尝试;有些人直到第二次或第三次才完成,但完成时会感到非常自豪。

范围、结构与难度

  • 第一部分(硬件:门电路 → ALU → CPU → 汇编器)被认为更容易、更直观,也非常有趣。
  • 第二部分(VM、编译器、操作系统)明显更难、也更耗时;其中编译器和 OS 部分最重。
  • 人们报告的投入时间从约 40–50 小时(有相关背景)到 100–150+ 小时不等,取决于深入程度、绕路多少,以及他们把解决方案做得多“精致”。

书籍 vs MOOC 与版本

  • 很多人只用在线材料就完成了课程;另一些人更喜欢把视频和书结合起来。
  • 书的第二版明确拆分为独立的硬件和软件两部分,增加了导言和附录,并根据多年学习者提问改进了解释。
  • 有些人觉得,对于自定进度学习来说,书的形式比 MOOC 的截止日期更容易接受。

抽象层级与缺失的“层”

  • 课程从 NAND 门开始,刻意避开固态物理或真实电子学;有些人认为这是优点,另一些想要“sand2nand”的人则觉得这是局限。
  • 讨论中提到了一些分别覆盖晶体管层物理和芯片制造的资源,但这些都不在本课程范围内。

HDL 的选择与“现实世界”实用性

  • 关于自定义 HDL 的争论:有人认为它在教学上是理想的,而且与主流 HDL 足够接近;也有人觉得使用 Verilog/VHDL 会让所学技能更直接适用。
  • 对网页开发者而言,观点不一:有人强调它带来的概念收益和拓宽的思维模型;也有人认为,与学习更领域化的工具相比,它的直接实际收益有限。

编译器、操作系统与理论深度

  • 你会实现:一个汇编器、一个 VM 后端,以及一个从类 Java 语言到字节码的简单递归下降编译器,不涉及严肃优化或高级分析。
  • 有几位指出,这能提供对编译与运行时的扎实直觉模型,但并不是一门完整的编译器课程。
  • 有个旁支讨论希望能有“从 NAND 到图灵机”或“sand2tetris”风格的内容,用于可计算性理论和更底层的物理层面。