『コンピュータシステムの理論と実装』を読んだ

コンピュータのことをハード・ソフト両面で理解できる素晴らしい本があるらしい。それが『コンピュータシステムの理論と実装』である。

www.oreilly.co.jp

動機

プログラミングがしたいと思い立っていろいろな本のコードを写経してきた。しかし、そこで気付いたのはプログラムを組むほど複雑な用は特にないというなんともむなしい事実であった。ただ、プログラムを書きたいという気持ちは変わらずモヤモヤしていたところで出会ったのが『コンピュータシステムの理論と実装』であった。なにやらプログラムを書きながらハードウェアについても学習できるらしい(というか多分ハードウェアの学習が本体)ということで、ハードウェアに大きな苦手意識を持つ私が読むには一石二鳥だとポジティブに考え、この本を手に取った。

どんな本

この本ではまず NAND ゲートを使って AND などの基本ゲート、加算器から果てはシミュレータ上で動くコンピュータまでを組み立てる。おおまかなアーキテクチャはテキスト内で与えられるものの、細部は自分自身で考える必要があり、これがパズルのようで非常に面白い。また、機械語についても触れるのでコンピュータが実際にどういう仕組みで動くのか、ということまで理解できる。

CPU
実際に作った CPU の一例。 Jump 処理の部分は皆が苦しむ

と、なんとここまでで「前半」である。

後半ではアセンブラの実装から始まり、バーチャルマシンの実装、コンパイラの実装、という風に低レベルな部分から徐々に高水準言語をコンピュータに理解させるようソフトウェアの面を学習する。最後に OS にも触れてこの本は終了となる。

感想

この本はコードが載っててそれを書き写しながら~という本ではなく、実際に自分で考え、様々な演習をこなしていく形をとっている。明確な「解答」というものもなく、各々が自由に考えながら演習を行っていくので、時には自分の頭をひねり、時にはネットに転がっている先人たちの記録(コードとも言う)を見てまた頭をひねる。先述した通りこれがまたパズルを解いているようで楽しいのである。

自分で考えさせられる部分もあるものの、テキスト内ではある程度の方針が与えられる。その方針の加減が絶妙で結構わかりやすく、私には非常に合っていたように思われる(例えば後半のソフトウェアではまっさらな状態でコードを書かせるのではなく、参考となる API が記載されている)。

ただ、やはり本を進めるにつれて複雑になっていったり、先人たちの記録(ソースとも言う)も途切れていたりと、ソロ攻略を進めていた私にはなかなかに恐怖を覚える瞬間というものがあった。実際、苦戦を強いられている様子が自分のツイートからも見て取れる。この時は丸1日以上手つかずでテキストとにらめっこしていた気がする。

こういった経緯もあり、12章の OS を完成させたときの達成感はすさまじかった。この達成感を今この本を読んでいる人たちに、過去に挫折した人たちに、そしてこれからこの本を手に取る人たちに味わってほしいと思う。

GitHub

最後に私の記録(GitHub ともいう)へのリンクを貼る。どこかのだれかのためになれば幸いである。

github.com