ホーム  >   ブログ  >   『コンピュータシステムの理論と実装』は“娯楽”である

2017-05-21

『コンピュータシステムの理論と実装』は“娯楽”である

途中長いこと放置していたせいで takuti/nand2tetris の initial commit から1年くらい経ってしまったけど、『コンピュータシステムの理論と実装』を読み終えた。

内容

コンピュータシステムの理論と実装』(通称 nand2tetris)は、その名の通りNANDのような論理演算からテトリスのようなアプリケーションの実装までを一気に学ぶことでコンピュータシステム全体を俯瞰しましょう、という一冊。

章が進むにつれてハードウェアからソフトウェアへと話が進んでいき、各章には“プロジェクト”として何らかの実装パートがある。実装の結果は予め用意されたシミュレータやエミュレータを通して確認・デバッグできる。

目次を見るとそれだけでワクワクする:

  1. Boolean Logic
    • HDLでANDやORなどの論理ゲートを実装する
  2. Boolean Arithmetic
    • HDLで加算器やALUを実装する
  3. Sequential Logic
    • HDLでフリップフロップやレジスタ、(部品としての)メモリ、カウンタを実装する
  4. Machine Language
    • アドレス指定方式やプロセッサ、レジスタの利用などについて、本書のためにデザインされた機械語(Hack機械語)に基づいて解説
    • 乗算や入出力操作をHackのアセンブリで書く
  5. Computer Architecture
    • HDLで、これまでに実装したコンポーネントを組み合わせて、Hack機械語のビット入力に対応するメモリやCPUを実装する
    • これがハードウェアとしての“Hackコンピュータ”となる
  6. Assembler
    • アセンブリ→機械語
  7. VM
    • VMコード→アセンブリ
  8. High Level Language
    • 本書のためにデザインされた高水準言語Jackの紹介
  9. Compiler
    • Jackプログラム→VMコード
  10. Operating System
    • キーボード入力の処理やスクリーンへの描画、ひいてはメモリ操作など、OS的な機能をJack言語で実装する

(アセンブラ、VM変換器、コンパイラは好きな言語で実装してよい)

しかし騙されることなかれ。これだけの話題を一冊(1つの授業)に詰め込んでいるので、各章の記述はとても浅い。

著者も繰り返し述べている通り、最適化という最も重要な話題からはほぼ完全に目を背けているし、ネットワークはどこへ行ったという話もある。OSに至っては『OS的な機能をアプリケーションのレベルで擬似的に実装している』にすぎないので、実際の話とは大きくかけ離れている。

とはいえ、基礎的な部分はしっかりと抑えられていた印象。たとえば、よくある「CPUを作りましょう!」という課題は実際にはALUを作っただけで終わるものだけど、この本はもう一歩踏み込んだところまできちんと解説している。

このコンテンツをどう評価するかは人それぞれだけど、まぁとにかく非常にチャレンジングな一冊ということです。

感想

最初から最後までずっと頭の体操をしている気分だった。これに尽きる。

とにかく広く浅い内容なので、コンピュータサイエンスを修めた人間がこの本から知識として新たに得られるものはほとんど無いと思う。

しかしその浅さ故に、章末プロジェクトたちが『ちょうどいい』のだ。本書のために簡略化された未知のシステム/言語仕様に従って、様々なビルディングブロックをゆるゆると実装してゆく。「ゼロから言語を設計しなさい」という話でもなければ、「ほとんど完成された実装を、あと少し修正して仕上げなさい」という単純さともまた違う。

なので(仕様をよく読まずに実装を始めて何度かハマったけど)難しすぎて無理!ということは無い。落ち着いて取り組めば、忍耐力さえあれば先に進めるはず。

そう、忍耐力ですよ。忍耐力。

おもちゃの世界の仕様書を実装に落とし込むだけなので、やる意義を問うてはならない。

というわけで「これは…コンピュータサイエンス版ナンプレとでも言うべきか…」というのが率直な感想(一応褒めている)。

平日の夜とか、帰り際にカフェに寄るじゃないですか?そこでコーヒーを飲みながら2時間くらい、あーでもないこーでもないと仕様を眺めながら試行錯誤するわけですよ。これが不思議と心地よい。

『世界を俯瞰する』ことの大切さ

やる意義を問うな、と書いておきながら、それでもこの本は『上から下まですべてが繋がる』という一点においてとても有意義な一冊だと思った。

書かれている話題のひとつひとつは過去に講義や本、経験を通して学んだものかもしれない。けれど、それらを一歩引いて“コンピュータシステム”という大きな枠組みの中で見つめ直す機会は無かった気がする。

自分の興味が具体化して、専門性が出てきたときこそ、こういった普遍的な知識の全体像の“スケッチ”をインプットし直す機会を大切にしたいなぁと思うのでした。

それで思い出したのが『思考する機械 コンピュータ』という本。読み物だけど、これも電気信号(論理回路)のレベルから並列計算、人工知能まで、広い世界を俯瞰できる素晴らしい一冊だった:

ぼくがひとに本を一冊だけ薦めるならこれ

A post shared by @takuti on

網羅性の高い平易で魅力的な本は「もっと早く出会っていれば…」という感想から「新人/学部1年生に薦めたい」といった扱われ方をされがちだけど、これまでの知見があるからこそそう思えるのであって…なんというか、タイミング…ですね。

以上、nand2tetris本は娯楽として案外楽しく、有意義な一冊だったというお話でした。しかしまぁ、好きなことなら難しい問題だろうがなんだろうが全部娯楽になり得るし、同じ娯楽ならあえてnand2tetris本を手に取る必要はないかな…と書きながら思ったり。

(ところで、nand2tetrisなのに、書かれている内容に従うと最後に起動するアプリケーションがテトリスではなくて Pong という壁当てピンポンゲーム(?)なのはいかがなものか。)

  シェアする

このエントリーをはてなブックマークに追加

  カテゴリ

読書記録 プログラミング コンピュータシステム

  あわせて読みたい

2024-03-22
データ時代における「言語」のちから
2020-05-16
データよりもストーリーを、相関よりも因果を。
2017-05-14
推薦システムのためのOSSたち

  もっと見る

最終更新日: 2022-01-18

  書いた人: たくち

Takuya Kitazawaたくち)です。長野県出身、カナダ・バンクーバー在住のソフトウェアエンジニア。これまでB2B/B2Cの各領域で、Web技術・データサイエンス・機械学習のプロダクト化および顧客への導入支援・コンサルティング、そして関連分野の啓蒙活動に携わってきました。現在は主に北米(カナダ)、アジア(日本)、アフリカ(マラウイ)の個人および企業を対象にフリーランスとして活動中。詳しい経歴はレジュメ を参照ください。いろいろなまちを走って、時に自然と戯れながら、その時間その場所の「日常」を生きています。ご意見・ご感想およびお仕事のご相談は [email protected] まで。

  近況   一杯のコーヒーを贈る

  免責事項

  • Amazonのアソシエイトとして、当サイトは amazon.co.jp 上の適格販売により収入を得ています。
  • 当サイトおよび関連するメディア上での発言はすべて私個人の見解であり、所属する(あるいは過去に所属した)組織のいかなる見解を代表するものでもありません。
  • 当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、個人ブログという性質上、誤情報や客観性を欠いた意見が入り込んでいることもございます。いかなる場合でも、当サイトおよびリンク先に掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。
  • その他、記事の内容や掲載画像などに問題がございましたら、直接メールでご連絡ください。確認の後、対応させていただきます。