Edited at

「ソースコード全部読まなきゃ病」と闘う方法

「OSS読んでパターンの勉強したくて、毎回挑戦してるんだけど、いっつも諦めるんだよね...。」とか「会社で新しいソースコード読む事になったんだけど量が多くて大変だよね...。」みたいな事をよく思っていた自分のような方を対象に、こうすればいいんじゃい?と自分が思ったことをまとめます。


最大の恐怖「全部読まないといけない」

自分のOSSリーディング活動を邪魔している感情や考えが、まずこの「全部読まないといけない病」にあることを自覚しました。「すごい人はOSSを毎日のように読んでる」「フレームワークの中身を全て知っている」こんな決めつけが根っこにありました。

それでGitHubでアルファベット順にならぶコードを上から順番に読もうとして途中で飽きたり挫けたり...。あるあるじゃないでしょうか?

ただよく考えるとそれって意味ある?という疑問が湧きました。

例えば小説や本などは最初のページから最後のページまでの時系列データなので、順番に読む事に意味はあります。ただ、ソースコードに関しては時系列データじゃないよね?と。

なのでいくつか読み方を考えてみました。


対処法1 「Facadeを読む」

これは自分が上記の問題に対して一番初めに試してみたものなのですが、かなりの効果を感じています。 ~Manager や、OSS利用の窓口になっているAPIって必ずありますよね?まずはそこから読み始めます。一番使う回数の多いところ周辺から徐々に理解をしていく方式に切り替えると、繋がりが分かりやすく意味ある読み方ができそうです。


対処法2 「必要なところだけ読む」

対処法1を理解していても「全部理解しなきゃ」と思っていると、どんどん読み込もうとしてしまって時間がかかったり嫌になったりします。なので、今知りたい知識が理解できたらそれより深くは読まないとか、利用していて分からないクラスや疑問が止まらない対象が出てきたら読む。という進め方が出来そうです。


対処法3 「時間を決めて読む」

「いつまでも読める」と考えると、どうしても必要のないコードを読んでしまいます。なので「このコードを読む時間は30分までと決める!この時間内で読むしかない」とすれば、コードを読む優先度を考えて、優先度の高いものから考えて読むでしょう。それを繰り返していくと良いと思います。

実際、自分の抱えているコードすべてをきちんと読もうとすると、読むだけで5年かかることもあります。業務でそればかりするわけにもいかないので、読みきれませんね。関連する部分(+アルファ)だけ集中的に読みます。

presented by @7of9 さん


対処法4 「古いバージョンから読む」

OSSだと古いバージョンほど機能が少なく、コアな機能しか実装されていないので、そのバージョンやコミットを読んでいくことで短い時間で効率良くコア部分に詳しくなる事ができます。

アンチパターンとして新しいバージョンで破壊的変更が行われている場合で、せっかく理解したのに...。という事が起こり得ます。

presented by @pCYSl5EDgo さん


終わりに

「全部読まなきゃ!」→諦めた。成果ゼロ。

よりも

「窓口だけ読んでみよう!」→3ファイル読めた。

の方が健全に進捗が出せていると思うので、「〜できないと〜する価値がない」みたいな考え方はやめて、まず読めるコードから読んでいって、いつのまにか全部読んでた。くらいで良いのではないかと思っています。


PS

とりあえず公開して修正してくパターンを取っているので、今後色々加筆修正していきます。