CODE コードから見たコンピュータのからくり

著者はCharles Petzoldという有名人。プログラミングWindowsとか書いてる人。
出版されたのは、2003年。9年前らしい。
なぜ、この本を今読んでいるかというと、本屋でPetzoldの新刊を、見かけたのがきっかけ。しかも「チューリングを読む」という読みたくてたまらないタイトル。を、見て、そういえば昔、この人の本を買ったまま、積ん読になっていたことを思い出して、読み始めた次第。
で、
ものすごくためになった。俺がもの知らずなのかも知れないけれど
知らないことだらけ。スゴいわこの本。
ざっくりと流れを説明すると
懐中電灯で、隣の家と通信するところから、モールス信号の説明に入る。スイッチのオンオフの2つで情報が渡せることを説明する。つまり、バイナリ情報での通信だ。そこから電信へ入り、リレーの説明に入る。ブール代数に寄り道をして、シャノンの「ブール代数は回路で表現ができる」という重要な発見を電気回路のスイッチのオンオフを使って説明してくれる。
ここまでは、知っていた。しかし、ここから先は知らなかった。いや、知ってるフリをしていた
論理回路を、一つづつ、リレーを使って説明していく。最初は意味が分からない、しかし、ANDとORとNOTとNANDとNORとXORを用意した後、加算機を作る。桁上がり(carry bit)をXORで表現し、加算結果(sum bit)をANDで表現できることを示す。回路で足し算ができることを説明する。(初めて理解しました)加算機で引き算も可能なことを説明する。流れるように2の補数を用いるとマイナスを表現できることを説明して、弱点まで説明してくれる。続いて、フリップフロップと発信器の説明をして、メモリが構築可能なことを示す。驚くべきは、加算機とメモリをつなぐ説明だろう。恥ずかしながら初めて理解しました。ここまでくると、大昔の計算機がリレーで作られていた、と言う意味がわかるようになる。
この流れで、オペコードが出てくる、オペコードを説明するついでにアドレスという言葉が出てくる。これらが必要な意味が分かるし、動作するイメージがわかる。いつのまにかアセンブラで書かれたコードの説明が出てくる。そしてそれが読めてしまうし、回路とつながっているイメージが初めて理解できた。
続いて、バス、オペレーティングシステム不動点、浮動点の説明が続いて、やっとプログラム言語が出てくる。


正直なところ、情報処理の問題集読んだりする暇があったらこの本読んだ方がいい、とさえ思う
基本情報あたりは、この知識を求めているんじゃないかな。
何でもっと早く読まなかったのだろうと、積ん読だったのを後悔したほど、素晴らしい本だと思う。
さて、この本で計算機界の裂けては通れない重要な概念「ノイマン型コンピュータ」を説明した、Petzoldが書いた「チューリングを読む」が読みたくなった。本屋に買いにいこう。