∑考=人

そして今日も考える。

ソフトウェアの限界

ハードウェアとソフトウェアの完全な違い。それはハードウェアは美しいがソフトウェアは美しくないということである。ハードウェアの設計は必ず美しい。もちろん、人によってはそのデザインに対してどう感じるかは異なっているのかもしれないが、物理的な制約がある以上、形として整えられている必要があるからである。

 

そして、ハードウェアの場合、例えば新モデルが登場するとしても、既存のデザインを参考にしつつ、製品自体は再度生産し直すことになる。だから多少の部分的な改修しかない場合あっても、再度製品全体としてデザインの見直しがかかる。(と私は勝手に思っている。)

 

ただしソフトウェアの場合は全く異なる。例えば、少しのバージョンアップのためにシステム全体を見直す、ということは原則ありえない。

 

まず一つとしては、費用対効果が悪すぎることである。本質的にはハードウェアは製品それ自体が価値に直結する一方で、ソフトウェアはそれが提供するサービスが価値に直結しているため、既にサービスとして提供できる実績がある部分を作り変える必要性はかなり薄いどころかむしろ潜在バグの作り込みなどのリスクが高まる方が問題視されてしまう。

※ソフトウェアはリリース(実際にサービスが開始されるタイミング)後にバグが必ず見つかると言われている。例えば、Windowsのバグも未だに発見されるし、改修されてアップデートが必要になっている。※

 

ソフトウェアの設計がいかに精密(無駄なコードがない)であったとしても、機能として十分なサービスを提供できないのであれば、それは悪いソフトウェアとなる。逆に、ソフトウェアの設計がいかに歪であっても、機能として十分なサービスを提供できるのであれば良いソフトウェアなのである。実際、ソフトウェアの品質の定義は、お客さんの要件をいかに満たしているか、で決まるのだ。

 

二つ目は、システムは今使っているものを再利用する形になることだ。これはもちろん、ソフトウェアの良い点でもあるけれど、追加改修を延々やっていると拡張性の限界に到達するし、限界に到達してもなお無理矢理機能追加を行なうと、歪な設計になってしまう。一人では把握できない規模にまで膨らんでしまう。

 

イメージとしては一度立てた家に追加でこんな部屋を増やしたいとか、トイレを増やしたいとか、そんな要望を何年にもわたって追加した慣れの果てのようなものである。もう既に家と呼べる形をしているのかも怪しい。(幸か不幸か、ソフトウェアは可視化できないので、こういう状況であることを誰も意識せずに済んでいる。)

 

ただ、最近はこういうのもソフトウェアの限界なのだろうと割り切るようにしている。歴史のあるプログラムほど、上記のような理由から中身は解読不能な作りになっているはずだ。もちろん、当時では保守性や拡張性なども考慮された美しい設計だったのかもしれないが、結局未来は予想できないため、想定外の拡張が必要になることだってある。(特にシステムやソフトウェアには寿命がないためより顕著である。)

 

こうなると、既存のシステムとしての動作を担保したまま、新しい機能を追加するための設計はどうやっても美しくなくなってしまうのだ。もちろん、その中でどれがより良いかを検討することは重要かもしれないけれども、設計としての面白みもやりがいもほとんど感じることはない。

 

大規模システムの改修案件で私たちがやっている設計なんてものは、所詮は”決める”ことに終始する。こういう設計にしたいよね〜なんてことを考えるのではなく、既にこういう設計が実装されていて、今回はこの方式に合わせようか、それともあっちの方式で行こうか、を決めるだけである。”設計”なんて言葉を使うのが烏滸がましい。

 

でも、完全新規の開発以外ってどこもこんな感じで進められているのかもなーと思うと、システムとかソフトウェアの限界を感じる今日この頃である。