@kyanny's blog

My thoughts, my life. Views/opinions are my own.

The Art of Readable Code

The Art of Readable Code を読んだ。

この本は「読みやすいコード」についての本だ。著者は本文中で繰り返し「コードは読んで理解しやすく、誰かが読んだとき短時間で理解できるように書かれるべきだ」と述べている。そういうコードを書くために何に気をつければいいのか、その指針をいくつかの段階に分けて示している。

  1. Surface-Level Improvements ―コードの「見た目」を良くする
  2. Simplifying Loops and Logic ―ループとロジックを単純化する
  3. Reorganizing Your Code ―こんがらがったコードを建てなおす
  4. Selected Topics ―その他の話題

なかでも一番の見どころは Surface-Level Improvements について書かれた章だ。これらの章では変数や関数の名前やコードのコメント、そして aesthetics ―美的な外観― について具体的なコードを例示しつつ解説している。

美的な外観とはなんだろうか。ぼくたちプログラマはコードの良し悪しを語るとき、いくつかの点について判断を下していると思う。

  • 行儀の良いコードであるか ―例えば、グローバル変数を多用していないか、 Perl であれば use strict; を宣言しているか、データベースを利用するコードであればプレースホルダを適切に使用しているか、など
  • うまく構造化されているか ―適切な粒度で関数にまとめられているか、オブジェクト指向言語ならばクラスやメソッドの責務は適切か、など
  • スタイルに一貫性があるか ―インデントや変数名の CamelCase/snake_case が統一されているか、など
  • さらに、上記のいずれでも説明できない何か

ぼくは長年この最後の点がコードから受ける印象に大きな影響を与えていると感じていたが、それをどう表現したらいいのかわからなかった。 aesthetics という言葉を知って、ようやく自分が何を気にしていたのか説明できるようになった。外見の美しい航空機は美しく飛ぶはず*1なのと同じように、見た目が美しいコードは良いコードなのだ。いままでなんとなくそう思ってきたが、この本はそれを確信に変えてくれた。

残りの章はもう少し具体性のあるコードの改善方法を取り上げている。これは広義のリファクタリングにあたり、その分野ではこの本以外にももっと良い本があるだろう。「Code Complete のほうが良い」というレビューもある*2。それは著者も認識しているようで、付録の参考図書リストの先頭はかの Code Complete だし、マーチン・ファウラーのリファクタリングも紹介されている。

サンプルコードが豊富で、改善のテクニックを適用する前後のコードを載せているので、比較してメリットを感じやすい構成になっている。サンプルコードの言語も C++, Java, Python, JavaScript とバリエーションに富み、スクリプト言語しか経験のないぼくでも無理なく読むことができた。

ぼくはこの本からおおいに得るものがあったし、 Code Complete に挑戦するきっかけにもなったが、すでにいくつもの名著を読んだひとには魅力的な一冊とはなり得ないだろうし、コードの質を気にしないタイプのひとには無用の長物だろう。いまのところ邦訳もないので、同僚に読ませるのもきびしい。つまり、現時点では薦めづらい本なのだが、もし誰かこの本を読もうか迷っているひとがいたらこう言いたい:「あなたならこの本を楽しめますよ」