ソフトウェアの拡張と劣化

デカルトの『方法序説』に面白いことが書いてあった:

たくさんの部品を寄せ集めて作り,いろいろな親方の手を渡ってきた作品は,多くの場合,一人だけで苦労して仕上げた作品ほどの完成度が見られない.たとえばよくあることだが,一人の建築家が請け負って作りあげた建物は,何人もの建築家が,もともと別の目的で建てられた古い壁を生かしながら修復につとめた建物よりも,壮麗で整然としている.同じく,はじめは城壁のある村落にすぎなかったのが時とともに大都市に発展していった古い町は,一人の技師が思い通りに平原に線引きした規則正しい城塞都市にくらべると,ふつうひどく不揃いだ.

400年前に言われたことだがこれはデカルトの時代に限った話ではなく,現代でも正しい.どの時代でも成り立つ普遍的な事実なのであろう.しばしばソフトウェアは建築に例えられるが,ソフトウェアでもデカルトが言っていることが成り立つ.一般に一人で組んだソフトウェアの方が,多くの人が拡張していったソフトウェアよりも完成度が高い.多くの人が手を加えれば加えるほど,ソフトウェアは醜いものになっていく.

手を入れる人の数が多いと設計の一貫性が保てなくなるからである.良いソフトウェアは設計が一貫している.設計が一貫していない乱雑なソフトウェアは悪いソフトウェアだ.たった一つの設計思想のもとに整然と組まれたソフトウェアは美しい.設計思想がないパッチワークのようなソフトウェアは美しくない.

ただし,手を加える人もソフトウェアを醜くしようと思って手を加えているわけではない.古い設計のままでは新しい要求を叶えられないから,仕方なく手を加えているのである.要求が一貫しているなら設計も一貫したものになるだろう.だが,要求は一貫したものではなく,時々に応じて変わっていく.変化する要求に応じて随時ソフトウェアを更新していけば,ひどい異臭を放つ代物になっていくのも仕方のないことだ.まして,一度書いたところは触ってはいけない・デグレードは絶対に許さないといった縛りがあるならば,なおのことである.古いコードは新陳代謝なしに残っていて,癌細胞のように拡張されるコードとのキメラを形成する.手を加えた人に対してコードを汚したと非難するのは酷だろう.

では,一切何にも手を触れなければソフトウェアが劣化しないかというと,そうでもない.ソフトウェア自体は変わらなくても,周囲の世界の方が変わっていくから,相対的にソフトウェアは劣化していく.陳腐化ともいう.ソフトウェアに対する要求というのは変わっていくので,手を加えなければ,要求を満たさなくなっていく.Windows 2000 でしか動かないアプリケーションがあったとしても,そんなものにはもはや価値はない.

ソフトウェアが劣化していくのは避けようがない.デカルトのように,すべてを一旦全否定して,全く新しく自分が信じられるものを作り上げると野心的なことが言えれば良いのだろうけれども,そういうわけにはいかないのだ.そのため,いかにしてソフトウェアの劣化を緩やかにして,ソフトウェアを延命させるかということが課題になる.

銀の弾丸はないのだけれども,効果的な方法というは知られている.次回はそれについて考えてみたい.