ソフトウェア再利用技術と社会のアナロジー

そう言えば会社でDIコンテナの勉強会をしたんですが、
いまだ自分がDIコンテナをどう受け止めるべきかまとめきれない。
まぁ、ある技術に対して明確な指針を持たなければならない、というのも窮屈なわけで、
今はもうすこし見守ろうという感じです。


でも基本的には元祖天才ファウラーに同意。
『Inversion of Control コンテナと Dependency Injection パターン』


ということでまたバカ話をひとつ。
ソフトウェア再利用技術の変遷は、社会の変遷と似てるなぁ、という話。

API、ライブラリ、共通ルーチンの時代=手工業的社会

小さな、それだけでは意味の少ない機能を呼び出すことでアプリケーションを作る。
アプリケーションはAPIに依存していて再利用ができない。

機械設備の導入で生産性は向上したが、組織的には一般性をもたない。
働く人々は特化した伝統や熟練に縛られ、交換しにくい。

フレームワークの時代=組織化された産業社会

大きくて、未完成なアプリケーションの大枠がまずあって、
個別の機能を規約に則って組み込むことでアプリケーションを作る。
アプリケーションはフレームワークに依存していて再利用がしにくい。

組織化によって合理性が高まり、働く人々は
少なくともその枠組み(会社組織)に沿って期待される職能を発揮すればよい。
ただし、依然としてその会社組織に特化することを余儀なくされ、それゆえ人は交換しにくい。

DIコンテナ、AOPの時代=グローバル化した産業社会

DI、AOPによってフレームワークへの依存性が低減される。
それによってフレームワークが強いる規則から解放されたコンポーネントが生まれやすくなり、
独立性の高いコンポーネントを再利用しやすくなる。

会社組織に特化した人よりも、グローバルな価値を提供できる人が、
目的に応じてその都度協調してゆく世界。
(ここから蛇足)確かに人の交換はしやすいけれど、グローバルな価値を提供できる人を
育てるのは難しいし、そもそも誰が責任を持って育てるのか。


で、もちろん時代は一方向だけのベクトルで動いてるわけでなく、
大きな物語」を否定したポストモダン的状況も同時に進行しているわけで…

PerlとかPHPとか(Ruby on Railsなんかも?)軽量言語の潮流=ポストモダン社会

疎結合性やコンポーネント化やDRY原則を過剰に意識しすぎるメインストリームへの反発から、
その場の要請に合わせ、雑多なもの繋ぎ、早く作りこむことに集中する。
※既に『ポストモダンプログラミング』という概念は存在する。

大きな物語の終焉」、「全体性の喪失」という言葉に代表されるように、
全体性の存在自体を信じられなくなった人々の社会であり、より小さな共同体が乱立する社会。


いずれにしても社会システムのほうが先行しているわけで、
じっと社会を見つめてるうちに新しい技術パラダイムも見えるかも、
という超妄想をしてみる今日この頃なのです。