kagamihogeの日記

kagamihogeの日記です。

ソフトの複雑さ増大は抑えられないのか

新しいパラダイムはハードウェアから...?
↑でちょっとアレなコメント残してしまったので、ちと考えてることの整理。

ソフトウェア工学の歴史は、より抽象化したソフトウェアのつくり方を求めて発展してきた、と個人的にとらえている。ソフトウェア開発の原初は機械語を使えば何でも出来る時代だったけど、これは扱いにくい代物だった。なので、より高いレベルの抽象化したやり方を求めて、ソフトウェア開発のやり方は進化してきている。

オブジェクト指向フレームワークの思想、XP なんかの開発方法論・・・色々なやり方は出てきたけど、ソフトウェア開発は複雑という認識はあんまり変わってないように思える。ソースコードの規模が増えると指数関数的ってレベルじゃねーぞな勢いで複雑になるソフトウェア開発の現状を考えると、ブレークスルーはいいかげん出てきても良さそうな気がする。まぁ、銀の弾などない、ってことなのかもしれないけど・・・*1

組み込みの分野ではC言語はまだまだ根強いですよね。C言語のメリットはハードウェアに密着した記述ができることですからWebアプリみたいな抽象化を重視する傾向とはちょっと違いますよね。
逆に考えると、だからこそ(web アプリでやってるような抽象化されたやり方が)必要なんじゃないかと思ってます。

組込ソフトウェアの業界こそ、そういう抽象化技術を渇望してるという意見はあってると思う。実際、もう何年も前から言われてることでもある。

ハード寄りの記述がどうしても多くなるので中々難しいと思うけど、それでもアセンブラから C 言語という進化はあった。個人的にこの進化はすごい大きいものだったと思うし、その次がいい加減出てきてもいいんじゃない?っていう意見には頷けるものがある。

組込はハードの進化によってソフト側の要求が増大する、という歴史になっている。ハードの進歩によって、これまで専用の装置を設計・開発していたものをソフトにやらせるようになっている。ハードにとって物理的制約が小さくなり、製品の小型化・設計の自由度向上など、受ける恩恵はかなり大きい。

が、割を食う(?)のがソフト側。コード量がどんどん増えて複雑さがうなぎのぼり。今のプロジェクトのバグ一覧に「火出た」「停止命令受け付けず」なんてのを見てると、エレベーターとかの事故を思い出してしまう。巨大化しすぎて全体を把握できなくなったソフトのバグがもし原因だったら・・・と思うとちょっと怖くなります。

ソフトの進化ってハードのそれに比べるとどうにも遅い気がするんだよね・・・。なんでなんだろう。

*1:優れた技術者を少数精鋭投入すれば上手くいくよ、という意見は当たり前なので今回は省略