ニンテンドーDSのようなゲーム機の上で動作するプログラムを、誰も、同じゲーム機で開発しているとは思っていないと思いますが、パソコン上で動作するアプリケーションは、同じパソコン上の仕掛けを使って開発されていることを不思議に思う人はいません。
しかし、よく考えてみると、ケータイ向けソフトにしろ、そのプログラムが動作する環境とそれを開発する環境は大概の場合において、全く別の環境であって、これが同じというほうが普通ではないのです。
なぜこんなことを議論するのかというと、アプリケーションの開発と言うことの本質を突き詰めていくと、実はこのアプリケーションの動作環境と開発環境の関係に行き着くのではないかと考え始めているからです。
今では当たり前すぎて誰も考えなくなっていますが、プログラムを作るためにはコンパイラーと言うプログラムが必要です。そのコンパイラーを作るためにもコンパイラーが必要ですが、そのコンパイラーを、世の中で初めて作った人は、当然コンパイラーを持っていませんでしたから、自分で治具と言われるプログラムを作って、そのプログラムでコンパイラーを作りました。
何を言いたいかというと、プログラムというものは、プログラムをプログラムの上に次々と積み上げて行くことで開発ができると言う事実です。これは、構造化におけるモジュールの集合がプログラムであるという概念とは全く別の概念であることに注意する必要があります。同じモジュールと言う用語を使うと、いわば、時間軸上のモジュールの集合体がプログラムと定義できるとも言えます。
この概念を生物学で言うところの自己組織化ととらえて、あらためてアプリケーションの開発とは一体どういうことか考えてみると言うのが、今回のテーマです。
CNETに載った「マイクロソフトの本当の姿」と言うコラム記事を読みながら、マイクロソフトの強さの秘密は、実は、このアプリケーションの自己組織化に成功しそのノウハウを蓄積していっているところにあるのではないか、逆に言えば余り成功していない分野ではこのアプリケーションの自己組織化に失敗しているからではないか、更に言えば、それは動作環境と開発環境が異なるアプリケーションの分野ではないのか等々、たちまち新たなる仮説を思い描くことができます。
アプリケーションの自己組織化とは、今あるアプリケーションを、今そこに存在するアプリケーション単体の存在と捉えないで、今のアプリケーションに至る以前のすべてのバージョンのプログラムを含めてアプリケーションと認識するという考え方です。もう少し具体的に言うと、例えばあるアプリケーションの画面に新しくボタンが追加されたとします。このボタンを押すことで、新しい機能を実行することができるようになるのですが、これは以前のバージョンのプログラムが存在しなければ実現できません。
通常、新しいバージョンのプログラムを一から作り直すと言うことはなく、従来のバージョンの画面の様式の上に新しい様式を適用していくのが一般的ですが、画面は変わらなくてもその性能が格段に進歩するというのは良くある話しです。この場合でも、以前のバージョンがあるからその性能の進歩を実感できるのです。
次回以降、このあたりの話しをもう少し詰めていきたいと思います。 KAI