Magnolia Tech

いつもコードのことばかり考えている人のために。

「リファクタリング第2版」を読んだ

初版、たぶん読んだはずだけど、全然覚えていないので第2版を購入。JavaScriptには慣れていないけど、特に読む上で支障は無かったです。

かなり分厚い本なので、最初から読むとけっこう挫折してしまうかも…特に大部分はリファクタリング作業のカタログ集なので、頭から読むにはちょっと適していない構成です。

ある程度リファクタリング的な作業を経験した人であれば過去にやったことの有る作業を拾い上げて、自分の暗黙知形式知にしていく読み方がお勧めですね。

まだリファクタリングを経験したことが無い人だったら、迷わず第10章から読むことをお勧めします。複雑で難解なコードは、複雑な条件式(ifとかswitchとか)が入り組んでいることが多いので、それをシンプルに読みやすく書き下す方法が有る、ということを学ぶためにもこの章の「条件記述の分解」「条件記述の統合」「ガード節による入れ子の条件記述の置き換え」はとても学びが多いですね。あと、「アサーションの導入」も最初に学んだ方がいい事項と言えるでしょう。

ポリモーフィズムによる条件記述の置き換え」は、複雑なコードを単機能に分解するには有益ですが、ちょっと改修範囲が大きくなりすぎますしね。

第10章以外は、導入するには影響範囲もそれなりに大きいものが多いので、関数に閉じて適用できる第10章がお勧めです。まずは小さいところから始めましょう。

あとは第3章の「コードの不吉な臭い」、続く第4章の「テストの構築」と続けて読むと理解が深まると思いました。

とにかくダメなコードを指して、なぜダメなのか?ということを理解するのが大事ですね。先人たちが必ずしも正しいわけではなく、たまたまそうなっただけなのに、それを鵜呑みにするのは良くなくて、歴史的な経緯に敬意を払いつつ、ダメなコードはダメ、という姿勢でいきたいですね。

ただ、「コレクションクラスのカプセル化」は、昨今のプログラミング言語におけるコレクションライブラリが非常に高機能になっている中、割とシンプルなコレクションクラスを想定して書かれているような印象でした。すべての操作をカプセル化することはできないですが、主に参照のために用意されているさまざまなメソッドを、単にコピーを返す、という方法だけで良いかは結構議論が分かれる気がします。

ざっと読み進めておいて、必要になった時、自分の経験と一致するようなトピックがあるときなどに読むと良いですね。