ボブおじさんのProfessionalな哲学につら抜かれた本、CleanCodeを読んだ。
この本は、自分のこれからのコーディングスタイルを変えるかもしれないと思った。 ページをめくる度に、新たな発見と感動を感じた。
カルチャーショックの詳細は、下の方に列挙するが、ダイジェストを書くと、
つまり一言で言うと、
文章のようにコーディングする
ということ。
散文的プログラミング、文芸的ブログラミング、それらは考え方としては 知っていたが、所詮は妄想だと思っていた。
しかし、そのような夢を本気で追求し、かつ実践し、 そのようなことは可能であるということを、具体的な方法で示しているのがこの本。
この本では、Fitnesseのコードがよく例として引用される。
それをみると、なるほど完全な文章ではないにしろ、とても綺麗だ。 読んでいて意味が頭に入る。これがCleanCodeなのかと思った。
この本は、~すべし、~べきというような、断定的な表現が多用される。
冒頭で、この本はアジャイルマスターによる指南書だとかかれている。
この本にかかれている方法が絶対ではない、とは思う。 武道にも流派はたくさんある。 この本は、道を極めたある男が記した、免許皆伝のための武道書と見ることができる。
まず初めに、プログラミングの定義がかかれている。
コードがなくなることはないと語られている。モデル駆動開発がどんどん洗練されて、コードが自動生成されるようになっても、そのモデルを書くことがコーディングだと言っている(と解釈した)コードは要求の表現なので。
CleanCodeの定義について、有名人の意見を募っている。一行に要約してみた。
また、CleanCodeを書くため方法はこう書かれている。
エレガントなセンス、という言葉に引っかかった。
エレガントとは、優雅さ、洗練さとともに、精神性をも意味する。精神性、つまりその人のスタイルで貫かれた洗練さが、CleanCode。 この本にかかれているボブおじさんのスタイルは、まさに個性的なコードだ。
名前づけについては、いろいろな本で語られているので新たに知ったことについてのみ、メモする。
ハンガリアン記法はコンパイラが型チェックを実装していないときにできたもの。現代のコンパイラは型チェックを行うので、不要。
メンタルマッピングとは、読んだ人が、ああこれはこの略だと頭の中で変換する思考プロセス。
この章はなかなかカルチャーショックな部分が多く、興奮した。
ギャグのような経験則!小さくするための大胆な発言がこの先に続く。
どの発言も、自分にとっては衝撃的だ。しかし、筆者は同じ衝撃をケント・ベッグのコードを読んで受けたそうだ。そして、その衝撃を原動力として、自分の手法や考えを洗練させた。自分もそれに倣いたいと思う。
コメントも刺激的な発言が多く、頭をピリピリさせる興奮を得る。
コメントを文章として書くのではなく、Extract Methodすればよいのか!これが、CleanCodeの極意なのか!
前の章で、メソッドの長さの目安はせいぜい20行と書いてあった。あまりメソッドの抽出を実施すると、パフォーマンスに影響がでるのでは?
と思ったが、そのことについては、前に調べたのだった。コンパイラは賢いので、小さいメソッドならばインライン化してくれる。
組込み開発の二大迷信に挑む!リファクタリングにおけるパフォーマンスとスタックオーバーフローについての数値実験
中途半端に小さいことは駄目なのだ。コンパイラの進化を信じる。もっと小さくが正義。
つまり、ソースコード管理システムで管理するものはソースのなかに書かないということ。こういう考え方もかなりカルチャーショック。
まったくその通り!仕事だと、自明な関数にも仕事ではコメントを強要される。こういう不自由な規則があるから、メソッドの抽出や名前変更が進まず、モンスター関数が量産される。 関数ヘッダに時間を割くならば、よい関数名や変数名を考えることに時間を割きたいものだ。
データとオブジェクトの違いを再認識。なにも考えずにgetterとsetterを作るのはpublicにするのと同意。良く考えることにする。
ある一つの大きな作業を行うために、小さなクラスを渡り歩かなければならないかと心配します。 しかし、小さなクラスの集まりとして構成されたシステムは大きな少数のクラスで構成されたシステムよりも、可動部分がすくない。
この考え方は実物を見るのが早い。この本で出てくるFitnesseのgithubを除くと、そこには小さく分割された無数のファイルとディレクトリがズラズラとならんでいてビックリした。
git clone git://github.com/unclebob/fitnesse
小さなクラスが適切に管理されたディレクトリの中に整然と並んでいる。管理の単位がファイルごとではなくて、サブディレクトリごとなのだ。一つ、抽象度が高いのだ。 これも、カルチャーショック。