プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

ソースコードを効率よく読むには(1)

コードを読むことが得意な人は、多くのソースコードから目的のものを見つけ出すのが上手です。全てを理解しようとするのではなく、まずはざっと眺めて概略を把握し、プログラムの要所と思われる場所を読んでいくことで、プログラムを素早く理解することが出来ます。

ソースコードを読む力の重要性


プログラミング所感 - プログラミング

プログラミング言語は、英語や日本語などの言語より覚えることは、はるかに少ない。しかし、文法だけ覚えても、目的を達することはできない。必要なのは、調査やロジックや設計力などの総合的な能力である。問題解決能力向上のため、問題解決の手段としてもっとプログラミングを教えるべきではないだろうか。


世の中にプログラミングの学習をするための書籍は数多くあります。これらを読むことで、プログラムを作れるようになることは出来るでしょう。プログラミングで陥りやすいミスも、これら書籍に多くのことが書いてあります。


さて、仕事でも趣味でも、プログラムを書く前には、まず人が書いたプログラムのソースコード(コード)を読んで理解するという作業が必要になります。プログラミングの入門書や初めて学ぶ言語ではまずサンプルコードを読むことでしょう。業務では0からプログラムを作ることは少なく、誰かの作ったプログラムを読んで理解し、修正や機能追加を行うケースがほとんどです。この「プログラムを読んで理解する」力は、プログラマにとって必須の能力というだけではなく、プログラマの力量を図る指針と言っても過言ではないでしょう。


それほど大事なことでありながら、ソースコードを読む技術について書かれた本というのは、ほとんど見かけたことがありません。私の知る限り、明確にコードの読み方について書かれた本は、Code Readingぐらいでしょうか。


Code Reading―オープンソースから学ぶソフトウェア開発技法


以前も書いたように、このCode Readingには、コードを読むヒントが多く書かれています。しかし、速読の本を読んですぐに速読が出来るようになるわけではないように、この本を読めばすぐにコードが読めるようになるわけではありません。実際には多くのコードを自分で読むことで、その能力は高まります。


「コードが読めるようになるには、多くのコードを読むしかない」それは確かに事実だと私も思います。でも(私を含め)多くの人はどうでしょう。膨大な量のソースコードを目の当たりにすると、どのように読むべきか、よく分からない方も多いのではないでしょうか。


私も決してコードを読むのが得意な方ではありませんが、自分に対する学習方法の整理も兼ねて、コードを読む方法について考えてみたいと思います。

効率よくコードを読むには


ある日突然大量のソースコードを渡され「これ、こんなことが出来るように一週間で直して」と頼まれる。プログラマならば、よくあることです。熟練したプログラマであれば、これを素早く理解して、プログラムを修正することが出来るでしょう。しかし、私のような普通のプログラマであれば、まずどこから手をつけていいか悩むことになります。


長年に渡る経験があるとは言え、熟練者と普通のプログラマとの違いはどこにあるのでしょうか。私はこれは読書の力に似たものがあるように思います。


読書慣れした人は、あまり本を読まない人に比べて数倍の速さで本を読むことができます。それは動態視力が優れているとかそういうことではなく、斜め読みが出来る点にあります。膨大な活字を要所のみ追いかけ、内容を理解することが出来るのですね。


膨大なソースコードを、Main()から丁寧に追いかけていけば、いつかはソースを理解することが出来るでしょう。しかし、この方法は時間がかかる上に、ソースの深みを追っていくうちに、どこを読んでいたのか分からなくなってしまうことが多く、あまり効率のよい方法とは言えません。


コードを読むことが得意な人は、多くのソースコードから目的のものを見つけ出すのが上手です。全てを理解しようとするのではなく、まずはざっと眺めて概略を把握し、プログラムの要所と思われる場所を読んでいくことで、プログラムを素早く理解することが出来ます。

コードを読むための前準備


まずはコードを読み始める前に、ちょっと準備をしましょう。少し時間がかかるかもしれませんが、最終的にはソースコードを読む時間を短縮してくれるはずです。

コードを効率よく読むためのツールを準備する


コードを読む前に、効率的に読むためのツールを用意しましょう。


コードを読む時はいろいろなソースファイルを渡り歩きながら読むのが普通です。「この部分はどこに定義されているのかな」と探すのではなく、簡単な操作で定義部分に移動できるツールがあると、ソースを読むのがとても楽になるので、探してみましょう。


APIのリファレンス等はもちろん、プログラムに関する仕様書やマニュアルなどは出来る限りそろえて、すぐに参照できるようにしておくと便利です。

実際に動かしてみる


コードを読む前に、ある程度プログラムを動かして、どのように動くか感覚をつかんでおきましょう。


実行時プログラムがどのように振る舞うかを理解することは、プログラムを理解する上でとても大切なことです。動作を理解していれば、ソースコードの意味する所を理解するのに役立つでしょう。


UI部分がないなど、プログラムの動きが簡単に確認できない場合は、テストプログラムやスクリーンショットなど、動作理解の助けになるようなものを探してみましょう。

デバッガの準備


デバッガやトレーサなどプログラムの流れを見ることが出来るツールを用意します。


これらは本来デバッグの時に利用するものですが、コードを理解するのにも役立ちます。なかなか動作が理解できない、どのような時に使われるのか分からない。そういった場合はデバッガで対象部分にブレークポイントを設定して実行すれば、実際の動きが観察できます。


デバッガはまたデータ構造を理解するのにも役立ちます。ブレークをかけてデータを見れば、複雑に絡み合ったデータ構造の生の姿を見ることができるでしょう。ちょっと乱暴ですが、デバッガから直接データを変更すれば、動きの変化を見ることも可能です。

ソースを変更して実行できる環境を


可能であればソースを変更して実行できる環境を揃えておきましょう。


理解が難しい部分は、自分でソースコードを変更して実行すると分かることもあります。デバッガで止めると動きが変わるプログラムなどは、必要なログ情報を出力するように修正することも有効です。


プログラムの変更が目的であれば当然このような環境は整っているはずですが、様々な事情からこのような環境がない場合も多いですが、可能な限りこのような環境を用意したいものです。

続く


ちょっと長くなってきたので、続きは次回で。


次回は実際にコードを読む上でのポイントなどを書いてみようと思います。


ソースコードを効率よく読むには(2) - プログラマyasuhoの隠れ家