コードを読んでいるときって、どんな思考プロセスで読み進めているんだろう

Pocket

ふと、「コードを読んでいるときって、どんな思考プロセスで読み進めているんだろう」と思ったのです。

僕はプログラマーなので、毎日人のコードを読んでいます。で、時には他の人が書いたコードをレビューしたりもします。「ふむふむ、ここはこうしとかないとまずいんじゃない?」なんて。

しかし、他人のコードなんて、よく読めているなーと疑問に思い、ふと、その思考プロセスってどんなものなのだろうと考えたのでした。

予測、観察、考察

そのプロセスとは「予測」、「観察」、「考察」の3ステップで成り立っているのではないかと、仮説を立てました。

予測

コードを読むとき、コードを読んで、そのまま頭の中のランタイムがコードの振る舞いを再現しているというよりは、

  • 最初から振る舞いを知っていれば、「この振る舞い、俺ならこう書く」と自分がコーディングした場合を想像して、予測する
  • 振る舞いを知らない場合は、ふわっとコードの書きぶりを見て「きっとこんな処理」、と予測する

ような気がしました。

凄いプログラマほどコードリーディングが異様に速いのは、きっとこの予測能力が優れているのでは、と。

観察

「予測」した結果を元に、実際にコードを読み進めます。

予測の精度が高ければ高いほど、「あー、やっぱりこんな感じね」と観察に費やす時間は短くなります。

考察

「予測」、「観察」した結果を元に、つまりこのコードはこういう意図でこういう振る舞いを実現するために書かれているのだ、と「考察」します。

考察の結果がコードリーディングのゴールですね。

コードリーディングをより素早く行うために

普通に考えると「観察」する能力を高めることでコードリーディング力が高まるのかなと思うのですが、観察能力を高めるのにも限界を感じます。むしろ、予測能力を高める方が良いのではないかと。

予測能力はコードを書いた量にも、もちろん比例するのではないかと思うのですが、日頃から「この振る舞い、俺ならこう書く」といった具合に、自分ならどう書くか、といったことを意識していると、かなり予測精度が上がるのではないかと思います。

「コードをただ単純に読んでいるのではなく、ある程度予測して読んでいるのではないか」というのは、気付いてみると当たり前のことだったのですが、ある意味自分にとっては新鮮な気付きだったので、ついブログに書いてしまったのでした。

lsを読まずにプログラマを名乗るな!
藤原 克則
秀和システム
売り上げランキング: 195,500