■ソフトウェア技術者の教育 4 (No.374)
ソフトウェア技術者の教育について考える(続き)。
ミスを活かせないソフトウェア技術
ソフトウェア技術には,ハードウェアの実験に当たる仕事が殆ど無い。コンピュータ上でのデジタルの世界では,如何に論理矛盾無くプログラムが組めるか否かである。実験では予め予想していた結果と違ったことが起こることがある。典型的なものは,自分のやろうとしていたことを間違って,その結果思わぬ好結果が得られたときなどである。珍しい発見は,こうしたケースがよくある。自分の侵したミスが,上手く化学反応した,或いは上手い具合の組み合わせとなって,予想に反した結果がでることがある。この好結果を再現性など実験を深めることで大きな成果に結びつくようなことが起こる。
しかし,ソフトウェア技術では,化学反応的なできごとは起こらない。ミスはバグとして修正を余儀なくされ,好結果に結びつくことは先ず無い。それはソフトウェアの構造上,論理的矛盾を抱えたものを活かすことができないからである。特に,プログラミングの技術ではミスをしない(バグを作らない)ように設計することが必要とされている。ミスを活用する手段は無い。
ただ,ミスの無いプログラミングをするために,以前に作ったバグの無い部分をモジュールとして活用することは常套手段として行われている。ミスを活かすと云う意味では,ミスを直したものを次の機会に活用していることにはなる。ミスを上手く利用することとは意味合いが違う。要するにソフトウェア開発においては,如何にミスの無いプログラムを作り上げることが良い製品に結びつくことななり,技術者はそれを目指すことになる。
ソフトウェア技術は開発と云うより設計
ソフトウェア開発と云っても,ハードウェア技術に置き換えると設計であって開発ではないからである。設計は開発と違って,新しいことを試みることはミッションには無く,如何に忠実に効率よく狙った結果を得ることにある。だからハードウェア技術でも設計段階のミスは許されない。ところが開発となると,間違ったことがムダになることが殆どであっても,新たな試みをしたことに相当し,ときには思わぬ好結果を生み出すことがあるからである。
もちろんソフトウェアにも開発はあって,要求される事象をどのような方法で実現するか,アーキテクチャーを創り出す部分は開発で,そのアーキテクチャーを基に,プログラミングで作り込むところは開発ではなく設計段階である。ソフトウェアで如何に忠実に実現させるかである。思いも掛けない結果が出ることは,思考が及ばなかったミスや単純なケアレスミスであって,手直しする以外に使い用はない。
こう云うとソフトウェア技術は設計でハードウェア技術の開発のようなおもしろさは無いように受けとめられるかもしれないが,ハードウェア技術で実現するには相当大規模な装置になることでも,ソフトウェア技術ではプログラミングで容易に実現することが可能であり,人間の頭脳に相当する論理演算に到っては,人間の能力以上の力を発揮することができる。ただ,もちろんプログラムにミスが無い条件下であって,バグ(ソフトウェアのプログラムのミス)があると,とんでもない結果になってしまうことがある。しかも,通常の使い方では正常であっても,意地悪な使い方,技術者が想定していないような使い方をされると結果が狂ってしまう。こうしたものは信頼性に欠け使いものにならない。
ソフトウェア技術はデジタル技術であり,0と1の組み合わせで,どこか一カ所でも間違いがあると結果が大きく違ってくる。その点ハードウェア技術はアナログ技術が多く,どこか一カ所間違っても少し違った傾向になるケースが多い。或いは,大きく影響が出る場合,間違いが容易に判明することが多い。ところが,ソフトウェアのプログラミングのミスは,なかなか見つからない,それでいて,或る場合にどうにもならない状態に陥ってしまうことがあるので厄介である。細心の注意を払って設計するといっても,ミスは必ず起こる。だから,ミスを上手く見つけ出すことの方が重要になってくる。
どんな教育が必要か?
確かに,昔のように実験が必須ではないので,品質管理の基礎に多くの時間を掛ける必要はないだろう。しかし,最低限の品質管理の基礎的なことは必要である。品質には,統計的・確率的な評価や判断が必要とされる。設計者でもバグを少なくする為に,バグ密度を求めたり,目標値の設定や推定など品質知識は不可欠である。しかし,きっちり品質的な基礎教育がなされているかは疑問である。
また,プログラムを作成している中では,混沌として問題点がはっきりしないような出来事や複雑に問題が絡み合ったことが起こるが,こうした問題点の解決がなかなかスムーズにできない技術者が結構多い。プログラムを作成するなどの知識は豊かな技術者でも,絡み合った糸のもつれを解いていく手法が判らない,或いはその解決に多くの時間を割いてしまう技術者は意外と多いのである。
こうした課題解決は,座学で学ぶこともあるが,OJTで学ぶことの方が多く,実践的で役立つことが多い。実際,技術者は見よう見まねで学んでいるのが実態で,きっちり教わったことが無い技術者が殆どである。だから,実践でその場に出くわして経験していない技術者は,リーダになってもスムーズな解決策を導けないのである。
課題解決策に示しているのはその一端である。
ソフトウェアのミスは活用されることは無い
プログラムのミスは不可避である。如何に見つけ出すかである。
[Reported by H.Nishimura 2014.05.26]
Copyright (C)2014 Hitoshi Nishimura