Clean Code

 「清潔なコード」、「行き届いたコード」とでも訳すとよさそうな、「Clean Code」。
 日本語版も出てますけど、英語版で読んでいます。

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)

Clean Code アジャイルソフトウェア達人の技

Clean Code アジャイルソフトウェア達人の技

 なかなかおもしろいのですが、英語だとなかなかスラスラとは読めないのでじっくり読むことになります。
 コード例がたくさん載っているので、それを自分でさらに clean に改善してみるのもおもしろいと思います。
 この本の主旨に沿ってプログラミングを進めていくと、たしかにすっきりと読みやすいコードが出来てくるはずだとは思います。意図を表す小さな塊にわけて、よく吟味した名前を付けて、冗長だったりすぐに古くなってウソをつくようになるコメントは取り払おう。みたいな感じなので。
 コードそのものをふつうの英語と同じではないまでも、ほとんど同じように読めるようにしようというわけです。とてもいい態度だと思います。
 でも、日本の場合、言葉の壁が邪魔しそうですね。
 まずコメントの問題。プログラミングはまだたいていの場合は英語で変数名や関数名やクラス名といった識別子を命名することが多いので、そういう状況で唯一の日本語での手がかりであるコメントをなくすのは危険です。コメントを掃除してしまったら、英語に不如意な人は生産性が落ちてしまうでしょう。
 つぎに、識別子の問題。プログラミング言語であっても最近はUnicodeで識別子を命名できたりすることも多いので、やろうと思えば日本語で関数名やクラス名を付けることもできますが、日本語の場合、まず表記のゆらぎが大きすぎると思います。漢字をどれだけ開くかや送り仮名の問題もあります。それに加えて、日本語は基本的に普通の文章を分かち書きしないこともハンデになるでしょう。英語はふつうの文章を書く時には基本的に分かち書きをします。プログラムのなかの識別子を命名するときには分かち書きせず、キャメルケース(CamelCase)や下線連結(connected_by_underscores)で命名します。だから識別子を検索するとき、英語なら識別子だけがヒットすることになるのに、日本語だとその他のヒットが大量に混在する結果になってしまいそうです。(英語の場合にも、類似の識別子はやっぱりヒットするので、日本語識別子の場合も、慣れれば気にならなくなるかもしれませんが。)
 さらに、プログラミング言語の文法の問題。プログラミング言語は一部の例外的なもの(「なでしこ」とか「ひまわり」とか)をのぞいて、ほとんどが英語をベースにした制御文を始めとする文法構造を持っています。これに日本語識別子を組み合わせるのは木に竹を接ぐような印象が私にはあります。(まあこれも慣れかもしれませんけど。)
 そういうわけで、ちょっとくやしいけど、Clean Codeは英語に非常に有利な気がします。
 と言っても、日本人のコードでもそのまま同じように役に立つヒントは多いので、どんどん見習いましょう。コード保守の前にリファクタリングしてコードをきれいに保たないプログラマーは、手術前に手を洗わない執刀医と同じだ、というような態度も、大いに見習うべきですね。