仕事のデキる人とデキない人の違い

「このログが出ているということは、自分の推測では、内部でこういうことが起こっている可能性が非常に高い。そこを鑑みると、調べるべきは……」とぶつぶつと独り言をいいながら、データベースを閲覧するソフトを起動し、クエリ(システムへの命令文)を一つだけ書いてこう言った。

「ここだろう」

なんとそのクエリの結果は、私のプログラムの問題の根本原因をズバリ指し示すものだった。彼が手を動かしたのはその一回きりだ。

自分だったらああでもない、こうでもないといろいろクエリしたりコードを見たりして数時間かかる問題を一瞬で魔法のように解いて見せたのだ。

私は雷に打たれたような気分だった。恐ろしいことに、そのコードベースに関して、彼は経験がほとんどない。そのプログラムが書かれたサービスのコードは、むしろ私のほうが知っている。

ソフトウェアの世界では、できるプログラマとできないプログラマの差は25倍あると言われているが、こういうことなのだと実感できる出来事だった。ただ、彼は人間に不可能なことを実行したわけではない。同僚のバーラが言っていたことを思い出した。

手ではなく頭を使うべき

「障害を調査するとき、いきなり手を動かして、試行錯誤していろいろクエリを投げてはダメなんだ。ログを見て、自分で多分こういうことが起こっていると推測して、その推測に合ったクエリを投げてそれを証明するんだよ」

いきなり手を動かさない。まずは、事実(データ)を一つ見つける→いくつかの仮説を立てる→その仮説を証明するための行動をとる。

写真=iStock.com/Jay Yuno
※写真はイメージです

つまり、むやみやたらに試行錯誤するのではなく、まず自分の頭のメンタルモデルを使って仮説を立て証明する。メンタルモデルの構築については後ほど詳述するが、この一連の手順が、手当たり次第に可能性を試すことによる時間のロスを排除し、圧倒的な効率を生んでいるのだ。

プログラミングの生産性というのは「頭脳労働」であるということを実感した瞬間だった。頭の使い方によって、生産性が天地ほど違うというのはこういうことなのだろう。