自己の無謬性とラバーダックデバッグ
自分でどうしても問題が解決できず、仕方ないので先輩に聞きに行ったら、
「ん?ここのパラメータtypoしてるだけじゃない?」 「あっ…すみません。」
と言うような自分でも分かったはずの凡ミスを指摘されて赤面したことのある人は多いのではないだろうか。
(ちなみに、私はあまり記憶にないが、それは新人時代コミュ力がなさ過ぎて先輩に聞きに行けなかっただけである。自己解決に確か丸一日くらいかかった)
閑話休題。
ある程度経験を積んだエンジニアになるとこのようなケースはほぼなくなるが、
これは技術が上がったからというよりマインドセットの問題である。
自分は考えうる限りの阿呆な凡ミスをすると思っているか
優秀なエンジニアなら常に正確にパラメータを打つとか、バグを全く仕込まないというようなことはない。
勿論、そのようなエンジニアは経験の浅いエンジニアよりもそれらを避け易い書き方を知っているために少なくはなるが、一発書きで完璧な開発の出来るエンジニアはいない。日々凡ミスをしている。
では、何故彼ら、彼女らは人に聞きに行くまで凡ミスに気付かないということがないのか?
それは自分があらゆるミスを犯す可能性がある
と考えているからである。
ゆえに、自己のミスをチェックしやすい仕組みや手作業によるミスが入りにくい構造の構築には全力を尽くすし、
それでも不具合が発生してしまった場合はあらゆる可能性を考慮して虱潰しにチェックする。
技術力があればあるほど自己の無謬性に疑問を持つという逆説的な現象が起こっているわけである。
一方、経験の浅いエンジニアは、技術力に自信はないわりに「自分がそんな凡ミスをするわけがない」と無意識のうちに考えてしまう。
ただ、これは彼あるいは彼女が傲慢かつ自惚れやな性格だからということではない。全く普通のことだ。
日常生活を過ごす上ではそれくらいの感覚な方が正しい。
プログラムを組む時と同じ時くらいすべての動作に疑いを向けて検証を行っていたら日常生活が回らなくなる。
が、そのマインドセットをそのままソフトウェア開発に持ち込んでしまうのは不適切だ。
どこかのタイミングでそれを切り替えることを覚えなければならない。
処方箋としてのラバーダックデバッグ
とはいえ、マインドセットを切り替えろと言われて人間すぐに出来るものではない。
そこでおすすめしたいのがラバーダックデバッグ
という手法である。
これは、ラバーダックを机の上において、自分の書いたコードについて一行ずつ丁寧にアヒルに説明していくというものである。
一件、珍妙な手法ではあるが、実際かなり有効な方法である。
一行ずつ丁寧に説明すれば、「自分が普段どれだけ凡ミスをしているのか」に直面せざるを得ないし、
理解が曖昧なままに書いている部分もあぶりだされることになる。
唯一の欠点が周囲から奇異の目を向けられることだが、そこはチームにおける心理的安全性の問題である。
どうしても厳しそうな場合は似たような手法であるベアプログラミングにおけるサイレントベアプログラミング1を参考にすればよいではないだろうか。
まとめ
- 人間どんな凡ミスでもするものと考えることがまず必須
- 手早く切り替えたかったらアヒルに頼ろう