プログラムをデバッグしている時,ここをいじったら直ったが,なぜだかよくわからない,という経験はありませんか? なにもいじっていないのに,いつの間にか動くようになった,ということもあるかもしれません。いずれにせよこんなときは,「ちょっと気持ち悪い」などと思うではないでしょうか。

 このような気持ち悪さを感じることは,プログラマとしてとても大事なことです。気持ち悪さの原因は,なぜそうなったのかを推測するための知識が不足していることを示しています。コンピュータの仕組みを知れば,気持ち悪さを解消できるだけでなく,うまく動かない時に原因の想像がつきやすくなります。コンピュータの仕組みを根本から学べる5冊を紹介します。

プログラムはなぜ動くのか
矢沢 久雄 著
日経ソフトウエア 監修
日経BP社 発行
2001年10月 293ページ
2400円(本体)
bk1で購入する
コンピュータの構成と設計
第2版 [上]

David A. Patterson,John L. Hennessy 著
成田 光彰 訳
日経BP社 発行
1999年5月 398ページ 4400円(本体)
bk1で購入する

コンピュータの仕組みを学ぶ2冊

 最初に紹介するのは,いきなり手前みそで恐縮ですが「プログラムはなぜ動くのか」です。本誌2000年7月号~2001年6月号で掲載した同名の連載を基にした書籍す。図を多用しながら,なんらかのプログラミング言語を利用した経験があれば十分理解できるようなやさしい語り口で解説してくれます。

 すいすいと読み進めていくと,いままでよくわからなかったコンピュータの中身が見えてくるようになるはずです。自分で書いてコンパイルしたプログラムが,メモリーにロードされ,CPUが処理していくさまを想像できるようになればしめたものです。不可解なバグや,うまく動作しないトラブルに遭遇したとき,原因のあたりをつけられるようになっているはずです。原因として疑う場所がずっと減るので,素早く問題を解決できます。

 プログラムはなぜ動くのかを読んで,仕組みがわかることが楽しいと思えたなら,ぜひもうちょっと詳しい仕組みを解説する書籍にも手を広げてみてください。お薦めは「コンピュータの構成と設計 第2版 [上]」です。

 本書はコンピュータの構成要素,性能測定,マシン語,算術論理演算,プロセサ内部の動きなど,ソフトウエアとハードウエアの境目を,かなり詳しく解説しています。解説は豊富な図や写真を用いながら,ゆっくり着実に進んでいきます。たとえば加算や減算などを実行するALU(Arithmetic Logic Unit)の説明では,まず1ビットの場合どうなるかを説明し,次に桁の繰り上げを説明してから,32ビットに拡張する,という手順を踏んでくれます。高級プログラミング言語とマシン語の関係も,

g = h + A[i];

という式をコンパイルすると,どのようなマシン語が生成され,レジスタにどのような値を代入するかを,マシン語の1行1行を解きほぐしながら解説してくれます。2進数とはなにかがわかっていれば,十分理解できるはずです。

 読み終えた後にパソコンを使ってみると,起動の時からずっと,コンピュータの中で何が起こっているのかをイメージできるようになっていることに気づくでしょう。ちなみに下巻では,CPUのパイプライン,プロセサと周辺装置のインタフェース,マルチプロセサの動作などを解説していきます。通して読めば,より深くコンピュータのソフトとハードの関係を学べますが,アプリケーション寄りのプログラミングが目的なら,ここまでの知識は必要ないかもしれません。

珠玉のプログラミング
ジョン・ベントリー 著
小林 健一郎 訳
ピアソン・エデュケーション 発行
2001年10月 305ページ
3400円(本体)
bk1で購入する

データ構造とアルゴリズムを極める1冊

 ハードウエアの仕組みばかり追求して,プログラマとしての知識がかたよってしまってはいけません。ソフトウエアの仕組み,つまりデータ構造とアルゴリズムをじっくり学べる書籍を紹介しましょう。「珠玉のプログラミング」です。

 本書は,データで決まるプログラムの構造,アルゴリズム・デザインのテクニック,メモリーを節約する方法──といった内容を扱う15個のコラムで構成しています。サーチやソートといったアルゴリズムを利用する例題に対して,どんなアルゴリズムを利用するのがふさわしいかという考え方と,判断のポイントを解説していきます。

 内容は高度で,楽に読み進められる書籍ではありません。それぞれのコラムで少なくとも1回は「さあ,どうしますか?」というように,読者に立ち止まって考えることを要求します。これを楽しめるかどうかが,本書が役に立つかどうかの分かれ目でしょう。自力で考えて,うまいアルゴリズムを思いついた瞬間は,楽しく,気持ちいいはずです。

 コンパクトで高速なプログラム・コードを書きたいとよく思っていて,ソート,サーチといったアルゴリズムを考えることが好きな人には,特にお薦めします。データ構造とアルゴリズムの世界で,ゆっくり思慮を巡らせてください。

マスタリング
TCP/IP 入門編
第3版

竹下 隆史,村山 公保,荒井 透,苅田 幸雄 著
オーム社 発行
2002年2月 322ページ
2200円(本体)
bk1で購入する
ソフトウェアの20世紀
長谷川 裕行 著
翔泳社 発行
2000年12月 319ページ
2400円(本体)
bk1で購入する

ネットワークの仕組みと歴史もどうぞ

 ハードウエアとソフトウエアの仕組みを学んだら,次はネットワークなんていかがでしょう。コンピュータ同士が通信するための決まりをプロトコルといいますが,このプロトコルの仕組みもよく考えられたもので,学ぶと大変面白いものです。もちろん仕組みを学べば,トラブルが発生したときに何が原因で動かないかを推測する力が身につきます。

 「マスタリング TCP/IP 入門編 第3版」は,ネットワークの仕組みを一から学びたい人に最適の一冊です。ネットワークがどのような仕組みで動いているのか広くを学べます。

 ネットワークの世界は,プログラミングの世界と同様に,難解な用語が飛び交う世界ですが,本書はやさしくていねいに,TCP/IPの位置づけ,発展した過程,基礎技術などを解説していきます。

 本書を読み解くにあたって,ネットワークの知識はほとんど必要ありません。順番に読んでいけば,コンピュータとコンピュータをつなぐネットワーク上でどのようなデータがやりとりされているかを理解できるはずです。

 HTTP,FTPなど,プログラマに近いプロトコルの本書の説明はかなり駆け足です。もし満足できなかったら,これらのプロトコルの動作をまとめたドキュメントであるRFC(Request for Comments)を当たってみてください。原典を英語で読むのも良いですが,重要なプロトコルの多くは,ボランティアによる日本語訳がインターネット上で公開されています。本書で学んだネットワークの基礎と仕組みは,RFCを読みこなす基礎体力として役立つでしょう。

 最後にお薦めする書籍は「ソフトウェアの20世紀」です。翔泳社が刊行していた雑誌「Dr. Dobb's Journal Japan」(現在は休刊)で1998年3月号から1年間にわたって連載された「プログラミング年代記」を単行本にまとめました。人が指を使って数を数えていた頃から現在までのコンピュータとソフトウエアの歴史を,14の時代に分け,それぞれの時代背景,コンピュータの技術,プログラミング言語,人物──を解説しています。このような構成のおかげか,社会とコンピュータ,人とコンピュータの関係をよりよく理解できます。

 特にプログラマにとっては,FORTRANやCOBOLが開発された背景や用途など,プログラミング言語の歴史が楽しく読めるはずです。APL,ALGOL,LOGOといった,最近はあまり見かけなくなった古いプログラミング言語も,サンプル・コードを挙げながら同様に解説しています。楽しく読み進めるうちに,現在自分が利用しているプログラミング言語や,開発環境が,過去の何を引き継いできたのか,どんな位置づけなのかを理解できるでしょう。

 本書が掲載する豊富な写真も楽しめます。コンピュータの元祖と言われるENIACの写真はもちろん,若いビル・ゲイツ(なんと長髪です)の顔写真もあります。表紙に載っている女性が手に持つ,巨大なドーナツ型の円盤は,世界初の磁気ディスクRAMACです。