仕事の生産性が高い人は何が違うのか。米マイクロソフトのシニアエンジニアの牛尾剛さんは「例えばプログラムに問題があったとき、一流のエンジニアは試行錯誤をしない。作業をすることより、自分の頭で仮説を立てることを優先する。その結果、生産性は天地ほど違ってしまう」という――。

※本稿は、牛尾剛『世界一流エンジニアの思考法』(文藝春秋)の一部を再編集したものです。

レドモンドのマイクロソフト本社
写真=iStock.com/wellesenterprises
※写真はイメージです

「世界一流と仕事できてうれしいだろ?」

あるとき、同僚のポールと仕事をする機会に恵まれた。ポールはチームの初期からアーキテクチャ(情報システムの設計)をつくり上げてきたメンバーで、私が人生で出会った中でもっとも賢い男だ。何をやっても高速で丁寧、どんな問題が発生しても短時間で解決するその技術力はため息が出るほど素晴らしく、新しいアーキテクチャに関する論文をいくつも執筆している。

彼と仕事をし始めたとき、私のスキップマネージャ(2つ上の上司)が「世界一流のエンジニアと仕事できてうれしいだろ?」と誇らしげに声をかけてきた。自分は「もちろん」と即答したが、それほどまでに彼は社内評価も高いエンジニアなのだ。

ポールは私より頭の回転も速いし、記憶力も抜群に良かったが、同時にこう確信した。

「彼は人生で自分が会った中でもっとも賢い人だけど、それでも、自分と比べてとても追いつけないほど脳みその性能が違うわけではない」

衝撃を受けつつも、私でも真似のできた、彼の思考回路をたどっていこう。

ポールがとった「まさかの行動」

ある日、私のプログラムが上手く動かないときがあった。もちろんこれを自力で直しても良いのだが、今までの経験からすると、原因究明に何時間、もしくは何日かかかるだろう。

ポールだったらどういう風に思考するのだろうと思って、「ペアプログラミング」をお願いすることにした。ペアプログラミングというのは、2人1組で1台のPCを共有し、一緒にプログラミングする手法で、互いの技術を学んだり、コードのコンテキスト(背景)を理解・共有するのにもすごく有効だ。私はポールに言った。

「私のプログラムで問題が起きている。私はいつも生産性がよくないので、何か悪い癖があると思うんだ。君だったらどうやるのかを学びたいと思っているから、ペアプログラミングをしてくれないか?」
「君が何を求めているのかはわからないけど、いいよ」

そうしてセッションは始まった。

私は自分のプログラムに問題があることを示す「ログ」を表示していた。ログとは、プログラムが内部でどのように動いているかを示す記録だ。それを見ることでプログラムが正しく動いているのか、問題が発生しているのかをチェックすることができる。

普段の私なら、ログで問題を見つけたら、「ここが原因かもしれない」「いや、あそこの不具合だろうか」と試行錯誤をする場面だ。あたりをつけて修正して、プログラムをサーバーに移動させて、動かして、またログを見る。ログは反映されるまでに15分くらいかかるから、いくつか試すのもかなり時間がかかる。

ところが、ポールがとった行動は、私と真逆のアプローチだった。彼は最初の一つのログだけを見て「仮説」を立て始めた。手は一切動かさない。