全6952文字
PR

 プリンストン大学で1999年の秋から行われている一般人向け講義「Computers in Our World」。『プログラミング言語C』の著者としても知られる伝説の計算機科学者ブライアン・カーニハン氏が、今こそ知っておくべき「デジタル世界」の基礎知識を易しく解説する人気の授業だ。今回は、ソフトはどう作られているか、「バグ」とは何かについて取り上げる。

 実社会でのプログラミングは大規模なものになりがちです。その戦略は、本を書いたり他の大きなプロジェクトを請け負ったりするときに採用するものと似通っています。

 すなわち、まず何をすべきかを明らかにして、大きな仕様をどんどん小さなピース(部品)へと分解していき、それぞれのピースを、相互の組み合わせを保証しながら、別々に作成していくのです。

 プログラミングでは、個々のピースの大きさは、適当なプログラミング言語を使って1人の人間が正確な計算ステップを書ける大きさになりがちです。異なるプログラマーによって書かれたピース同士が、一緒に機能するようにすることは難しい挑戦です。

 そしてこれを正しく行えないことが、エラーの主たる原因になります。たとえば、1999年のことですが、NASAの火星探査機であるマーズ・クライメイト・オービターの飛行システムのソフトウエアは、メートル法を単位にして推力を計算していました。

 しかし、軌道修正のデータがヤード・ポンド法で入力されたのです。こうして誤った軌道により、探査機は火星の地表に近付きすぎてしまいました。

 様々な言語を説明するためにこれまで示した例は、大部分が10行以内でした。入門プログラミング講座で書かれるような小さなプログラムは、おそらく数十から数百行のコードになるでしょう。

 私が生まれて初めて書いた最初の「本物の」プログラム、すなわち他の多くの人びとに使われているという意味で本物のプログラムは、約1,000行のFortranでした。

 それは私の論文をフォーマットして印刷するためのシンプルなワードプロセッサーでした。それはある学生団体に引き継がれて、私が卒業してからもさらに5年ほど使われ続けたのです。ああ、古き良き時代でした!

 現在だと、有用なタスクを実行するための、よりしっかりとしたプログラムなら、数千から数万行が必要になるかもしれません。

 小さなグループで作業する、私のプロジェクトの学生たちは日常的に、8週間から10週間のうちに2~3千行のコードを生み出します。その期間にはシステムを設計する時間や、1つか2つの新しい言語を学ぶ時間も含まれています。

 もちろんその間、他の講座や課外活動にも取り組まなければなりません。そこで生み出されるプログラムの多くは、大学のデータベースに簡単にアクセスするためのウェブサービスや、ソーシャル活動を促進するための携帯電話アプリです。