リファクタリング

http://d.hatena.ne.jp/masayang/20090220/1235174930からの連想。
リファクタリングはどこまでを設計プロセスと考えるかによって解釈が大きく変わってしまう。少なくとも次のような手順で進める必要があること自体は議論の余地がない。しかし、それを実際の開発プロセスに落とし込むところで大きく分かれる。

  1. やりたいことを決める。
  2. どのように作るか決める。
  3. 実際に作る。

例えば「実際に作る」とはどのような作業を指しているのか。コーディングか?コンパイル&リンクか?ここで製造業に喩えれば、コーディングとは設計図の作成(設計と設計図の作成は異なる!)だろうし、コンパイル&リンクは実際の工作機械による製造だろう。しかし、それはただの比喩にすぎず、特に根拠として持ち出すべき内容ではない。
少なくとも確かなことはコンパイル&リンクにかかる時間が圧倒的に短いことだけだ。コーディングにも本来は大した時間はかからないはずで、あまりにも時間がかかるなら設計がまずい可能性を疑った方が良い*1
リファクタリングするから設計しないでよい」と考えるのは「設計」のフェイズでコーディングをしているせいだろう。そのコードは日本語で書いてあって機械可読ではないからテストもできず、人間がプログラミング言語に翻訳してやらないとならない。つまり、コンパイル&リンクで五分とかからない仕事を、そのような開発をしている人たちは人力翻訳&コンパイル&リンクで一ヶ月かけて行っているということになるのか?
……それは上手く行くはずもないな。

*1:これは開発規模によらない。開発規模が大きいならそれなりの時間で終わるサブシステムに分割すること。