夜とれるバグ、朝とれるバグ
- Evening and Morning -

夢空間への招待状

結城浩

プログラマには夜型人間が多い。昼すぎにもぞもぞ寝床から起きだし、頭のエンジンがかかるのは午後に入ってから。夕食を食べてから本格的にプログラムを書き始め、眠るのは夜中の一時二時。こういう生活をしているプログラマが少なくとも私のまわりにはたくさんいる。何を隠そう私自身も以前は「プログラムは夜書くものである」という考えを学生時代から持っていたし、実際に夜を徹してプログラムを書いているのは不思議な喜びがあった。現在は、プログラムを朝から書いており、徹夜してまでは書かない。ここで、プログラマの朝と夜についてちょっと考えてみたい。

 * * *

そもそも、なぜプログラマは夜に仕事をしたがるのだろう。「前の日も遅くなって早く起きられないから」というのは鶏と卵みたいな答えだ。それじゃその前の日はなぜ夜に仕事をしていたのか、と問いは繰り返される。「仕事がたくさんあって夜までかかってしまう」というのも少し違うような気がする。私の知人のプログラマを観察した経験では、仕事の量に関わらず、プログラム書きの仕事を夜にまとめてやる人が多いようである。なぜわざわざ夜にやりたがるのだろう。「夜の方がプログラムに集中できる」これは正しそうだ。まわりであまり人が活動していない。電話もかかってこない(プログラマ仲間からの電話は除く)。世の中は静かになっている。太陽も沈んだ。コンピュータに向かいプログラムに集中できる。…というわけだ。小説家にも通じるものがある気がするけれど、ここではわき道に入らないようにする。

 * * *

「夜の方が集中できるので、夜にプログラムを書くのだ」私は一時期、これで納得していた。次のようなことに気がつくまでのことだ。

プログラムを書いていると、当然ながらプログラム上の誤り、いわゆるバグに悩まされることになる。自分としては正しく書いているつもりなのだが、実際にプログラムを動かしてみると自分の意図と全く違った動きをしてしまう。どこがおかしいのだろう。ここか?ここか?…ディスプレイのプログラムとにらめっこしながら時間が過ぎていく。不思議なことが起こったのは、3時間悩んだすえにあきらめて眠りについた次の日の朝である。次の日の朝、何の気なしにプリントアウトを見ていたら、バグの原因がパッとひらめいたのである。そこで一気にバグがとれ、正しくプログラムが動き出したのである。前の夜3時間悩んだバグが次の日の朝3分でとれてしまったのである。バグの原因は前の夜考えたポイントと全く違う部分にあった。

その後、プログラムを書くたびに「バグがいつとれたか」を注意深く観察してみると、「夜とれるバグ」と「朝とれるバグ」の二種類があるように思われた。

夜とれるバグ は、一つの関数・一つのファイルに集中しているものが多いようだ。一言で言えば「狭く深い」バグである。じいっとプログラムの一部をにらんで誤りを見つけるバグは夜とれるようだ。

朝とれるバグ は、複数の関数・複数のファイルに大きくまたがっているものが多いようだ。いわば「広く浅い」バグである。じいっとプログラムの一部をにらんでいてはとれないバグ、少しプログラムから身を引いて全体を見渡してやらないととれないバグである。そういう「広く浅い」バグは朝でないとなかなかとれないようである。

狭く深いバグは夜とれる。広く浅いバグは朝とれる。私にはそのように感じられた。おっと、まるでこれは光のようではないか。夜の光は電灯の光。まわりは暗いが手元は明るい。その一点に気持ちが集中する。朝の光は太陽の光。全地があまねく照らされる。全貌を見渡すことができる。…私にはそのような連想が働いた。

 * * *

夜とれるバグと朝とれるバグの違いに気がついてから、私は夜と朝で仕事の種類を分けるようにした。細かいコーディングは夜に行なう。あちこち資料を参照せずにひたすら書いていけばよい部分は特に夜の仕事とする。

プログラムの全体構成を考えたり、関数間のインタフェースを考えたりするのは朝に行なう。全体の設計図は朝のうちに作っておき、細部を詰めるのは夜にやるわけだ。

 * * *

夜の仕事と朝の仕事という分け方が他の人にも適用できるのかどうかは不明だが、何かの参考になれば幸いである。

(Oh!PC、1992年8月30日)