先日CleanCoderを読んだ流れでCleanCodeも読みました。

CleanCoderから読んだのは「薄いほうからいこう」という甘えです。

で、CleanCoderのほうは「プロのプログラマとは」という、主にありようを書いていた本でしたが、CleanCodeはプロのプログラマとして「クリーンなコードを書くべし」という話&実例が載っている本でした。

ここで言っている「クリーンなコード」にも実は定義が色々あり、本書で「これがクリーンである」と言っている内容は絶対の正義ではなく、あくまでもひとつの(アンクルボブの)流派としてのクリーンコードだ、とのこと。

基本的な考え方は以下に集約されているように思います。

混乱を埋め込めば、たちまち生産性は低下し、結局納期など守れないのです。納期を守るためには(つまり、速く動けるようになるには)、コードを常に、きれいな状態に保つしかないのです。

いくつか個人的にささったポイントに触れておきます。

ボーイスカウトの原則

本書中にたびたび登場する原則で、「キャンプ場を、自分が見つけたときよりもきれいにすること」です。

プログラマに置き換えると、自分がコードを読んだときに、最初よりもきれいにしようね、という話です。

学習テスト

自分が初めて知った概念でした。

サードパーティ製のライブラリを初めて使うときには当然そのライブラリについて学ぶ必要があるわけですが、その際ドキュメントを数日かけて読み込むのではなく、学習テストをするとよい、と書かれていました。

学習テストとは、サードパーティのコードに対してテストコードを書くこと。テストコードを書くことによって、ライブラリの関数についての理解が深まり、ただドキュメントを読むよりも実際に使えるようになります。

また、ただ学習になるだけではなく実務上のメリットもあり、例えばサードパーティのコードのバージョンが上がったときに、これまで使っていた関数などの動作が変わっていない(=自分たちのプロダクトの動作に影響がない)ことを確かめるためのテストとして、振る舞いの変更検知のために使えると書かれていました。ここが個人的なるほどポイント。

実コードのクリーンコード化

本書の前半では関数やクラス、コメントに対して「これは避けたほうがいい」「こうしたほうがいい」という具体的な話が書かれていますが、後半では実際に公開されているライブラリに対してテストコードを書いたり、コードをリファクタしたりする例が載っていました。

正直全部はわからなかったのですが(しばらくしてからまた読んでみます)、実例があることによって前半部分の説明の理解がより深まるのを感じました。「ここがこう良くない(とアンクルボブが感じた)から、このように変えます」という書き方がされていてコードも載っているので、なるほどBeforeより確かにAfterのほうがいいな、等実感を伴って読めました。

まとめ

類書としては『リーダブルコード』がありますが、リーダブルコードのほうがよりエントリー向けで読みやすかった印象です。自分のような本業がテスト・QAのエンジニアにとってはCleanCodeは少しヘビィに感じられました。(読んで理解できたほうがいいには違いないです)

もしリーダブルコード読んでないという方はリーダブルコードから着手したほうが入りやすいかと。

あとは本書がJava中心なのでJavaの理解がゼロだとサンプルを追うのが大変そうです。