雀巽の日記帳

雀巽が綴る日常の記録

名著『リファクタリング』を読んだ

正確には「名著『リファクタリング』の Ruby 対応全面改訂版」とある、リファクタリング: Ruby エディションを一通り読みました。

リファクタリング:Rubyエディション

リファクタリング:Rubyエディション

人に対して「これは絶対読むべき!」という押し付ける感じの薦め方をするのは好きではないんですが、それでもこの本は「これは絶対読んでおいたほうが良い」と薦めると思います。

この本は、

変化に強いシステムをいかに設計していくべきか

というのをオブジェクト指向の概念で追求したものでもある思います。 そのためのエッセンスが大量に詰まっている感じがしました。

何が言いたいかというと、オブジェクト指向な設計開発をするんだったらとりあえず読もう、ということです!

印象に残ったフレーズ

印象に残ったフレーズの一部を列挙してみます。

リファクタリング

  • リファクタリングというのは、特別な時間を設けてすることではない。いつもの作業の一部として一気に推し進めるべきものだ。
  • リファクタリングは、何か他のニーズに付随してすすめるべきだ。機能追加、バグフィックスなどが必要になった時にリファクタリングするのである。
  • リファクタリングを始めたからといって完全なものにする必要はない。本来の仕事を達成するために必要な限りでリファクタリングするのである。
  • 自分のプログラムのために毎日少しずつ世界を良くしているのだという信念が必要だ。
  • 止めるというのは、リファクタリングをすすめるデベロッパの指し手の中でも最も強い手である。
  • 今のコードがいかにゴミ溜めのように汚くても、問題は少しずつ取り除いていくよう、自己規制しないければならない。
  • ある領域に新しい昨日を追加することになったら、数分を割いてまずそこをクリーンアップするのである。
  • 自身を持ってクリーンアップするためにはテストが必要なら、テストを追加することだ。
  • リファクタリングの帽子と、新機能の帽子の2つの帽子のことを忘れるな。

コードの臭い

  • 何かコメントを書かなければならない感じがするたびに、コメントではなぬメソッドを書くようにしている。
  • 何をしているかのコメントが付けられたコードは、コメントにちなんだ名前を持つメソッドに置き換えられる。
  • クラス内のサブセットの変数に共通のプレフィックスやサフィックスがつけられている場合には、コンポーネントにまとめられる可能性がある。

オブジェクト指向

テスト

  • 開発者テストとQAテストは全く別の存在である。QAテストはバグを見つけることに喜びを感じる別のチームが開発すべきである。
  • バグレポートを受け取ったら、まず、バグが浮かび上がるような開発者テストを書くこと。

思ったこと

やはり変化の激しい世界での設計開発は、アジャイル開発やリファクタリングなどを駆使して継続的に改善して柔軟に対応していくべきだと思う。

例えば従来のウォーターフォールだと柔軟性が低すぎるというか、答えがない問いに対して答えを作ってから戦うかのようなスタイルそのものがあっていない気がする。そして、それを基本スタイルとしているであろう SIer 界隈に存在する、謎の"システムエンジニア"と"プログラマ"という職能分離がさらに柔軟性を剥ぎ取っているかのように感じる。 クラス構成に手を加えるリファクタリングをしようと思った時に、どうやってこの2つの職が協調して動くのか、全く想像ができない。

この辺の話は色々出尽くしてる上に、前提条件をしっかりさせたうえで話さないと訳がわからなくなっておくのでこの辺でやめておきます。

重要なのは、変化に対応する備えであり、そのために継続的に改善していくことなんだろうなと、感じました。

まさに、

これですね。

まとめ

変化という唯一不変のものを自然と受け入れられるよう精進します!