G.Polyaの有名な書籍でもあるが、最近は問題の解き方がなってない技術者も
増えてきているように思い憂慮している。
我らプログラマは要求分析もするし、仕様が与えられればそれに従ってプログラム
を作る。そういう習性が資質として備わっているのだ。
もちろんプログラムにはバグがつきものでデバッグにて大方のそれを取り除く。
大方だ。大方。。
プログラムを実行させると意図した結果にならないとか、挙動がおかしい..
とう症状はよくある話で、プログラムが完全無欠の前提があるならば
疑いは晴れるのだがそんなこともあるわけもなく、とかくプログラムは疑いをかけれる
恰好の対象となる。
さてここからが動作を実行した人間の裁量が問われる。つまり「いかにして
問題を解くか」だ。様々な必要な要素があるが、まずはプログラムの仕様を把握して
おくことだ。もし、ここのスタート地点で満足できないようならその人は失格だ。
当たりまえだ。例えば橋梁の応力解析に有限要素法のプログラムを作らせておいて、
自分は有限要素法は知らないとか。。
解が予想値から外れるとその計算方法や入力値を確認せず(知らず)に
まず「プログラムが変だ! バグだ!」と叫ぶ輩は問題外として扱うべきだ。
そんなヤツはあまりいないと思うが、いたらある種障害をお持ちと考えて優しく接っして
あげることが大切だ。
専門技術の事前知識を持っていると仮定しよう。この場合、予想外の結果が出たとき
の問題解決アプローチは前者から少し発展する。「環境の違いはないか?」「以前のバージョン
では動いたか?」等様々な推測をし、一つずつ確認していくことだろう。
私もきっとそうする。そしてその一つ一つの確認事項を一つの命題ととらえて、
推論にて原因を導出することだろう。つまり命題論理やちょっと潜って述語論理を
持ってして解決にあたるのだ。
隠喩としてユークリッドが構築した「公理系(*)」を頭の片隅にでも置くと理解しやすく
なると思う。
いわば公理系にて不具合原因を導出するわけだ。しかしながら、現場でプログラムを動かす人間
の脳が公理系に収まっているかどうかは知らない。分かりやすく言うと、
ある命題の真偽を正しく判定できない人もいるということだ。推論の根底から足をすくわれるような
ことだが現場ではよくあることだ。推論が妥当でない公理系ということになる。
こんな人はもちろん技術者とは呼べないだろうし逆に迷惑な存在となるであろう。
もちろん、問題など解ける人間でもありえない。
我らプログラマはプログラムに疑いをかける人に対して、まずその人の思考プロセスが
公理系からみて妥当か否かを判断する必要があるこを忘れてはならない。
# もちろん、自分が自信をもってリリースしたプログラムでなければこうは行かない;-P
(*)公理系: 命題(=公理)から出発して論理的な推論のみを用いて新たな命題(=定理)を導出する系