第二話「この世界の地図を手に入れよう〜コンピュータ・サイエンスのコア科目とは何か〜 」

 大学院生活の第1週目にして、プログラミングの習得という高い壁に行く手を阻まれて、お先真っ暗になった私であった。プログラミング言語のルールに従った命令文をエディタというソフトを使用してタイプして、コンパイルしてエラーがなければ実行できるという手順が分かった(第1話参照)。しかし、“分かること”と“できること”の間にはかなりの差がある。たとえば、たった1つ間違ってスペースを入れたり、“;”と“:”を間違えたりしただけでエラーメッセージが出る。(考えてみれば当たり前だけど)コンピュータは正確に入力しないと、こちらの思い通りに動いてはくれないシロモノである。
 この「プログラムに含まれる間違えを“バグ”(Bug=虫)というのだよ。この虫がねー。邪魔なんだよね」と後ろの席の人が教えてくれた。すると、「一人でバグ取りのために残業していると、なかなか取れなくて、ついドナドナドーナとか暗く歌っちゃうんだよねー。」と前の席の人も振り向いて話しかけてくれる。やがてドナドナな気持ちを私も実感する。何度やってもエラーメッセージばかり繰り返されて、どうして動いてくれないの?と泣きたくなるとドナドナドーナと頭の中で“例の歌”が響き渡る。
 初心者の私は、まずはC言語(注1)の基礎を習得するために、お手本のソースプログラムをタイプして、「Ctrl-x, Ctrl-sで名前を付けて保存して、“%gcc ファイル名.c”でコンパイル、エラーがでなけりゃ、“%. /a .out ”」とのんきに歌いながら、ただひたすら、毎日毎日、単純作業を繰り返した。テキストの基本的なところをタイプして、エラーが消えるまでバグを取り続けた。不思議なもので、あたりまえに動くだけでほんとに嬉しかったし、徐々にタイプミスも減り、バグを発見するのも早くなっていった。やがて、単にタイプしていただけから少し成長して、コマンドの意味がわかるようになり始めた。ここまで来るのもずいぶん時間がかかったが、C言語の次はJava(注2)が待っている。 喜びに浸っている暇はない。でも、かすかに、不安が消えて、費やした時間の分だけ自信がうまれた。

図

 依然として、周りの人々(クラスメイトや講師の先生)が何の話をしているのか話が見えなくて、そのことが何よりつらかった。こちらは自慢じゃないが“超”が付くほど初心者なのである。ペースが遅いのは、しかたがないと自分に言い聞かせた。“学問に王道はなし”と昔の人もそう言っているじゃないか。(そうだ!そうだ!)地道に行こうと心に誓う。
 そうは言っても、あまりに進み具合が遅いので、「なんとか、ならないものかなー」と考えていた。ふと、「そうだ、この世界の地図がほしいな」とひらめいた。あるとき、教授に“この世界の地図はどうしたら手に入れることができますか?”と質問をした。教授曰く、の基本フレームワークの知識は次の科目を習得することで培われると言う。

[コンピュータ・サイエンスのコア科目10科目]
  1. データ構造とアルゴリズム
  2. コンピュータ・アーキテクチャ
  3. オブジェクトオリエンテッド・プログラミング
  4. クライアント・サーバー・データベースシステム
  5. オペレーティングシステム(UNIX,Linuxを含む)
  6. ソフトウェア工学
  7. ビジュアルコンピューティング(コンピュータグラフィックス、パターン認識、可視化技術を含む)
  8. コンピュータネットワーク(サーバー構成技術、ネットワークセキュリティ技術を含む)
  9. コンパイラー(コンパラージェネレータを含む)
  10. 数値解析(NUEBS等の曲面近似関数を含む)、プロセス中心の企業管理技術(情報駆動企業管理技術、リストラクチャリング技術を含む)、代数的位相幾何学などの近代学

 この10科目をすべて修得するのはかなり時間がかかりそうである。(こんなたくさんできるのかな?と思うでしょ。私も“そりゃ、全部は無理でしょ”と正直思いましたよ。)この世界の地図を手に入れよう」と目標を設定したのは良いが、どこから手をつければ良いのか、質問したら、ますます分からなくなってしまったのである。
 何しろ、その頃の私といえば、“アルゴリズム(注3)って、どんな音楽?”というレベルだったのである。物心ついたときからアルゴリズムを知っていたという人もいるというのに(そういう人もかなり珍しいと思うが、私の席の近くに座っていた)である。その後に、アルゴリズムで毎週、毎週、想像を越えた苦しい思いをすることになるとは、このときは想像もつかなかったのである。

(注1)C言語
 1970年代にアメリカのベル研究所(現在のAT&T)でKernighanとRitchieによって開発された、OSであるUNIXを記述するために開発されたプログラミング言語。簡潔な表現で柔軟なプログラムが作成できるため、事務処理システムからOSに至るまで幅広くシステム開発に利用できるほどの汎用性を持っている。

(注2)Java
1995年にアメリカのサン・マイクロシステムズが発表したプログラミング言語。「ジャバ」と読む。どんな環境(WindowsやMacOS)でも実行でき、Webブラウザのなかにアプリケーションを組み込めるといった特徴があり、インターネットの普及に伴いネットワーク対応言語として広まった。

(注3)アルゴリズム
リズムといっても、もちろん音楽とは関係ない。アルゴリズム(algorithm)とは、算法と翻訳される。ある問題を解くための手順のことである。
詳しくは第3話以降で説明予定。

(2001年12月)