fjt7tdmi のノート

メモ帳みたいなもの

他人のコードを読む方法

最近、他人が書いたコードを読む機会が増えてきました。
何万行もある未知のコードをどう読み解いて行くのか、自分の中で方法論が出来てきたように思うので、メモっておきます。

コードを読む目的を明確にする

一番大事なのは、「何を知りたいのか」ということを明確にした上でコードを読むことです。適切な目的を持たずにコードを読んでいると、途中で興味を持つポイントがどんどん変わって行って、何を調べていたんだかわからなくなるということが起こります。そんなことをしていてはいつまでもコードを読む作業が終わりません。短時間でコードを読み終えるためには、コードを読む目的を明確にしたうえで、その目的を達成することに集中する必要があります。

 

私がよく設定する目的は、

  • 自分は○○という機能を実装したいので、それに必要な API について調べる
  • とにかくコードの全体像を知りたいので、モジュールの機能を全てリストアップする

などです。

 

メモをする

コードを読んで行く際は、必ずメモをとるようにしましょう。コードを読むときにやりがちなのが、IDE やエディタで適当に関数の定義を追っていくという、ネットサーフィン的なやり方です。しかし、これでは何のためにコードを調べていたのか/何がわかったのかが、すぐに頭から抜けてしまいます。

 

前節で「コードを読む目的を明確化しろ」と書きましたが、「目的」は必ず目立つ場所に書いておきましょう。そして、コードを読む際は定期的にそれを見るようにしましょう。これにより、本来の目的を忘れて単にコードを眺めている状態に陥るのを防ぐことができます。

 

また、コードを読んでわかったことも、必ずメモを取るようにしましょう。どんなに綺麗に書かれているコードでも、「(コードを読んでいる)今の自分の目的に合わせて整理されている」ということはあり得ません。自分にとって大事なことがわかったら、忘れないうちにメモをとるようにしましょう。

 

メモを取る道具は何でもいいです。私はプログラマの癖にアナログな人間なのでペンとノートを使いますが、エディタでもブログでも良いので、自分の使いやすいものを選びましょう。

 

つまり、頭を使って手を動かせということ

コードを読むのは、コードを書くよりはるかに頭を使う作業です。コードを書いている時は、プログラムを実行すればフィードバックを得られるので、「作業の進捗度」や「現状の問題点」を比較的容易に知ることができます。しかし、コードを読むときはそうはいきません。コードを理解できたか判断できるのは自分しかおらず、「作業の進捗度(どこまでわかったか)」や「現状の問題点(何が分かってないのか)」を知ることは簡単ではありません。

 

難しいことをするときは、それなりの作戦を立てなければなりません。「コードを読む目的を明確化する」のは、その作戦の最初にして最も重要なステップです。

 

頭を使う作業を行うときは、手も一緒に動かした方が効率が上がります。私がコードを読む際に「メモを取る」のは、あまりに難しくてメモを取らんとやってられんからです。