コンピュータ関係の書籍を読んでいて,その内容に刺激を受け,著者の力量に感銘を覚えることは少なくない。しかし,私の読書経験のなかで貴重な一冊だと思わせてくれる本はまずない(計算機科学の本なんかで感動するか,普通?)。私にはそんな本が二冊ある。B. W. カーニハン,D. M. リッチーの『プログラミング言語 C』と,D. E. クヌースの『TeX ブック』である。
前者は,C 言語の入門書にして言語仕様の解説書として,決定的な役割を果たし続けている名著中の名著である。私は UNIX サーバの仕事が舞い込みはじめた 1992 年あたりに,本書を購入して C を勉強したのである。計算機の勉強において,そのアーキテクチャに親和性を持つプログラミング言語を学び,システム・プログラムを自分で書いてみることが,OS 理解の王道である。その当時は UNIX といえば C 言語だったのである。
ガチガチの汎用機アセンブラの「文体」にそれまで浸かっていた私は,『プログラミング言語 C』に紛れもなく驚嘆したのである。解説に付したサンプル・コードの簡潔な美しさ。逆ポーランド記法,二分木の再帰探索,クイックソートなどのアルゴリズムのコードを一頁以内で示す書法。高度なアルゴリズムを,まったくムダがなく簡潔にシンプルに,実現してみせる。これこそプログラム書法というものだと,ひいては計算機言語のみならず「日常の文章」もこのように書けたらなあと,心底憧れを覚えたのである。
自分の伝えたい考えをしるすのにこの変数(単語)は必要か? もっとすっきり簡単にできないか? 一パラグラフにだらだら詰め込むのではなく,ある共通部分を関数(キーパラグラフ)に纏めたほうがよくはないか? そんなわけで,その後本書の影響により,私は日本語の文章をしるす場合にも,もう「推敲」などという故事は吹き飛んで,「設計」,「デバッグ」という態度で見直しをするようになってしまった。だけど,本書のコードの無駄のなさ・シンプルさ・明快さはなかなか身に付かない。
いまでも C のプログラムを書きながら本書を参照するたびに,「美しい」と思ってしまう。とくに,二分木アルゴリズムによるワードカウンタのコード例には惚れ惚れしてしまう。自己参照構造体の解説にあるものだ(pp. 168-73)。私は必死こいて本書を研究し,コンコーダンス・プログラムでたくさんのコードを拝借した。
本書の Amazon 評をみると面白い。ぜひみてください。プログラムの書き方がわかりづらいとか,入門書としては勧められないとか,酷評している者がある(その一方で,Amazon 評者には『プログラミング言語 C』なんて読むより,GNU C コンパイラのソースを読めなどと諭す,どうも TPO を弁えない極端なXXもいるのがまたチョー面白い。C を「学ぶ」ための本が話題になっているのに,C 知識を前提とした提案をするのは,最初から C を知っていたかのような知ったかぶりの典型ではないか?)。これらの評を読んでいると,古典は論理的でなく意味がわからないのでつまらない,この作家ひでえ文体とか,まあそんなのに類する愚評を想起してしまう。なにか別のものを求めてませんか? わかりづらさを翻訳のせいにしている者もいる。評者自らの(本を読む)レベルをまる出しにしているわけだ。そんな人に合わせた甘口の C 言語本が売れるわけだとある意味で納得する。
私は断言する。この本は間違いなく「入門書」であるし,この本のようにコードを書くのが C のマナーである。そして,本書はそれに相応しく「わかり易く」書かれているし,訳されている。ただ,簡潔なのだ。そして読者に媚びない。これが「わかりづらい」という者は,C の前にまずシステマティックな日本語文(正確を志す,科学的主題に相応しい文章)を学ぶべきだということである(偉そうに)。
『プログラミング言語 C』は,プログラミング言語の習いはじめの第一声として “hello, world” を出力するコードを書いてみる,というあの有名なマナーを定着させた。“hello, Java world” だったり,“hello, Perl” だったり,その後あまりに当たり前になってしまって,「病気かこいつら」と思うほどになった。そんな常套手段に飽き飽きしていたちょうどそのころ,私は古風な病いを得て,病院に収容されてしまった日々のなかで, D. E. クヌース『TeX ブック』に出会ったのである。
TeX, LaTeX そのものの面白さについてはここでは言うまい。この『TeX ブック』も TeX を一からはじめる初学者を対象に書かれた入門書にして決定版である。一方,ユーモアとジョークに満ちたその語り口は,コンピュータ書籍においてかつてないものではないだろうか(これはただの想像)。本書のジョーク精神の最たる部分は,第 6 章「TeX を実行するには」である。読者を端末の前に座らせ,ハイ次はこうやってみましょう,という初心者向けの例を示している。ところが,この最初の実行例の解説は次のようなものである。
うまく実行できると,TeX は次のようなメッセージを表示してくる。This is TeX, Version 3.14 (preloaded format=plain 89.7.15) **“**” は TeX が入力ファイル名を要求している印である。
さて次に,\relax と [ 中略 ] 入力し,<改行> キー [ 中略 ] を押してみよう。そうすると TeX は始動し,長い原稿を読み込む準備をする。しかしこれはごく簡単な実行例で,TeX に休んでいいよ,と言っているのである。つまり \relax は “何もするな” という意味のコントロール・シーケンスである。
これがクヌース先生一流の,超一級のジョークだということがおわかりだろうか? いったいどこの誰が,紹介したい対象となっているシステムのはじめの実行例で「休む」,「何もしない」なんて命令を入力させるだろうか? そう,まずは relax しようというわけだ。でも,プログラミング言語のさまざまなトリックに讃歎した経験をもつ者は,このジョークの表面的な意味の裏に,TeX システムが「何もしない命令」を用意していることの重要性をきちんと読み取るのである。沈黙は金。このシステムはただものではないと知るのである。「今度は Hello? と入力してみる」という紋切型が,このあとに続く(同頁)。
TeX はバージョンが上がるたびに 3.1415... と π に近づく。クヌース先生がお亡くなりになったら(縁起でもないが)バージョン π でシステムは凍結とするのだそうである。こういう完全主義的ジョークで大いなる変化球を投げて来るところが,その後私を虜にしてしまった TeX の深さ,広さ,長いつきあいをさせてしまう親しみ,などなどの根源にあるのだ(仕事ではまったく使いませんが)。