物事を効率よく進めるには、優先順位を決めて優先度の高いものから片付けていくことが大切とよくいわれる。このことは頭ではわかっているのだが、実際にとってしまう行動パターンは、いやじゃないことから先にやる、つまり、いやなことは後回しにする、というものだ。博士論文を書いていたときはこのパターンがぴたりと当てはまっていた。
1) 論文を入れるレポジトリを作る
2) 最低限の雛形を作る
3) 画像をepsに変換するなどのMakefileを書く
4) 各章に挿入する引用文なんかを検討する
5) 謝辞を書く
6) 参考文献の bibtex をS式(!)から生成するプログラムなんかを書く
7) 見栄えを良くするために TeX のスタイルをいじくり回す
8) ようやく本文を書き始める
9) が、気が散ると 7 に戻る
本文を片付けるのが最優先で、その他のことは瑣末なことだと頭では分かっているのだが、ついついどうでもいいことからやってしまい、そっちに無駄な時間を費やしてしまうのであった。本文を書くのが一番苦痛だからだ。こんなやり方だから、完成には非常に時間がかかった。
ソフトウェア開発の場合もこういうパターンはあるが(タイトル画面だけ立派で、中身は何もないというプログラムを見たことがある)、既存のコードをいじくっている場合、逆のパターン、つまり、やりたくないことから順に片付けていく(いかざるをえない)、という状況に出くわすことがよくある。
1) 何か機能を追加しようと思いコードをいじりはじめる
2) が、既存のコードはやたら入り組んでいてテストも書かれていないことに気づく
3) 仕方が無いので、テストを書いてリファクタリングを開始する
4) やっているうちに、既存のコードの根本的な問題に気づく(ネットワークスレッドでUIをいじくっているとか)
5) 仕方が無いので、その問題も直し始める
6) その過程でリグレッション(バグを再発)してしまい、怒られつつバグを直す
7) 必要なデータを、今いじくっているクラスまで運んでくるのが大変だと気づく
8) 10個くらいのクラスをいじくってデータをえっさえっさと運ぶルートを掘り始める
9) が、その途中で、大御所の開発者が登場して、そのやり方は駄目だと怒られる
10) 仕方が無いので、別のやり方でデータを運ぶ方法を構築する
11) ようやくデータの通路が開通して、当初の目的の機能を実装する(ついに!)
これはいわゆる yak shaving [1] と呼ばれるパターンで、目的を達成する過程で次から次へと新たな問題が発生して、それらをばったばったと片付けていかないと最後まで辿りつけないという現象だ。
yak shaving はなかなかしんどいが、このパターンのいいところは、本来いやなことでも、目的を達成するためにはやらざるを得ないので、やってしまえるということだ。しかも、この過程はなんだかんだと言っても結構楽しい。次から次へと難題が発生するところは、ドラゴンクエストみたいなものだ。ロマンのかけらもないけれども。
[1] http://0xcc.net/blog/archives/000196.html