Code Reading

Code Reading レビュー記事

[ ブックレビューコーナー 目次 ]

株式会社 毎日コミュニケーションズ 様のご厚意により, 書籍 "Code Reading" を ブックレビューコーナー にご献本いただきました. この本のレビューをして頂くべく, Linux Users ML や本サイトにおいて 公募 を行い, これにご希望頂いた方々より感想などをレビュー記事にまとめていただきました.

ここに, レビューアの方々から寄せられたレビュー記事を公開します. (原稿到着順)

毎日コミュニケーションズ 様および レビューアの皆様のご厚意に感謝いたします.

なお, 以下のレビューは初版を対象としています.


Reviewed by 大谷謙勝 (ml.ohtani@ize.co.jp) さん (HomePage)

「プログラマの宝石箱」

Linux の使用歴
6 年
UNIX の使用歴
6 年
Linux Box の主な用途
WWW, DNS, DB, Samba, CVS, Servlet などのサーバ用途
Linux 以外に利用している OS
FreeBSD, Windows XP, Windows 2000
Linux と Linux 以外の OS の使用頻度の比
Linux:それ以外 = 77:23

はじめに

本書はすべてのプログラマにお勧めできる本である.

本書が出版されることを某書店サイトで知ったときには, その内容にワクワクしたことを覚えている. それまで書店に並んでいたプログラミング関連書籍といえば, 開発言語の文法, 開発ツールの使い方, Hello World を表示するプログラムの例等々, 「コードをいかに書くか」という内容ばかりだが, 本書は「コードをいかに読むか」という視点から書かれており, 類書が見当たらない内容だったからである.

私は業務上, オープンソースソフトウェアに多く接しており, 「良質なコードを読むこと」 が自分自身の技術力向上へ大きな効果をもたらすことを認識していたつもりである. しかし周囲を見渡しても 「コードをいかに読むか」という技術の体系的な教育方法などというのは見当たらず, それは個々人が独学で習得していく技術なのだと思い込んでいた節がある. だがその思い込みは本書で覆された.

本書の内容

本書の内容は非常に実践的で具体的である.

本書ではほとんどのページに実在のオープンソースソフトウェアからのコードの抜粋があり (全ての例で抜粋元のファイル名と行番号まで明示されている!), そのコードを付属の CD-ROM で確認することができる. そして, そのコードはどのような意味なのか, なぜそのように書かれているのか, なぜこの書き方が良い (悪い) のかといった内容が明快に語られている.

コードの解説方法は, 抜粋したコード中でブロックごとに網がけして説明されており, 本文の説明とリストの内容を行ったり来たりせずとも 説明の概要をあらかじめ把握できるため分かり易いとの印象を持った.

コードの解説ではさらに, 他人のコードを読むに当たっての「イディオム」も提示されている. 例えば, switch 文のブロック内で /* FALLTHROUGH */ とコメントがあったら, どのようなことに注意するべきかなど, プログラマの素養として重要な部分が抽出されている. それらの解説は「コードをいかに読むか」ということに留まらず, 「どのようなコードを書けば他人に理解されやすいコードとなるか」 ということも教えてくれる.

また感心することに, 本書の内容はコードの解説だけではない. 取り扱う内容はドキュメントやアーキテクチャなど, 広範囲に渡る. そのうえ, 自習用, もしくは教科書としての利用に便利なように練習問題も各所に散りばめられている. さらには「Further Reading さらなる知識のために」として, Knuth 先生の書籍など各分野における良書が大量に紹介されているため, 非常に親切な構成である.

本書の効用

本書で展開されている豊富な例に触れることで, 例えば Apache のソースを読む場合でも, 単に処理の内容を読み取るだけでなく, 「ああ, ここで黒板システムの考え方が使われているのだな」というように, より大きな視点からの内容が自然と読み取れるようになる. 「この実装はこういう意味だな」というだけでなく, 「(数ある実装の中から) どうしてこの実装を選択したのだろう」 という批判的な読み方も意識するようになる. このような体験の積み重ねにより, コードを読むことがどんどん楽しくなり, 自然と技術力が向上していく.

本書を読み進めるなかで, そのような楽しさと充実感を味わうことができた. 本書は特にかけだしプログラマにとって, 知的興奮の宝石が詰まった書籍だろう.

まとめ

本書冒頭で Dave Thomas が記しているように, 他人の作品を読まなかった偉大な作家はいないだろうし, 他人の筆づかいを研究しなかった画家もいないだろう. また, 著者が言及しているように, 実際の業務では一からコードを書くよりも, 既にあるコードを保守していくことが多いというのが実感である. それにも関わらず, 「(他人の) コードをいかに読むか」という内容は, これまで大きく取り上げられることは無かったように思う. (開発プロセスにテクニカルレビューが含まれている場合でも, 「どのようにコードを読めばよいか」という点への具体的な言及は皆無である.)

そのような中で本書が出版された意義は大きく, またその内容もオープンソースソフトウェアを題材に ソースを例示して具体的に説明することで, 期待に沿うものとなっていた.

価格設定は比較的高めのように感じるが, 本書は学部の教科書として, あるいは新入社員の研修テキストとして, あるいは中級プログラマのステップアップのための教材としてなど, 幅広く活用され得る書籍と思われる. これからも本書を繰り返し読み, 様々なコードを読み, 先人の知恵に感心し, 感動していきたいと感じさせる良書であった.


Reviewed by 工藤裕史 (h164_k@yahoo.co.jp) さん

「ソースコードに触れる全ての方のバイブル」

Linux の使用歴
5 年
UNIX の使用歴
5 年
Linux Box の主な用途
クライアント作業全般, 各種サーバー
Linux 以外に利用している OS
Microsoft 社製 Windows シリーズ
Linux と Linux 以外の OS の使用頻度の比
97:3

例え僅かであってもソースコードに触れる機会のある方全てに, 是非『Code Reading』を読んでもらいたいと思います. いえ, 読まなければならない「光明の一冊」であると考えます.

絵を描く者が, もしデッサンや透視画法を知らずに描き続けたならば, 絵は質感や空間を全く感じられない平面上の模様で終わってしまうでしょう. 野球のピッチャーが, リリースポイントの重要性を知らなければ, 効率的な球速や球威を得られず, ベンチ・ウォーマーとして過ごすか, 肩を壊して消え去るだけでしょう. テクニックが大事であるという事が言いたいのではありません. ソースコードを読む事も前記の例と同様に, 必須の知識が存在すると言う事です.

第 1 章の序論の後, 第 2 章から第 5 章に至るまで, 言語の基礎であるループ, 各種ステートメント, ポインタや構造体, 果てはツリー等の基礎的なアルゴリズムまでが登場します. 当初, ソースコードを読み進めるための技術や奥義を想像していた私は 「なぜここで初等知識が必要なのか」と, 呆気に取られてしまいました. 「ソースコードを読む」という事が, 膨大な量の初等知識が結実した結果を読むと言う事であるのは理解しています. しかし初等知識を理解していても, ソースコードを読み解く事が出来る人は少ないのが現実です. 特殊なアルゴリズムや難解な理論が採用されていないソースコードであってもです. なぜでしょうか? それらの答えが第 2 章から第 5 章にあり, これらの章には初等知識と共に 記された要点を如何にして読み解くかが丁寧に説明されています. 今まで読み流していた記号の 1 つ 1 つであっても, ソースコードを読み解く上では非常に重要な鍵であることが解るはずです. 私に足りなかったモノが, 実は高等知識ではなく, ごく身近な初等知識にあった事を知り, 目から鱗が落ちた思いでした.

第 6 章以降は, プロジェクト, 各種ツール, ドキュメント等について書かれており, 当初, 私が想像していた情報は後半部分に存在しています. 例えば, ソースコードを読むためのツールとしてエディタや grep は十分に想像の範疇でしたが, コンパイラを利用しようという考え方は思いつきませんでした. この様に後半部分は, ハッカー達が知る多くの情報が詰まっており, 奥義書の様相を呈しています.

本書の各種ページ脇に "イディオム" のマークが付けられており, それらを拾い集めていくだけでも, 既存の解説書一冊分の価値があります. ソースコードを創る者にとっては, 統一された読みやすいソースコードを創作する上で力となる筈です. また本書の対象であるソースコード読者にとっては速読・速解の手段となるでしょう. 巻末には「...目標を決めて重点的に読むことが大切です...」といった 金言集にページが割いてあり, 各ページに記述された金言がページ番号と共に列挙されています. 一々マーカーを引かなくても, 簡単に要点を掴むことが出来ますので, 非常に重宝する内容です.

本書は既存の解説書や講義とは全く異なった「読む」という視点から書かれたものです. しかしそれは, 異種であると言う事ではありません. 当然知っていなければ弊害を招く類のもの, 基礎や常識といったモノであると考えます. 不幸にも, 今までこれらの情報は限られた者にしか伝わりませんでした. しかし, これからは本書が存在します. ソースコードに僅かでも触れる機会のある方ならば読む必要があるでしょう. また, コンピュータ教育に携わる方, 現在学んでおられる方は, 本書の内容は必須であると思われますので, ぜひ手に取られる事をお奨めいたします.


Reviewed by 斎藤匡 (shiba@mail2.accsnet.ne.jp) さん

「この本を携えて, いざ中級者の向こうへ」

Linux の使用歴
6 年
UNIX の使用歴
同上
Linux Box の主な用途
デスクトップと開発の勉強に
Linux 以外に利用している OS
Windows XP
Linux と Linux 以外の OS の使用頻度の比
9:1

目的

自分はいままで長い間, プログラミングという行為に興味を持ってきました. 例えば C 言語の基本的な文法や, 多少のイディオムは知っています. しかしながら, これまでまとまった量のプログラムを書いたことがありません. 今回のレビューでは今の僕にとって, つまり「基礎的な知識は得て初心者から抜け出したが, 経験豊富な上級者でもない」という中級者にとって, この本がどのように技術力の向上に役立つのかという点を考えながら, レビューをしたいと思います.

実際

まずこの本を手に取ってみると, その厚さから抵抗を感じてしまう方がいらっしゃるかも知れません. しかしこれは, 本文を見やすくするための配慮がなされた結果であると思います. 実際にページをめくれば, 十分な余白によって読みやすさが確保されていることや, 左右の余白に書き込まれた「イディオム」や「注意」のマークで 重要点が分かりやすく示されていることに気づかれると思います. 引用されているコードも, 本文で特に言及されている箇所は強調され, そのブロックごとに添えられている適切なコメントは, 理解をよりスムーズにしてくれます.

この本では実に様々な見方から実際のコードを検証しています. それゆえ, 一度に全ての章を理解しようとすると, なかなか難しいかも知れません. 僕が読後にまず思ったのは, 「もう一度読み通したい」という事でした. しかしそう焦って一気に記憶しようとせず, 半リファレンス的な使いかたでも構わないのかも知れません. 各節の終わりにある練習問題も, なかなか手ごわいものが多い気がしました. 一度読み通した後は, 特に興味を持った部分の問題のみ, とりあえず手をつけてみればいいと思います. 練習問題は, 節の内容の確認と言うよりも, 内容の発展的な方向付けをしている部分が大きいと感じました. 重みはあると思いますが, 各節についてより深い理解をもたらしてくれる, 良い問題集であると感じます.

そして何と言ってもこの本の魅力は, 実際に動いているコードを引用することで生まれた「リアリティ」だと思います. 本文で参照されている全てのコードは, 現存するオープンソースソフトウェアのプロジェクトのものです. それらのコードは付録の CD に全て含まれ, 文章で言及される毎にその参照元が示されます. よって本文では省略されているコードも, 即座に参照することが可能です. こうして実際に開発中のコードを, その解説とともに見られるという経験は, 貴重ではないでしょうか.

さらにはこれをきっかけにして, 本文から得た知識を元に各プロジェクトに積極的に関わっていく方も出てくるかも知れません. こうしてこの本から, オープンソースプロジェクトに興味を示す人・開発に参加する人のすそのが広がったら, 素敵ですね.

値段が気になる方もいらっしゃると思うので, それも言及させていただきます. 5,200 円という値段は厚さではなく, 簡潔な文に含まれている情報の密度に対応しているものであると思います. この本の存在とその趣意を知った当初から購入を考えていましたが, 実際に手に取り, 読み終わると, 期待以上のものであったというのが素直な感想です. 値段に十二分に見合う価値を持った本だと思います.

まとめ

この本の帯には, 「プログラマー必携の書」という言葉があります. これは必ずしもおおげさな言葉ではないかも知れません. 著者の深い経験と幅広い知識が凝縮されている本書は, きっとこれから自分が, 技術者としての経験を積めば積むほど, それに見合った新たな理解をもたらしてくれる本だと思います. 特に付録の金言集は, 新たな分野を学ぶ必要が生じたとき, 大切な指針となるでしょう.

全体を通して, プログラマーが携え, 事あるごとに参照されるべき, 信頼に足る良書だと思いました. 特にスキルアップを目指す僕のような中級者の方, 書店で見かけたらぜひぜひ, 手に取り目を通してみてください.

最後に, このような素晴しい本に出会う機会を与えていただいた毎日コミュニケーションズ, および www.linux.or.jp Webmasters ブックレビュー担当の方々に, 感謝いたします. ありがとうございました.


[ ホーム | マップ | ニュース | 検索 | ドキュメント | リンク | プロジェクト ]
このサイトに関するご意見・ご要望は Webmasters までお願い致します.