k-takahashi's blog

個人雑記用

リファクタリング・ウェットウェア 〜コンテキストの重要性について

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法

リファクタリングはソフト開発技法の一つで、プログラムの外部から見た際の挙動を変更することなく、内部を作り直すこと。実際に動かしたプログラムをベースに、「達成すべきことは何かを考え、設計をきちんとやりなおす」「設計に合わせて最適な構造に作り直す」「読みにくいコード、バグを生みやすいコード、などを削除する」「管理、改造、機能アップしやすいコードにする」といったことを行う。


ウェットウェアは、一言で言えば人間のこと。人間の思考法、仕事の仕方などを指す。


つまり、「リファクタリング・ウェットウェア」とは、自分の仕事の仕方や思考法を捉え直し、よりよいものに作り替えようということ。
本書は、そのために様々な方法論を紹介している。そのため「ヒント」とか「自己テスト」(そう、リファクタリングなのだからテストは重要だ)とか、「実行してみよう」とかが色々と書かれている。

なので、関心のある人は本書のサマリーではなく全体を読まないとだめ。あるプログラムがあったとき、それをどのようにリファクタリングするかは、そのプログラムの性質や製造経緯によって異なる。リファクタリングの際の制限も異なる。環境も異なるはずだ。だから、参考になる部分はそれぞれ異なるのだ。
マインドマップや発想法、GTDなどおなじみの話も出てくるけれど、個々の技術が知りたければ本書ではなくそれぞれの本を読む方がいい。本書のポイントはあくまでも考え方。


ということで、以下はあくまでも「私のため」の備忘録メモ。

  • インナーゲーム:発見による学び。成功パターンの模倣。まず気づくこと、直すのはそれから。
  • プレッシャー:プレッシャーは探求心、創造性、工夫を損ねる。プレッシャーは後遺症を残す。(だから、報告は月曜ではなく金曜日が良い) 失敗を許可することの先に成功が待っている。 失敗が許される範囲を「作る」。
  • 集中力の強化:リラックスした集中状態の効果は一日続く。つぶやかない。
  • 先延ばしとマリネの漬け込み:「問題の仕事や勉強が本当にやりたくないものであれば、別のどんなことをやるにしても、それは単なる先延ばしである可能性が高いのです。依然面白いと思っているものの「手詰まり状態」だと感じているなら、相変わらずマリネを寝かせている状態ですから、それはそれで構いません。
  • コンテキスト:コンテキストの再読み込みには20分かかる。マリファナによるIQ低下は約4ポイント、メールチェックによる影響は10ポイント。コンテキストの切り替えは意図的に。大きなコンテキストは維持する。


正直なところ、今携わっている複数の仕事のうちの一つはコンテキストをずたずたにするような「緊急」「至急」な割り込みが多い。よって、上記の自分用メモも含めて、本書の方法論が直接使えるわけではない。今の「私」というプログラムが部分最適化を図ったところで、クリティカルパス上にある私の仕事が滞ればトータルシステムのスループットが下がることになる。
どうするかは、自分で考えないといけない。