Island Life

< 素人の自由な発想 | Scheme脳とCL脳 >

2011/05/15

芋づる開発

ふとアイディアを思いついて、実装して試してみようとする。 すると、ああこのフレームワークにこの機能があった方が書きやすいや、 とか、ああこのユーティリティ関数はもうちょっといじれば汎用的になって モジュールとして独立させよう、とか、 それを書いてるうちに、そのモジュールが依存している このライブラリの仕様はもっと柔軟にできるな、と気づいたりとか、 そういう派生タスクが芋づる式にどんどん出てくる。

締切りのある仕事だと、それをやってると終わらなくなるので、 ライブラリは所与のものとしていじらず、あくまで自分が今手をつけている コードの塊の中で何とかすることが多い。 でもGaucheで書いてる時は、好きな部分にどんどん手が入れられるし、 そうやって汎用的な部分を改良したものは将来にわたって利益になるから、 ついつい手を出してしまう。

そうやって、派生したタスクから派生したタスクから派生した…タスクのひとつを 仕上げてテストしてドキュメント書いてコミットして、ああなんだか充実感。 と思った時には、そもそも最初にやろうとしてたアイディアはどっか行っちゃってたり。

でも自分の考えることなんてそうそう変わらないので、 何ヶ月後か何年後か、また同じようなことを思いついて、さて実装して試してみようと すると、まさにそのアイディアのために用意されているようなライブラリの機能を 見つけることになる。

最近、そんな派生タスクから実現されたんだけど、きっかけとなったアイディアがどっか行っちゃったもの:

  • map* - 不完全リストにも適用できるmapdefine-method:optionalとかサポートしなきゃって時に、 mapで不完全リストも扱えるとmethod lambda listの処理がもっと綺麗に書けるんじゃないか、 と思って書いたんだけど結局最初の目的には使わなかった。
  • with-lock-file - file.utilモジュールでロックファイルを扱うユーティリティ。前からあるといいなと思ってたんだけど汎用的にしようとしたら意外と面倒でほったらかしてた。今回何か使いたいことがあって、せっかくの機会だからえいやと書いてみたんだけど、さて何に使いたかったんだっけ。
  • atom - gauche.threadsモジュール。Clojureのatomに触発されていつか入れたいとは思ってたんだけど、実際に書くきっかけになったアイディアはどっかのgitのローカルブランチで腐っている。

いくつか挙げてみるとパターンがあるな。どれも昔から「こういうのがあるといいかもなあ」というアイディアのぼんやりした形があって、ある時「これが必要かも」という別のアイディアからの要請でもって臨界を越えると実際に書かれることになるようだ。

でもこれを無制限に続けてると最初思いついたアイディアをいつまでたっても実装できないので、 適当に見切りをつけることも重要だなあ。だいたい3層くらいスタックを積んだところで我に返って本来の目的を思い出すことが多いかな。

gitに切り替えてからは派生タスクの度にブランチを切ってるので、そうやって放棄されたローカルブランチがついついたまってしまう。

Tag: Programming

Post a comment

Name: