プログラミングの進化 〜 2007年問題


父がシステム開発の資料を見ている。覗いてみると「オーバーレイ計画」と書かれている。「オーバーレイ Overlay *1 *2 !?」四半世紀前のプログラミング技法である。その隣には「再入可能 Reentrant *3 」「再利用可能 Reusable」「ゼロクリア Zero-Clear」と、これまた最近は聞かなくなったコンピュータ用語が書かれている。「いまどきなぜそんな古い技術を?」と思わず聞いてしまう。

父いわく「若いSEが知らないというので、教えることになった。」どうやら、古いシステムが残っていてもメンテナンスできるようにしておこうということらしい。団塊の世代が定年退職し、技術継承が危ぶまれるという2007年問題。こんなに近くに存在するとは思わなかった。


いまのSEには、ゼロクリアを忘れて、あるいは自己書き換え *4 が失敗してプログラムを暴走させた経験などないということにあらためて思いを巡らす。もしかしたら「暴走」という単語はもう死語なのかもしれない。

Java のような最近のオブジェクト指向言語は美しい。ポインタもメモリ管理も要らず、データ・アクセスもモジュール・コールも簡単で便利である。原始的なプログラミング環境はコンパイラが整備するようになったことで、プログラマはプロセスのロジック設計に集中できるようになった。プログラミングの敷居が下がったためにプログラマの供給が増え、ソフトウェア市場の需要に応えられるようになった面があることは否めない。

だが、プログラミング技法の進化によってプログラミングのギミックを楽しむようなおもしろさは失われた。原始的なプログラミングでコンピュータを暴走させてみなければ、保守性・拡張性に優れたまともなプログラミングなどできないのではないかと思う。それは、子供の時分にする「いたずら」が、まともな大人へと成長するための必須栄養素であるようなものだ。

ノイマン型コンピューティングを知るソフトウェア技術者が少なくなるという状況は、コンピュータ・システムの基本動作概念という本質の理解を置き去りにして、高度オートメーション化社会が進展していくという、砂上の楼閣のような危うさ *5 を秘めている。

2000年問題(Y2K)はソースコード上の「データ型や演算の桁あふれ」である。ソースコードをレビューすれば見える、今から思えば、根の浅い問題だった。だが、2007年問題はプログラミング思想の断絶である。オーバーレイの概念を知らずに、オーバーレイ・プログラムのメンテナンスを行うなど、想像するだけで気が狂いそうになるくらいの難題。概念を知らなければまったく見えない根の深い問題だ。

*1:メモリ節約のために、プログラムが自分で自分のモジュールの一部を置き換えながら動作するようにプログラムする技術。

*2:現在はセグメンテーション Segmentation とページング Paging という仮想メモリ技術でOSがその役割を担う。

*3:再入可能性は現在も重要な概念である。これを知らずに排他制御の設計でトラブルを起こす技術者は多い。

*4:ノイマン型コンピュータでは制御命令もデータも同じ方法で記憶されるので、自分で制御命令(=自分の通る道)を書き換えることが可能。

*5:問題は古いシステムのメンテナンスだけではない。ノイマン型を悪用したプログラム=コンピュータ・ウィルスに対する免疫も低下する。