私は大学1年生で履修する「プログラミング演習A」を五年にわたって受講した。
最初は緑色の文字が出るIBM PS-55上のDOSで、MIFESでPascalを書いていた。ほとんどのMIFESはYankee Doodleや1701に多層感染しており、頻繁にクラッシュした。ドットインパクトプリンタでインクリボンを使って連続紙に印刷していた。CAPCOM ストIIダッシュ&ターボ稼働開始。
二年目はPC-9801BXでWindows3.1が動いていた。SPARC station(ピザ箱)にrloginしてCUIのC言語を書いていた。プリンタで印刷する代わりに、LaTeXで作成したレポートをメールする形式になった。SHARP X68030発売。
三年目はPC-9821Xa7でWindowsNT3.5が動いていた。C言語とLaTeXの組み合わせがこの年から定着した。SONY PlayStation発売。
四年目はFMVだった気がするが覚えてない。Microsoft Windows95発売。
五年目はMINTとロゴが入ったX端末になった。SPARC stationは端末室でひとりが1台使う老朽機になっていた。任天堂 バーチャルボーイ発売。
私はプログラミング演習Aを舐めていた。あまりにもチョロいのでやる気が出なかった。しかし、授業に時々出ていた。そして、とても興味深い問いを発見した。
「1から10まで合計し、結果を出力するプログラムを書きなさい」
(チョロい)
#include <stdio.h>
int main(void) {
int sum=0;
int i;
for ( i=1 ; i<=10 ; i++ ) {
sum += i;
}
printf( "answer = %d\n", sum );
return 0;
}
「記述したプログラムが正しいことを証明しなさい」
(は?)
1から10まで合計して55と画面に出すプログラムが正しいかどうかなんて「見れば分かる」じゃないか。しかし改めて問われてみると即答出来なかった。
バグがないか目で見てなんとなくセーフだと思う行為は正しさの証明にならない。そしてデバグですらない。
私は未熟だった。教授は数学的帰納法を使ってソースコードの正しさを証明した。私はソフトウェア工学の入り口に立ったばかりだった。
私が趣味や仕事で見てきた「とりあえずプログラム出来る人たち」は「ソースコードの正しさを証明するスキル」がなかった。当然、「正しいかどうか分からずに書いているソースコード」の品質は安定しなかった。
証明問題に習熟してくると、要件を理解した時点で完全なソースコードをイメージ出来るようになる。あふれるようにソースコードがイメージされ、手がタイプする速度に追いつかなくなる。ソースコードをコピペするのは、そうしなければ手が頭に追いつかないからだ。
この段階になると、ソフトウェア開発のほとんどの時間は「要件を精査すること」に費やされる。ノートにぐちゃぐちゃと落書きしている時間が、最も重要な作業になる。
私が一人でソフトウェアを作る時、ウォーターフォールなのかアジャイルなのかもう分からなくなってしまった。
ソースコードはどこから来るのだろうか。