Island Life

< CLtL2 | Oakland >

2010/01/16

仕事の単位

何かアイディアを思いついて実装しようとして、作業がだいたい2日を越えてしまうと、 スループットが急激に落ちる気がする。そのタスクに関する効率だけでなく、 全体の効率が落ちてしまうのだ。もっと言うと、おそらく数時間で実装できる 単位がスループットとしては最高だ。日をまたいでもごちゃごちゃいじっている ようだと、うまくまとめあげて意味のある仕事ができるか、だらだらと 何日もひきずって効率を落とすか、半々くらいの勝負になってくる。

2日かかってコードをいじっても意味のあるコミットができる段階に達しないような タスクは相当複雑なもので、それを正面から実装するには頭の中のキャッシュを 関係する情報で満たしておかないとならない。

2日で終わらなかったから といって別のタスクに完全に切り替えてしまうと、せっかくのキャッシュが フラッシュされてしまい、次に元のタスクに取りかかる時に大変な苦労を することになる。むしろ手をつけていたコードを捨ててやり直す羽目に なることの方が多いかもしれない。

かといって、キャッシュの一部でも頭に置いておくと、他のタスクをやっていても 未解決の問題が気になってしかたがなく、気がつくと元のタスクをいじったりしている。 でもスワップが発生するので効率はあがらず、そういうコードはやっぱり 腐ってしまって捨てるしかなくなるか、どうにかコミットにこぎつけても 不満が残ることが多い。そしてその間、他のタスクも止まってしまう。

もちろん、2日どころか何ヶ月、下手すると何年も考えないと解決できない問題というのは たくさんある。これが数学者なら頭の中に巨大な抽象の足場を組み立てておけるの かもしれない。私にはどうも無理で、足場の基礎になるコードを外にダンプして、 少しづつ組み立ててゆくことしかできない。したがって、そういう巨大な問題に 取り組む唯一の方法は、それを2日以内で解決できるチャンクに分解できるか ということになる。

最初から全部分解できるならそもそも難問ではない単なる作業なんで、 もともと全体の地図の詳細が見えないところで適切なチャンクを切り出さないと ならない。だいたい今まで作ったものを、ぼんやり想定できる全体の地図の 中に当てはめて、突破口につながりそうな部分を集中して攻めることになる。

時にはまだ道半ばだと思っていたところが、一個のタスクを突破すると とんとん拍子につながってゴール近くまで一気に進めることもあれば、 だいたいマップしたと思っていた領域で一つ突破したら 脇道が大量に現われてしまったり、結局行き止まりであることが わかることもある。

だけどどうなるにせよ、次の見通しができる地点まで2日以内にたどり着ければ、 そこを新たな足場に加えてさらに登って行くことができる。 (行き止まりであることがわかる、というのもひとつの成果だ。 そちらに進んでも何もない、という枝刈りが出来たのだから)。 でも2日終えて中途半端な状態だと、そのまま続けても成果は出しにくい。 何日もかけて、結局同じ場所で同じ地図を手にしている羽目になる。

だとすると、次に考えるべきことは、「いかにしてこのprime windowに 終えられるタスクを増やすか」ということになる。

たとえばライブラリを揃える。たとえば強力な言語を使う。 それによって本質的でない作業に取られる時間を減らす。

また、アイディアを適切な状態まで熟させることも役に立つだろう。 そのアイディアの実装が地図のどこにはまるかが何もわからない状態で 手をつけても、力の入れどころがわからないのでダッシュが出来ない。 思いついてから、しばらく無意識の中に放り込んで、泳がせておく。 すると、作り上げたコードの足場上で遊んでいる時に、ふとはまりどころが 見つかる。その時がアイディアを釣り上げて捌くチャンスだ。

Tags: ものつくり, Programming

Post a comment

Name: