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

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

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

  • 切り分けができない
  • 仮説&検証ができない
  • 推測が正しくない

切り分けができない

問題の切り分け、どこまでが正常でどこからが異常なのか、対象を絞り込むスキルが必要です。絞り込む際、過去の経験からすぐに思い当たることもあれば、調べる範囲を絞りつつ問題の所在を探すこともあります。

また、大局的には切り分けられるけど、局所的に調査できないひともいる気がします。このようなひとは、debugger を使ったり、(原始的ですが) print debug しながらロジックを追うことをしていないように見えます。あと、ログ (スタックトレース) を見てない。

問題はここにあるという思い込みを捨てて、まずは現状をできる限り正確に把握することが大事です。

仮説&検証ができない

仮説を立てて検証することは、デバッグというかトラブルシューティングの基本かと思います。

仮説を立てるにはある程度の経験や動作原理の理解が必要で、最初のうちは愚直に調べるしかないかもしれないけど、「XXのときはYYになる」のように、条件と想定する結果を書き出して1つずつ検証するのがよいかと思います。

あと、個人的に重要だと思うのが、

  • 1つずつ検証すること (1度に複数のことをやらない)
  • 書き出した仮説はできる限りすべて検証すること

特に2点目については、副次的に別の事象が発見される可能性があるので、水平展開としてやっておくとよさそう。

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

推測が正しくない

個人の思い込みによって推測にバイアスがかかることがあるような気がします。仕組みや原理を理解不足もあるかもしれない。下手にあれこれ推測するくらいなら、まずは手元の環境で事象を再現させるところから始めた方がいいと思います。

前述の2点と重複しますが、切り分けと仮説&検証のプロセスを繰り返すことで、推測の確度を高められるのではなかろうかと思われます。

まとめ

ここまで書いておいてアレだけど、人間というものは気持ちに余裕がないと冷静に判断できなくなりがちで、ついつい「思い込み」に走ってしまうもの。