・論理思考と説明能力
ソフトウェア開発では、バグのないソフトウェアを最初から書く事は非常に困難であり、必ずデバッグをすることになります。
ソフトウェア開発に初めて従事した場合は、とにかくバグを修正して動作するようにすることで手一杯かもしれません。しかし、デバッグは論理思考で行う行為です。
デバッグの方法に関して、書籍「ビューティフルコード」の中で、アンドレアス・ツェラーは、次のように述べています。
1.プログラムの失敗を観察する
2.観察と矛盾しない失敗の原因についての仮説を立てる
3.仮説を使って予想する
4.予想を実験でテストして、さらに観察する
a.実験と観察が予想を満たすなら、仮説をさらに精緻(セイチ)なものにする
b.満たさないなら、別の仮設を立てる
5.仮説がこれ以上精緻(セイチ)にできなくなるまで、手順3と4を繰り返す
まず、バグの現状を把握します。つまり、どのような現象が発生しているのか、その発生頻度はどの程度なのかを把握します。
次に、そのような現象になる原因は何が考えられるのかという仮説を立てます。その仮説を立てるには、ソースコードを調べたり、何度か再現させたりという活動も含まれます。
ソースコード上で、原因と思われる箇所が見つかった場合には、それが原因でバグが発生していることを論理的に必ず説明できなければなりません。
あるいは、原因と推定される箇所が複数発見された場合には、そのどれが本当の原因かをじっくりと考えて、それを確認するためには何をすればよいのかを考えなければなりません。確認する方法は、デバッガーだったり、プリント文を入れたりと、いろいろな方法があるかと思います。
こうやって、原因からバグとして現象を説明できることに確信を持てたら、その原因を修正して確認することになります。
ただ、ここで初心者が注意しなければならないのは、自分では論理的に説明できてバグもなくなったと思っても、修正方法が間違っていたり、たまたま修正されたように見えるだけで、実は原因は他のところにある場合があることです。
これは初心者に限ったことではなく、経験者でも犯す間違いです。初心者の場合には、その少ない知識と経験のために、このような間違いを犯す可能性が高くなります。
したがって、初心者はバグの現象と原因をきちんと説明して、経験のある信頼できる先輩やトレーナーにレビューしてもらう必要があります。
説明することによって、論理的な矛盾点を指摘されることもあるでしょうし、もっと良い修正方法を教えてもらうこともあるでしょう。
説明する際には、相手に理解してもらえるように、論理的に説明する必要があります。そして、相手にうまく伝わっていないとしたら、説明の抽象度を上げるとか、別の観点から説明するとか、いろいろと試みる必要があります。
しかし、この別の次元や観点からの説明ができなくて、同じ説明の一点張りで、聞いているほうが逆に説明を誘導してあげないといけないことが、若い人には多いです。
残念ながら、これは若手に限った話では無く、長年ソフトウェア開発の経験を積んでいる人でも、相手が話を理解しているかに注意を払って、必要なら説明の方法を変えるということができない人もいたりします。
相手の理解レベルを考慮して(説明方法を変えて)説明できるように、自分自身をトレーニングするように心掛けてください。
では、また今度。