はじめに
他人のコードや自分が昔に書いたコードを効率良く苦労せずに読む方法のメモとリンク集をまとめていきます。追加の情報があれば、その都度更新します。
総論
選ぶコツ
- 自分が知ろうとしていることを明確にする
- 自分が知ろうとしていることが分からない漠然とした状態だと、いくら何かを知ろうとしても何も分かることはない
- 自分が得意とする分野に絞り込む
- 設計ドキュメントが充実しているソフトウェアをピックアップする
読むコツ
- 読む前にコードを動かして動作を知る
- コードに関する専門(業務)知識が不足しているなら補足する
- 静的読解をする
- コールグラフ(関数同士の呼び出しの関連図)を描く
- 動的読解をする
- printデバッグ、コードの改造等
基礎編
ソースコードを読むための技術
loveruby
大規模ソースコードの読み方
satorutakeuchi18
ソースコードの追い方、読み方の方法やコツをまとめておく
boukenki.info
How to read code – a primer
Technikhil Writing
How to quickly and effectively read other people’s code
self-taught coders
How to read code without ripping your hair out
Sun-Li Beatteay
実践編
Rubyソースコード完全解説
loveruby
オープンソースで学習する
自分に合ったソフトウェアを探す
GitHub
言わずと知れたソースコード共有サイト
sourceforge
様々なオープンソースプロジェクトを探せる
Google Code Archive
sourceforgeと基本的に同じ。現在はサービス終了のため新規プロジェクトはなくアーカイブのみ閲覧できる。
MINIX
Unix系のOSに慣れ親しんでいる人向け
良いソースコードに出会うこと
コードリーディングを身につけるための学習に用いるオープンソースソフトウェアは、設計に関するドキュメントが充実しているソフトウェアをピックアップする
推理小説を読むように楽しむ
何はともあれ、ソフトウェアを動かさなければ始まらない。動かし方を知る
次に、どんなデザインパターンなのかを意識しながら、物理構造を俯瞰して、main関数から流し読みする
そして、気になる箇所があれば、printデバッグやテスト文を書いて、コードの依存間系を紐解く
コードを読み終えた後の気持ちは、推理小説を読み終えた後の気持ちのようです
目的の決定
「ソースコードを読むための極意」は『目的をもって読む』ことです。
これはRuby作者のまつもとさんの言だ。なるほど、この言葉には非常にうなず けるものがある。「カーネルくらいは読んどかなきゃいかんかなあ」と思って ソースコードを展開したり解説本を買ったりしてはみたものの、いったいどう していいのかわからないまま放ってしまった、という経験のある人は多いので はないだろうか。その一方で、「このツールのどこかにバグがある、とにかく これを速攻で直して動かさないと納期に間に合わない」……というときには他 人のプログラムだろうとなんだろうと瞬く間に直せてしまうこともあるのでは ないだろうか。
この二つのケースで違うのは、意識の持ちかたである。自分が何を知ろうと しているのかわからなければ「わかる」ことはありえない。だからまず自分が 何を知りたいのか、それを明確に言葉にすることが全ての第一歩である。
http://i.loveruby.net/ja/rhg/book/intro.html
目的の具現化
まず第一に、そのプログラムを書いた人間になった つもりで考えてみることだ。そのときにはプログラムを作るときの知識が流用できる。例えば伝統的な「構造化」プログラムを読むとしたら、こちらも 構造化プログラムの手法に則って考えるようにする。即ち目的を徐々に徐々に分割していく。あるいはGUIプログラムのようにイベントループに入ってグルグル するものならば、とりあえず適当にイベントループを眺めてからイベントハンドラの役割を調べてみる。あるいはMVC(Model View Controler)のMをまず調べてみる。
http://i.loveruby.net/ja/rhg/book/intro.html