ストラウストラップのプログラミング入門

英国ロマン派の詩人 Lord Byron の娘 Augusta Ada Lovelace 伯爵夫人は,1840 年代,かの有名な Charles Babbage とともに当時の画期的な機械式計算機に取り組んだ女性である。これをもって,彼女を近代最初のプログラマと評してよいかも知れない。彼女は米国国防省の軍事目的に使用されるプログラミング言語 Ada にその名を残している。

こういうことを知っているコンピュータ技術者はそう多くない。しかし計算機とその活用の歴史を知ることは,いま目の前にある未知の計算機技術を習得するに当たって,知識にその目的や背景にあるドラマで膨らみを持たせることができる。ビャーネ・ストラウストラップの著書『プログラミング入門 — C++ によるプログラミングの原則と実践』は,普通の「入門書」ではまず間違いなく触れられることのない,プログラミング言語のこうした「歴史,理想,プロフェッショナリズム」(第 22 章・第 1 節の題名)にも充分な記述を割いている。この Ada の逸話も私はこの本で知ったのである。

コンピュータ・プログラミングを習おうという人は,そのほとんどがコンピュータ・メーカーやシステム部門の技術者・プログラマ,理科の学生・研究者だろうと思う。パソコンが使えるようになり,仕事でコンピュータを専門的に扱わないけれども,ちょっと自分でもプログラムを作りたいと考えプログラミング言語を独学する人を,私はあんまり想像できない。何故なら,コンピュータ・プログラミングを習得し「実用的な」プログラムを書くことができるようになるまでには,計算機のしくみ,計算理論,アルゴリズムとデータ構造,オペレーティング・システムの役割とその構造,などなど,かなり専門的な前提知識を習得しなければならず,これは「趣味的」取組み方では極めて難しい部類に属するからである。エクセル,ワード,フォトショップ,LaTeX などのアプリケーション・プログラムが 1 冊入門書を読めばだいたい「使いこなせる」ようになる(そうでなきゃ,パソコンなんて売れやしない)のとは,大きな,根本的違いがある。

プログラミング言語の入門書は星の数ほど出版されている。それは,どれもこれもコンピュータ・プログラミング前提知識に疎い人にとっては,言語の文法とは直接関係のない計算機の技術的概念についてどこかで必ず越えられない壁にブチ当たる,そういう要素を含まざるを得ず,「やさしく,やさしく」という入門書の取組みが半ば無限ループに嵌り込んでいるからである。で,次から次へと新刊書が出ては消えて行く。初心者はどれを手に取っても満足できない(読み通せないのだから満足できるわけがない)。そんなのを読んでも前提知識のない人にとって自分の問題解決にまったく役に立たない。「やさしくできない」ことがあるのである。『C言語入門』1 冊だけで「実用的な」— 要するに,誰かの役に立つ,まともな — プログラムが書けるようになったという人がいれば,彼の言うことは眉にツバを付けてよい。ウソである。何冊も計算機関係の書籍を勉強してはじめて,プログラミング言語の本が理解できるようになるからだ。

ストラウストラップの『入門』は,そういう入門書の限界を熟知していて,よって,プログラムを作るということはどういう営みなのかから始めて,設計・テスト・抽象化の流れをひとつひとつ説明し,計算機のメモリ構造と関連させてプログラミング言語のデータ構造・型を解説し,代表的なアルゴリズム(算法・論理手続き)について C++ 標準テンプレート・ライブラリの具体例を通して教えてくれる。C++ 言語仕様について基本的なことがらを体系的に述べている。著者は C++ 言語を創造した科学者であるから,もっとも信頼出来る解説であるのはいうまでもない。正規表現,テキスト操作,グラフィックス操作,数値計算というプログラミングにおいて避けては通れない概念を,個別の節を設けてきちんと詳説している。さらに「歴史,理想,プロフェッショナリズム」といった「哲学」の記述もある。結果的に 1,127 ページという大著になっている。このページ数だけで,「初心者」は恐れをなして立ち去ってしまうかも知れない。意義あるものをラクして習得しようなどと思う人は,実用的なレベルに達することはない。本書はその意味で,ある程度プログラミングができるようになった人が自分の理解を整理するために読むのに適している,といえるかも知れない。

本書によって,プログラミングという作業がどのようなものかを理解し,専門的要素のないプログラムなら書くことができるようになるはずである。もちろん,自分の課題解決のためには,本書だけでは足りない。課題の計算機上での実現に応じた専門的調査・文献参照を別途に行わなければならない局面は必ず出て来る。しかし,その手間を厭わず取り組むことで,「自分自身のオリジナルな課題の解決」がパソコン上で可能となるのである。これこそが本当のコンピュータの使い方であると私は思う。コンピュータとは,ワードやエクセルを動かすための機械である以上に,自分の課題解決のために自分でプログラムを作りそれを動かすことで真価を発揮するのだ。コンピュータはプログラムを「動かすため」ではなくプログラムを「作るため」にこそある,とすら私は思っている。