プログラミングはできるのにデバッグが下手なひと

この note の記事、なかなかおもしろいので未読の方はぜひ読んでみてください。

で、狭い観測範囲で恐縮ですが、こういうひとの特徴を考えてみました。

  • 問題の切り分けができない
  • 仮説を立てて検証できない
  • 原因の推測が正しくない

問題の切り分けができない

問題の切り分け、つまり、どこが正しくてどこが異常なのかを把握することができないということです。まずは問題の原因がどこにあるのか見極めることが必要です。「見極める」と書きましたが、経験による直感が働くときもあれば、適切に範囲を絞りつつ調べて原因の所在を特定することもあります。

また、大局的には切り分けられるけど、局所的に精査することができないひともいます。こういうひとは、デバッガを使ったりコンソールにテキストを出力しながらロジックを追うことをしません。あと、ログ(スタックトレース)を読まない。

得てして、このようなひとは「原因はここにある」という思い込みによる誤った判断によって問題の解決に時間がかかる傾向にある気がします。まずは目の前の現実をしっかり認識/把握することが大事。

仮説を立てて検証できない

仮説を立てて検証するということは、デバッグというかトラブルシューティングの基本かと思います。仮説を立てるにはある程度の経験や動作原理の理解が必要で、最初のうちは愚直に調べるしかないかもしれません。ただ、経験を通して引き出しが多くなっていくと、発生している事象からいくつか原因が思い当たるようになる気がします。脊髄反射的に原因を言い当てるひとも過去にいろいろなデバッグの経験を積んでいるんだろうと思われます。

あと、個人的に大事だと思うことは、仮説と想定する結果を書き出すこと、1つずつ試してみること(1度に複数のことをやらない)、(可能であれば)書き出した仮説をすべて試してみること。特に3点目については、副次的に別の事象が発見できるケースがあります。いわゆる、水平展開というものです。

手当たり次第ではなく、順序立てて分析することが大事。

原因の推測が正しくない

仮説&検証と若干内容が重複します。推測すること自体は大事なことですが、思い込みによって推測にバイアスがかかることがあるような気がします。少し落ち着いて考えてみれば見当違いであると思われるようなことを割と真面目に言われて唖然とするものです。

まずは仕組みや原理を理解することが大事。あと、最初からいろいろと推測し始めるひとがいますが、可能な限り手元の環境で再現確認しましょう。事象を再現させるところから始めて、切り分け、仮説&検証のプロセスを繰り返すことで、推測の確度を高められるのではなかろうかと思います。

まとめ

ここまで書いておいてあれですが、人間というものは気持ちに余裕がないと冷静な判断ができなくなりがちなので、これらは一概に言えることではないかもしれません。ただ、書いてて思ったのは「思い込み」というものは恐ろしいということ。