どういうときにプログラミングは楽しいのだろうか?役に立つものを作ることが楽しい、難しい問題に挑戦するのが楽しい、コードをきれいに組み立てるのが楽しい、ユーザに使ってもらるのが楽しい、などなど、楽しいと感じる要素はいろいろあるだろう。私は、これらに、自分の裁量でできる範囲が広い、というパラメータが加わると思う。
趣味で一人でやるプログラミングは自分の裁量は100%である。好きなようにやればいい。これが仕事、あるいは趣味だとしても複数人での開発となると、自分の裁量は減る。開発者が2人いれば、意見は分かれるものだ。あなたは Python で書きたいが、もう一人は Perlでやろうという。これが大きなプロジェクト、しかも新参者となると自分の裁量は非常に小さい。
大規模なオープンソースのプロジェクトに参加するとしよう。手元でいじる分には好きにやればいいが、本家にパッチを受け入れてもらうとなると、そうはいかない。いきなり見ず知らずの人から巨大なパッチが送りつけられても、受け入れてもらえる可能性は低いだろう。
まずは小さな実績を積み上げるところから始めたり、同意を得るための議論をするといったプロセスが必要だろう。おおよその同意が得られても、他の開発者の意向に応じて、いろいろ妥協せざるを得ないかもしれない。ようやくパッチを受け入れてもらえた!と思ったら、大ボスが出てきて、こんなパッチは気に入らない、と問答無用で取り消されてしまうかもしれない。
こういうのはなかなか気が滅入る話だ。が、もし変更を受け入れてもらえたら、達成感はでかいし、多くのユーザに使ってもらえるという満足感もある。大きなプロジェクトならではの魅力だ。これは、一人でプログラミングをする楽しみとはぜんぜん違う話だ。やりがいはあるが、気苦労も多い。こういった、自分の裁量が狭くて、お伺いを立てながら自分の変更を認めてもらうタイプのプログラミングを「お伺いプログラミング」と呼ぶことにしよう。
では、でかいプロジェクトでは、全員がお伺いプログラミングをやっているかというと、そんなことはない。一番の大ボスであるメインの開発者は裁量がでかくて、大きな変更がどんどんできる。一方、お伺いを立てる側の一人であるあなたは、大ボス氏が昨晩敢行した大規模なリファクタリングにより、自分のパッチを大幅にやり直ししないといけないことに嘆く。大ボス氏からみれば、そんなのは知った事ではない。というか実際、知らない。
これは Joel on Software の「射撃しつつ前進」[1] そのものである。大ボス氏は常に射撃してどんどん前進してく一方、あなたの方は、射撃をあびるからなかなか前に進めないのだ。オーナーシップを持っているというのはすごい特権である。
じゃあどうすれば、大ボス氏みたいになれるのであろうか?これはまあ自分でプロジェクトを立ち上げて大成功させるしかないだろう。じゃあ中ボス、小ボスクラスにはなるにはどうしたらいいのか?これならなんとかなるかもしれない。大きな実績をコンスタントに上げていけば、そこそこいけるだろう。あるいは、プロジェクトの中で自分の領域を新規に開拓して、重要なものに育ててくという手もある。小さな領域でも、オーナーシップを持っていて、自分の裁量が広ければ、結構楽しいんじゃないかと思う。
[1] http://japanese.joelonsoftware.com/Articles/FireAndMotion.html