登録会員限定記事 現在はどなたでも閲覧可能です
こうして見ていくと、ロジックの記述にあまり難しいところはない。個人的には、初期のBASICに似ているという印象を持った。データの指定に癖はあるものの、コードを書くのは簡単だといっていい。他の言語を使えるプログラマーなら、小一時間も調べれば書けるようになるだろう。
COBOLが抱える「悪い文化」
COBOLのプログラミングは難しいのではないかと予想してコードを書いてみたが、実際には思いの外、簡単だった。となると「COBOLのプログラミングが簡単なのなら、なぜ勤労統計の集計ミスのような問題が起こったのか」と考える人がいるかもしれない。
ただ、言語の文法が単純だということと、コードのチェックや修正が容易かどうかは全く別の話だ。特に、他のプログラマーが書いたコードを調べたり修正したりするのは、どんな言語で書かれたコードでも簡単ではない。長期間にわたって修正を繰り返したシステムは、開発当初からコードを見ていた人でない限り、文脈を追うのは極めて困難だ。
しかも、COBOLには他の人が書いたコードを分かりにくくする「悪い文化」がある。
例えば、COBOLでは「グローバル変数」しか使えない。グローバル変数は、プログラムのどこからでも値の参照や変更ができる変数だ。一方、局所的にしか値の参照や変更ができない変数をローカル変数と呼ぶ。最近のCOBOL処理系にはローカル変数を使えるものもあるが、過去との互換性を保つため、ローカル変数の使用は禁止されることが多いという。
グローバル変数しかないと、変数の値がどこで変更されるか分からず、プログラムの挙動を追うのが難しくなる。加えて、影響範囲を限定できないため、コードのモジュール化も困難になる。その結果、処理が絡み合ったいわゆる「スパゲティコード」になりがちだ。現代的なプログラミングでは、グローバル変数の使用を禁止するのが一般的になっている。COBOLとは正反対なのだ。
また、実際のCOBOLのプログラムでは、変数名に意味のある単語を使うのではなく、機械的な連番の変数名をつけることもある。おそらく、昔のメインフレームの制限を引きずっているためだろう。どんな役割の変数かをいちいち対照表で確かめたり推測したりしなければならず、人間が読むのはとてもつらいコードになる。
勤労統計の問題でコードのチェックや修正がどれほど大変だったのかは分からない。しかし、COBOLを使っていたという事実は、この問題に対してマイナスの影響こそあれプラスに働くことはなかっただろう。個人的には、COBOLはその悪い文化と共に消えていくしかないと思っている。