2011-11-30 (Wed) [長年日記]
_ コンピュータアーキテクチャのエッセンス
以下の文章は翔泳社の「君のために選んだ1冊 ソフトウェア開発の名著」という企画のために書いたものだけど、ブログに公開してよいとのことだったので、たぶんWeb日記でもよいだろうと思って公開しておく。 今気付いたけど、これソフトウェア開発の本じゃないね。
コンピュータアーキテクチャのエッセンス (IT Architects Archiveシリーズ)
僕がはじめてコンピュータに触れたのは小学生の頃で、ファミコンが欲しいと言っていたら親父がHB-55というソニーのMSXマシンを買ってきたのがきっかけだった。ゲームをやりたい一心で、雑誌に付いていたBASICのプログラムを意味もわからずに打ち込んだものだ。その後、PC-9801を親父が買ったりもしたが、ゲーム機兼ワープロとしてしか使わず、プログラミングを再びはじめたのは大学に入って東芝のBREZZAというPCを買ってからだった。といっても、大学で計算機科学を勉強していたわけではなく、当時は理学部の数学科で、計算機センターのNeXTというかっこいいコンピュータを使ってMathematicaをいじっていたりはしたものの、授業でプログラミングをする機会はまったくなかった。せめてそのときに数学をもっとちゃんとやっていたら今ごろ役に立っていたかもしれないが、もともと物理学科を志望していたのに入試の点数が足りなくてあまり興味のなかった数学科に入ってしまったものだから、途中でついていけなくなって文学部哲学科に転部して、プログラミングに関係のあるようなことは大学では結局何一つ学ぶことがなかった。
というわけで、専ら趣味でRubyなどをいじっていたのだが、当時大変な不況で文学部哲学科の学生によい就職先などあるはずもなく(本当は就職活動もろくにしていなかったので、探せばあったのかもしれないが)、何となくプログラミングを仕事にすることになってしまった。
長々と説明してきたが、言いたかったのは、要は、僕は計算機科学の専門教育を受けずにプログラマになってしまったということである。このことはその後の僕の人生に大きく影を落としている…というのはちょっと大げさだが、計算機科学の常識を知らないために、しなくてもよい苦労をしたのは事実である。
最近では僕のようにちゃんとした勉強もせずに何となくプログラマになってしまう人も結構多いようで、「専門教育なんて受けなくてもプログラムはちゃんと書けるよ」というような声も聞く。たしかに書けることは書ける。でも本当に「ちゃんと」書けているだろうか。特に、Rubyのような高級言語によって独学でプログラミングを勉強すると、低レベルな(というのはもちろんハードウェア寄りのという意味だが)知識が不足しがちなように思われる。例えば、Rubyのメーリングリストでは、「浮動小数点数の演算結果が期待と違うがRubyのバグではないか」といった質問が跡を絶たない。
「コンピュータアーキテクチャのエッセンス」は、そんな計算機科学の専門教育を受けていないプログラマに薦めたい一冊である。本書は、元々大学のコンピュータシステム論の教科書として執筆された書籍だが、ハードウェア設計者を目指す学生向けではなく、プログラマ向けに、コンピュータアーキテクチャの基本概念を説明するために書かれている。そのためか、本書の「推薦の辞」にもあるように専門家からは色々と突っ込みどころもあるようだ。本書は、電圧と電流の話からはじまって、論理回路、データやプログラムの表現、プロセッサ、アセンブリ言語、メモリ、入出力、並列化といった概念をわずか400ページほどでまとめている。当然個々の内容は薄くなりがちで、本書だけ読んでもよくわからないところが多いかもしれないが、コンピュータの全体像を掴むためにはこれくらいコンパクトな方がよいのではないだろうか。
本書のテーマの一つは抽象化である。ソフトウェアから見ると、ハードウェアというのは具体的なものに見えるが、実際にはハードウェアもソフトウェア同様に抽象化の階層を成している。そのことは、本書でも繰り返し言及されている。本書の内容の多くはプログラミングに直接役に立つものものではないかもしれないが、それはこの抽象化の階層によって、上位レベルの議論では下位レベルの詳細を気にする必要がないからである。しかし、下位レベルの知識を知った上で、敢えて意識の外に一時的に追い出すのと、そもそも知らないのとでは大きく異なる。ぜひ、本書を手がかりとしてコンピュータアーキテクチャの基本概念を学んだ上で、必要に応じて抽象化の階層を自由に行き来できるようになっていただきたい。僕もあなたに負けないように、これからも勉強して行くつもりである。
後書き
ちゃんと翔泳社の本を選んだし、実は、訳者の一人の鈴木先生は数年前に島大に赴任された方で、笹田さんの知人である。 もちろん、そういった気遣いだけで選んだわけではなく、いい本だと思うので読んでみてください。
あと、浮動小数点数演算の誤差の話に触れたけど、本書ではあまり細かい記述はないので、予備知識なしでこの本だけ読んでも理解できないと思う。 そういうわけで、この本だけ読んで何かの役に立つことはあまりないかもしれないけど、まあそれが教養というものですよね。