時代、技術により分担は変わる
ハードとソフトの機能分担は、なかなか難しいもので、時代、技術により分担は変わりますが、今現在は相体的にソフトへ振り過ぎていると思います。
ハードとソフトの機能分担の例として、よくパソコンをとりあげるのですが、パソコンはハードの性能向上がすばらしいのに、それに伴ってパソコン用のOS(オペレーティングシステム)が肥大して、結局、使う側からみるとログスケールぐらいでしか使いやすさは良くなっていない。どうもパソコンのハードとソフトの機能分担というのは余りうまくないと思います。
ハードのバグはとれるが、ソフトのバグはとりきれない
機能分担に関連する問題の一つは、ハードのバグはとれるけれども、ソフトのバグはとり切れないことです。この辺に私自身の経験からいっても非常に悔しい部分があるわけです。LSIとソフトという技術はほぼ同じような時期に非常に成長しました。LSI側はCADが非常に発達して自動設計ができて、CAD上でシミュレーションができます。そうすると、そこでほとんど回路設計上のバグというのはとれますし、最近はLSIの中にセルフチェックするようなテスト回路を入れることもできます。 これに対してソフトの方は、はっきり言ってこの20年、特に大規模システムソフトのつくりというものは、言語とかOSとかというものは変わってきていますけれども、基本的には変わっていません。
オブジェクト指向が救世主になったかというと、やはり大規模システムにおいてはなっていません。結局、それはもう人がひたすら設計をやって、こつこつ作って試験をやっています。ソフトの場合でも、設計ツールをそろえて、少しでも安くていいものを早く作ろうという努力をしているのですが、なぜか今度はツールに頼って人間が余り考えなくなってしまう。そうすると、根本的な部分まで戻って設計を直そうと思うと、人間の思考回路の中できちっとそういうものがフォローし切れなくなる。そういうこともあって、やはりソフトのバグというのは常に残ります。それも試験期間といいますか、試験中に全部取りきるわけにもいかないし、本当にバグなしになるまで試験をしていると、いつまでたってもサービスに供することができません。
使い方の決まるものはハードへ
ハードとソフトの機能分担を考えるときに以上のようなことを考えれば、とにかく使い方の決まるものはハードへということになります。私が経験した通信システムの開発の例で言うと、新世代の最初のシステムであったので、使い方がわからないからといっていろいろな機能をソフトに振ってしまいました。システムが現場に導入されて使いこなせるようになった時点で改良するとすれば、かなりの部分はハードに落とせると思います。
