プログラマyasuhoの隠れ家

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

最初からコードをスラスラ読める人なんていないよ(たぶん)

 このように、ちょっと考えただけでも、ソースコードを読む機会というのは多くあります。こうしてみると、プログラミング言語を勉強したてのころはあまり気が付かないものなのですが、「ソースコードを読む」という能力は意外と重要だと分かるはずです。

【新人なるプログラマーへ】ソースコードを読みましょう(1/2) - @IT


個人的には仕事であれ趣味であれソースコードを読む能力というのはプログラマにとって必須のスキルであると思う。上記記事にもあるように、ソフトウェアの動きを理解するためだけでなく、新しい技術を学ぶため、バグをの原因を調査するため、その他プログラミング作業においてソースコードを読まなくてはならないケースはいっぱいあるから。


とても大事なことだと思うのに、ソースコードの読み方に関する情報や書籍というのは意外に少ない。ぼくの知る限り具体的な解説がされた本はCode Readingぐらい。あとCの読み方みたいな本もあった気がするんだけど、忘れちゃった。ごめん。


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

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


yasuhoなりのコードの読み方に関するヒントは以前書いたので、ご興味のある方は以下を参考いただけると嬉しい。


ソースコードを効率よく読むには(1) - yasuhoの隠れ家
ソースコードを効率よく読むには(2) - yasuhoの隠れ家


で、これだけだとつまらないので、今回はちょっとコードを読む時の気持ちになって書いてみようかな。前に書いたことと重複するかもしれないけど、そのへんはご勘弁。:)

そもそもどんなコードを読めばいいんだろう?


「いいコードを読みましょうと言っても、いったいどんなコードを読めばいいの?」本なら名作やオススメ本の情報があったりするけど、オススメのコードの情報ってほとんど見たことがない。本だって何度も読んだ結果いいか悪いかが分かってくるわけで、いきなりじゃ分かんないよね。


というわけで、とりあえず身近にあるコードから見てみるといいと思う。せっかく読むなら興味ある技術のコードというのもいいな。いいコードはお手本に、悪いコードは反面教師になるから、ムダになるかどうかは機にしなくていいと思うよん(笑)


いいか悪いか見極めるには、読んでいて分かりやすいかどうかを基準にするといい。よいコードは構造がシンプルで「ここはこうなってるだろうな」という予測が立てやすい。すごく難解なら、それはおそらくいいコードじゃない。そういう意味で予備知識をあまり必要としない、あるいはプログラムの機能を理解しているコードは読みやすいよ。

とはいえ、膨大な量にめげそうなんだけど・・・


たいていのコードはすぐに見通せる規模じゃない。ファイルがいくつもあるのは言うに及ばず、複数のディレクトリに分かれている方が普通。そもそも全てのソースが揃っているとは限らないので、ある程度の想像力も必要。APIなどのリファレンスも必須かな。


いきなりmain()から通して読もうとすると、呼び出しの深みにはまって戻れなくなるので、まずはどんな構成になっているかを理解することから始めた方がいい。関数やメソッド名から「これはたぶんこういうことをするんだな」っていう当たりをつけていき、徐々に規模を広げていくと解析しやすいと思うよ。


ソースを読むためのツールや環境も大事。「このクラスやメソッドの実体はどこにあるのかな」「どこで参照されてるのかな」なんて時にいちいち検索してたら、思考が途切れるだけでなく、途中で疲れちゃう。Visual Studioやいろんなツールを活用すると楽だよ。

大体読んだつもりなんだけど、どうも動きが違うっぽいんだよな


もちろんコードを読んでいるだけじゃ分からないこともある。なぜこんな処理が必要なんだろう。そんな時はデバッガを使うに限ります。疑問に思う部分にブレークを張って変数などの値の変化を確かめることで理解も深まると思う。生きたコードを見ないと自分のものに出来ない、と言ってもいいかな。


慣れてきたら実際にコードを変更して機能追加をしてみるなんていうのもいいね。ゆくゆくは自分がリファクタリングとかする時にきっと役立つよ。

あとはとにかく数をこなすだけ


最初からコードをスラスラ読める人なんていないよ。いや、もちろん最初っから出来るスーパーハッカーもいるけど、ほとんどの人は多くのコードを読むことで、読み方のポイントを覚えていくものだと思う。大丈夫。ぼくもそうだから(笑)


最初に読書の例えをしたけど、コードリーディングも同じだと思う。多く読めば読むほどいい悪いも見えてくるし、要点を押さえた斜め読みも出来るようになってくる。全く新しい概念や言語に出会ったとしても、それまでの経験から学んでいけるはず。


もし可能ならコードリーディングを楽しいって思えるようになって欲しいな。コードは作った人の考え方やクセなんかが色濃く反映されてるので、読むだけで楽しいよ。「この人のコードは名作だからぜひ読んでみて」なんて言われるようになることがyasuhoの夢。あくまで「夢」ね。^^;