プログラマが知るべき97のこと 09. 他人よりまず自分を疑う

動機

マイクロサービスアーキテクチャを読んでいて(寄り道するからなかなか進まないですが)、凝集性はマイクロサービスを考える際に重要な概念であり、SRP(単一責任の原則)の定義によって認識が強化されたと記載されていました。
引用がプログラマが知るべき97のことだったので、懐かしいと思いパラパラめくっていたら、全く別のところに目がとまりました。09. 他人よりまず自分を疑うというエッセイです。

他人よりまず自分を疑う

エッセイの内容を要約すると次のような感じです。

  • プログラマは自分が書いたプログラムが思い通りに動作しないことがあると、なかなか自分を疑うことをせず、何か他の原因だと思う
  • しかし実際はだいたい自分が原因である
  • なので、他に原因があることを証明することよりも、自分のコードのバグを見つけることに時間とエネルギーを注いだ方がずっと良い
  • 自分の書いたコードを疑い、デバッグに関して一般に「すべき」と言われていることをやる
  • 自分のコードを徹底的に調べて、それでもバグが見つからない場合に、他の調査を開始する

なぜこのエッセイが気になったか

少し前、同僚から以下のような指摘を受けました。

「あなたの変更が原因で、バグが発生していました。修正しましたので、レビューお願いします。」

そんなはずはないのに…と思ったのですが、まずは修正してもらったコードをレビューしました。修正は私の変更とは関係ないところがされていて、しかもバグは残ったままのようでした。冷静に、「この修正では、バグはなくなっていないのではないですか?この部分を修正すべきだと思います。」とコメントで伝えました。

コメントの内容は伝わったようで、バグの原因であるコードを修正してくれたのは良いのですが、まだ納得がいかないようで、「あなたが修正する前は、正しく動作していました。」と言ってきます。修正した箇所をしっかり理解していれば、そんなことを言うはずがありません。「本当ですか?」と聞いてみたのですが、「本当です!」と強気な態度を崩しません。

結果的に、修正箇所だけではなく、その周りのコードの説明をすることで理解してもらえました。しかし、なぜこのような無礼なことを言ってくるのでしょうか。相手の精神状態などいろいろ原因はあると思いますが、プログラマ、エンジニアとして足りてないことは確かです。そしてチーム内に無駄な軋轢を生んでいます。

まとめ

他人よりまず自分を疑う

常に自分が間違っているかもしれないと思いながら、自分のコード、作業に細心の注意を払うことでバグをなくすことができます。また、バグをなくす過程で発生する不要な人間関係の悪化を防ぐことができます。そしてなにより、自分の失敗からよりたくさん学ぶことができます。そういった姿勢、マインドがプログラマ、エンジニアの成長する条件だと思います。