2009年6月20日土曜日

Simplicityについて

IBM丸山さんのブログより
やはり社内の議論で、複雑になりすぎたソフトウェアをどうしたら簡単化できるか、と言う議論がありました。複雑さを扱う戦略のもう一つの方法は、抽象化です。でも、今のソフトウェアは、OSやミドルウェアの抽象化のレイヤーを重ねすぎて、かえって複雑になっているようです。アブストラクション・リーケージ(抽象化の漏洩)という言葉があって、せっかく抽象化のレイヤーを作って実装の詳細は隠したのに、性能やセキュリティやその他のいろいろな非機能要件を追い求めていくと、結局実装が透けて見えてきてしまう、というものです。
私も同じことを感じています。IBMが推進しているJ2EEにしろ、Microsoftの.NETの世界にしろOS、コンテナ、フレームワーク、アプリケーションコードとスタックが複雑化しすぎています。レイヤーごとに抽象化することによって、プログラムコードの開発者に見える部分が単純化したりポーティングを容易にする効果があるのですが、トラブルの際に低いレイヤー(コアダンプの解析、ネットワークのトレースなど)から高いレイヤーまで見ないと行けないような場合にはこの複雑化した環境に本当に苦しめられます。
以前JavaのVM自体をOSにしてしまおうという動きがありました、Javaの上でコードを書くことを前提にするのであれば、下で動くOSをJVMと一体化したほうが最適化出来てシンプルで良いのでは無いかという考え方です。残念ながらこの試みは普及するには至りませんでした。
最近ではクライアントサイドはWeb、言い換えるとブラウザ自体がプラットフォーム化しようとしてきています。プラットフォームの主戦場はミドルウェアの世界からブラウザ上で実行されるコードの世界に移行してきているように思えます。HTML 5で提案されている機能はブラウザ単体でのリッチな機能の実装を目指しており、OSのレイヤをバイパスしようとする意図が見え隠れします。Java OSが目指したようにブラウザ自体がOSであるという考え方になるのかもしれません。
サーバー側はクラウド、クライアント側はHTML 5対応のブラウザという世界になった場合、開発者の労力は下がりますが、私のような裏方の世界を支えるエンジニアはどうなるでしょうか?現在と同じように裏側のスタックが単純化されていないと苦労は変わらないと思います。ただ、あまりにもバリエーションがありすぎる現在の企業システムがある程度テンプレート化したクラウドに移行することによってサポートしなければいけないテクノロジーパターンが減ることは期待出来ると思います。

0 件のコメント:

コメントを投稿