serialVersionUID
自動生成ルールのネタを、クラス名と、transient以外のフィールドのシグニチャくらいにしておいたら、Clean Codeに書かれているように、自動生成ルールでも、結構いけるかもしれないな。
ボブおじさんのクリーンコード
アジャイル界のボブおじさんこと、Robert C. MartinのClean Codeの翻訳をしました。
結局、突き詰めるとコードをいかにきれいに書くかということに行き着くのだという言は、コード好きには心強いし、それをボブおじさんのような人が言ってくれたということには、大きな意義があることは間違いない。なぜなら、不合理なルールと戦う時には、やはり権威も必要だから。
内容的には、本当に泥くさいコードの書き方の話。それも実際に存在するコードを題材として、リファクタリングしていく。個人的には首をかしげるようなものもあるけど、著者は、それはそれで構わないと言っている。なぜなら、この本で語られている奥義は、クリーンコード道場の1つ流派の教えであって、別の流派もあって当然だから。結構artonさんと書いたコーディングの掟とか、処方箋とかと重なる部分があるかも。
扱っているテーマは、名前付け、関数の書き方、コメント、コードのフォーマッティング(単なる宗教問題と片づけずに踏み込んでいる)、オブジェクトとデータ構造、エラー処理、ソフトウェアの境界、テスト、クラス、システム、創発的設計、同時並行性、そして実際のコードを使ったリファクタリング例が続き、最後に経験則がまとめられている。
個人的に面白いなと思ったのは、関数は5行以内にする(しかもJavaで!)とか、serialVersionUIDは宣言しない方が良いとか。もっとも著者自身がリファクタリングしたコードを見ると、5行を超えるものも存在するから、絶対的なものではないようだ。serialVersionUIDの件は、なるほどとは思うものの、個人的にはシンセティックフィールドの問題で、Javaのバージョンやベンダが変わっただけで、アプリケーションコードを全くいじらなくても、直列化データの互換性が失われることになるので、反対かな。
明らかに違うだろうと思ったのは、5280という数値は定数にしなくても良いという件。これはフィート/マイルなんだけど、名前付けの章では、特定の文化に依存した名前を付けてはいけないと言っているのに、こんなローカルな単位系の換算値を「良く知られている」ものとして良しとしてしまうのは、矛盾してるよね。
あと、全般にIDEを前提としたルールに移ってきているのだなと感じる。いいものを思い付いたら、名前をどんどん変えましょうというのもそうだし、importでは、ワイルドカードを使いましょうというのもそう。ただ、importでワイルドカードを使うべしの論拠となっている点には、あまり説得力は感じられなかった。ワイルドカードを使うにせよ使わないにせよ、欠点部分は、現在のIDEの機能で十分に補えるものだと思うから。
って、なんか反対意見ばかり書いている気もするけど、逆にここに書いたもの以外は、大体その通りだなと思う。多分、書かれていることを、そのまま疑問も持たずに、受け入れる態度よりも、こうして色々と考え、批判を加えつつ、良いと思ったものを自分のものとして取り込んで行くという姿勢で、この本と接することが、きっとこの著者の願いなんじゃないだろうか。
英語が苦手だった自分が、まさか翻訳の仕事をすることになるとは思わなかったけど、機械翻訳は一切使用していないので、そんなに読みにくいところは、無いんじゃないかなと。正直、序文と第1章は、詩的で気取った表現が多く、自分にとっては結構難解で、なかなか進まず、どうなることかと思ったけど、それ以降はソースコードの分量にも助けられて、なんとか最後まで訳すことができた。コードを書くのが好きな人は、きっと楽しめると思うので、是非書店で見てみてください。





