1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[awesome][リンク集] コードリーディング

Last updated at Posted at 2020-06-26

はじめに

他人のコードや自分が昔に書いたコードを効率良く苦労せずに読む方法のメモとリンク集をまとめていきます。追加の情報があれば、その都度更新します。

総論

選ぶコツ

  • 自分が知ろうとしていることを明確にする
    • 自分が知ろうとしていることが分からない漠然とした状態だと、いくら何かを知ろうとしても何も分かることはない
  • 自分が得意とする分野に絞り込む
  • 設計ドキュメントが充実しているソフトウェアをピックアップする

読むコツ

  • 読む前にコードを動かして動作を知る
  • コードに関する専門(業務)知識が不足しているなら補足する 
  • 静的読解をする
    • コールグラフ(関数同士の呼び出しの関連図)を描く
  • 動的読解をする
    • 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


1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?