Nandからテトリスへ (2017)
(nand2tetris.org)- Nand2Tetrisは、コンピュータシステムを基礎から理解しようとする学習者のために、汎用コンピュータシステムと現代的なソフトウェア階層を自ら構築するための資料を提供する
- 講義、プロジェクト資料、ツールが一か所にまとまっており、非営利環境では無料のオープンソースとして利用できる
- このコースは400以上の 大学・高校・ブートキャンプ で使われており、高校生から博士課程の学生、シニアエンジニアまで受講している
- 独学者はWebサイトの講義ノートとProjectsセクションをたどることができ、Coursera では有料受講と公式修了証の発行が可能
- 個人学習と教育機関での授業の両方を想定した構成で、講師は別途連絡することで追加資料を受け取れる
基礎からコンピュータを作る学習資料
- Nand to Tetris courses公式Webサイト は、汎用コンピュータシステム と現代的なソフトウェア階層を最初から作るために必要な資料をまとめて提供している
- 資料は講義、プロジェクト資料、ツールで構成され、学生・講師・独学者 を対象としている
- 関連書籍はNoam NisanとShimon Schockenによる The Elements of Computing Systems
- コース関連のCACM資料は テキスト と ビデオ で提供されている
受講ルートと教育現場での活用
- Nand to Tetrisコースは 400以上 の大学、高校、ブートキャンプで教えられている
- 受講者には高校生、博士課程の学生、シニアエンジニアまで含まれる
- 一般的な学術版コースの 拡張シラバス を見ることができる
- 自由受講はWebサイトの講義ノートとProjectsセクションをたどって進められる
- Courseraコース は 有料 で、公式修了証を提供する
- 講師向けの追加資料は nand2tetris@gmail.com に連絡して受け取れる
1件のコメント
Hacker News のコメント
7年前、大学卒業後に初めて挑戦したときは第2章までしか進めず、とてもやりがいはあったものの、別のサイドプロジェクトのために中断した。
3か月前に再開し、今は第8章まで来て、論理ゲート、ALU、CPU、アセンブラ、仮想マシンの半分を終えたところだが、各章ごとに「これはいったいどう動くんだ?」と思いながら、実際に動くとものすごく満足感がある。
純粋な学習目的のサイドプロジェクトとしては、これまでやった中で最もやりがいがあり、最後まで続けている自分をかなり誇らしく思っているので、強くおすすめする。
去年の秋から冬にかけては、Ben Eater のブレッドボードで8ビットコンピュータを作る素晴らしいシリーズと並行して進め、中国から数か月かけて部品を買い、冬の間ずっと届き次第サブシステムを作っていた。
次はこれをやってみるといいし、やりがいも大きいが、点滅する LED を見ながら内部で何が起きているのか理解する場面は本当に格好よく見える。
たとえば、集積回路が入力を有用な出力に変える実際のメカニズムのようなものだが、TI SN7400 のような最も単純な実在の集積回路でさえ、実際にどう動作するのかをきちんと説明した資料を見つけられなかった。
この講義は本当に好きで、低レイヤーのコンピュータサイエンスの授業を受けないままコンピュータを仕事にしている人には強くおすすめする。
コンピュータがどう動くのかのうち、高水準プログラムやプログラミング言語に影響する核心部分を直感的に理解させてくれるし、個人的に一番大きな気づきはスタックとヒープの違いをきちんと理解できたことだった。
単純な回路を積み上げていくことで、私たちが使っている複雑な機械ができあがる点も魔法のように感じられるし、講師陣は本来なら複数学期分になりそうな内容を過度に単純化せず、それでいてアセンブリ言語のようなテーマの要点を素早くつかませてくれる。
時間があるなら本当におすすめで、第1部の NAND ゲートから CPU を作るところまでは楽しくてかなり簡単だが、第2部のコンピュータから完全なオペレーティングシステムへ進む過程は、作業量がずっと多い。
両方必要なのか、片方だけでいいのか判断しようとしているところ。
この講義/本を強くおすすめする。
最後までやってみると、やりがいが非常に大きい。
Ben Eater の素晴らしい 8ビットコンピュータシリーズ(https://eater.net/8bit/)を終えたあとに nand2tetris へ進む流れは、とても自然だった。
コンピュータ設計の基本概念のうち、よく大雑把に流されがちなものを本当に理解させてくれるし、連休に始めるのにぴったりのプロジェクトだ。
彼の動画が好きで、特にループの導入と割り込みの導入の回が気に入った。
彼が書いたコードが、こうした概念によってずっとエレガントに書き直されていくのを見るのはとても満足感があった。
次は NAND to Tetris も見てみないといけない。
2つは相性がよかった。
この講義に触発された面白い NAND ゲームがある: https://nandgame.com/
どちらもアセンブリ風の言語で書く方式で、学ぶ楽しさが大きい。
コンピュータをより低いレベルで理解しようとしているなら、ETH Zürich の Digital Design and Computer Architecture 講義もおすすめする。
https://www.youtube.com/playlist?list=PL5Q2soXY2Zi-EImKxYYY1...
コンピュータアーキテクチャ入門の授業を受けたが、残念ながらあまり先までは進まず、現代 CPU が行うアウトオブオーダー実行のような魔法にはまったく触れなかった。
今回の連休のテーマはこの再生リストになりそうだ。
この本と、その本を手に取った時期について良い思い出がある。
ガールフレンドとコーヒーを飲んでいるとき、NAND だけですべての論理ゲートを作れると読んだと言い、興味が湧いて、ナプキン何枚かに NAND を書きながら本当に全部作り出せるのか考えてみた。
最終的にできて、本当に楽しかった。
各ゲートを NAND で作り出すたびに、新しいゲート名をナプキンに書き、そのナプキンと楽しさを家に持ち帰って、数日後にはそれらのゲートを組み合わせて最終的にALU全体まで解き明かそうとした。
その過程でマルチプレクサやいろいろ興味深いものが出てきて、結局行き詰まったが、この本のことを聞いたことがあったので注文することにした。
その後の章は、ソフトウェア経験しかなかった自分にとって、いつも神秘的だった低レベルの領域を理解するのに本当に役立った。
ただし、実際に最後まで作り切ることはできなかった。
低レベルソフトウェアのほうに入っていくと、すでに十分理解したという感覚になって作業自体にはあまり惹かれなくなったが、読むだけでも素晴らしかった。
george hotz のこのリポジトリもあり、かなり興味深い。
https://github.com/geohot/fromthetransistor
資料はなく、仮想の講義についての大まかな概要だけだが、初期コミットを見るともう少し明確になる。
「数年前に書いたもので、オンラインに上げたいと思っていた。採用は難しく、現代のコンピュータサイエンス教育のかなりの部分は本当にひどく、現代のコンピュータスタックを第一原理から理解している人を見つけるのはあまりにも難しい。いつかまた12週間空いたら、自宅で追える講義として提供するかもしれない。自分も一緒に遊びたい。」
学部では CS ではなくコンピュータ工学をやったが、そのリストにあるトピックの80%くらいは扱った。
Verilog とオペレーティングシステムの科目をいくつも受け、マイクロコントローラ/FPGAs もたくさん扱った。
Verilog で CPU を作ったあと、アセンブラ/コンパイラを書いたのが間違いなくハイライトだった。
難しい課程だったが、卒業する頃にはスタック全体をかなりよく理解できたと感じた。
おそらく彼はコンピュータ工学のほうをよく知らないのかもしれない。
前日譚にあたる「sand2nand」も DIY プロジェクトとして可能なのか気になる。
データアナリストとして働いていた頃、軽い気持ちでこの講義を受けたのだが、キャリア転換のきっかけになった。
本当に素晴らしい講義なので、時間があればぜひやってみてほしい。
より低レベルのプログラミング寄りの道に移ったのか気になる。