まず、はじめに。本書はハッカーは読まなくて良い。普通のプログラマに読んで欲しい。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) Dustin Boswell、Trevor Foucher、角 征典 |
デザインパターンやリファクタリングよりも、本書に書かれていることの方がプログラマは毎日考えて、意識してコードを書くのだ。
よって、普通のプログラマならば本書を読んでおきたい。普通のコードを書く人にオススメの1冊だ。
例えるならば、バク転や月面宙返りをする方法ではなく、日常的におこなわれる「歩く」という行動に着目し、姿勢良く、美しく、シッカリ、確実に歩くための方法が書かれている。
本書の目的は、君のコードをよくすることだ。
「良いコード」の定義とは、コードを読んだときに最短で理解できる様に書かれていることである。そう、本書は伝えている。
では、良いコードを書くための方法を具体的に学んだり、教えられたりしたことはありますか?
私は本書のように様々な点において指摘を受けたり、学んだことはなかった。なので、非常に勉強になった。きっと、手元に置いて、何度も読み返すだろう。そうしようと思っている。
ハッカーからすれば「当たり前のこと」が書かれているだけである。だが、多くのプログラマからすれば、知っているべきである良いコードを書くための知識である。
コードの臭い
書いたコードを、もっと良く書けるのだけど、どうしようかな。と悩んだり。
他人が書いたコードが怪しかったり、プログラマはコードの臭いを感じ取ることができるようになる。
そういったプログラマは、良いコードに書き直すことができるかもしれない。
だが、書き直した部分が以前と比べて、何が臭い理由で、どうすべきなのか。事細かに説明できるだろうか?
もちろん、教えられない人の方が多いだろう。少なくとも新人教育でそこまでやっている会社はほとんどないだろう。私はコードの臭いを感じられるようになったのは他の人のコードを読んだ経験からくるものだった。
本書は、臭いのする怪しいコードの悪い点を述べ、どうするべきかを具体的にコードで教えてくれる。きっと君の教育担当者より丁寧にきちんと教えてくれる。
私の知っている誰よりも丁寧に教えてくれました。ありがとうございます。
例えば
関数名など、名前を付ける際に「明確な単語を選ぶべきである」と説明している箇所がある。英語は表現が豊富なため、適切な単語を使うべきだと。
例えば、クラスの役割を踏まえメソッド名は send か deliver か dispatch が良いのかなど、明確な単語を選ぶべきだと本書では詳しく解説している。
だが、やり過ぎるとこうなるらしい。
PHPには、文字列を explode() する関数がある。カラフルな名前だし、何かを分割する様子がうまく表現できている。だけど、 split() と何が違うんだろう?(2つの関数は別物だけど、名前からその違いはわからない)
華麗にdisってる。オトナのdisり方だ。感銘を受けた。その通りだ!
本書の構成
本書は4部構成になっている。徐々に難易度は上がっていく。
第Ⅰ部 表面上の改善
名前・コメント・見た目のようなコード全体に適応できる簡単なヒント
第Ⅱ部 ループとロジックの単純化
プログラムのループ・ロジック・変数などを改善して理解しやすくする方法
第Ⅲ部 コードの再構成
巨大なコードブロックを再構成して問題を関数のレベルに分解する方法
第Ⅳ部 選抜テーマ
「理解しやすさ」をテストや大きなデータ構造に適応する方法
名前の付け方に始まり、単純に短ければ、理解しやすいコードとは言いきれない証明をする。
実際にあるようなクラスのコメントの付け方をなおしたり、設計を変えて書き直すというようなことを後半ではおこなっている。そして、アプローチ別の比較もしている。
本書の素晴らしい点は、一つ一つが「あぁ、なるほどな」と実感できることである。
それは徹底的に具体化して「良いコード」を書くための方法や考え方を明らかにされてからである。
最短で理解できるためのコードについて、書かれているのだから、理解しやすい。これは、読みやすいということだ。
ハッキリ言える。もっとはやく本書に出会っていれば、あんなクソコードを書かずにすんだ!
この知識を体系的に学んでいれば、もっと多くの人に、良いコードを具体的に示して教えられたはずだ。
そんな記憶を噛みしめる思いで本書を読んだ。私のお気に入りの1冊になることは間違いない。
「こんなの当たり前でしょ?」って言えるようなプログラマを目指して…。
読みやすいコードを書こう。忘れてもいいコードを書こう。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) Dustin Boswell、Trevor Foucher、角 征典 |
高品質のコードを書くための書籍
付録のあわせて読みたいで紹介されている書籍
Code Complete第2版〈上〉―完全なプログラミングを目指して スティーブ マコネル、Steve McConnell、クイープ |
Code Complete第2版〈下〉―完全なプログラミングを目指して スティーブ マコネル、Steve McConnell、クイープ |
リファクタリング―プログラムの体質改善テクニック (Object Technology Series) マーチン ファウラー、Martin Fowler、児玉 公信、平澤 章、友野 晶夫、梅沢 真史 |
リファクタリングは通勤する小田急線で泣きながら読んだ記憶がある。
アンドリュー ハント、デビッド トーマス、Andrew Hunt、David Thomas、村上 雅章 |
私の中では殿堂入りしている書籍
Robert C. Martin、花井 志生 |
番外編
ケント・ベックのSmalltalkベストプラクティス・パターン―シンプル・デザインへの宝石集 ケント ベック、Kent Beck、梅沢 真史、皆川 誠、小黒 直樹、森島 みどり |
デザインパターンなどより、日常的に使える習慣が書かれているから、すごく役に立つと聞いて買ったはいいけど、Smalltalkに挫けた…。本書にも歴史的記録として紹介されている。