僕自身の自己紹介を兼ねて「伽藍とバザール」にまとめられたオープンソース文化から得られた経験則を読んでいます。第二回バザール開催。
伽藍とバザール 19 の教訓 7〜11
例えば半年に1回とかのリリースにして、その間、念入りに、ひたすらバグ取りに集中する、というのは確かによくあるリリーススタイルです。オープンソース文化におけるこの経験則はその対極にあります。リーヌスの取り組みは刺激的です。Linux のカーネルの開発というとても難しいタスクを1日に何回もリリースしたのですから。それは、開発者を刺激して知的な報酬を与えていた、つまり自分たちの仕事がほとんど毎日進歩してることを目の当たりにさせるということでした。それによって、一時的に深刻なバグの発生やユーザーを失うリスクを犯してでも、バグ取りにかかるチームの人月を最大化させようとした、そしてあの有名なセリフにつながります。
オープンソース文化は、開発者コミュニティと切っても切れないものです。いかにチームの力を最大化するか。
このことにはたくさんの教訓が眠っています。まず「バグ」に対しての2つの捉え方が語られています。
伽藍派 バグを外に出すことは恥ずかしいことで、そもそも少数の精鋭が数ヶ月かけて念入りにチェックしないとならないものだ。だからリリースの間隔も開いてしまうし、ユーザーにとっては長く待たされたリリースが完璧じゃないと失望も大きくなる。
バザール派 バグなんて深刻な問題じゃない、頻繁なリリースをたくさんの熱心な共同開発者が叩いてくれれば良いのだから。どんどん直してもらうために、どんどんリリースする。時々やばいヤツが出回っちゃうけど、それで失うものは大したことはない。
利用者が増えることでセキュリティリスクが顕在化する事例というのも、最近でもよくニュースになっています。営利企業がプロプライエタリなクローズドソースソフトウェアを開発する上では、このコストを全て自社で飲み込む覚悟が必要になるということでもあります。大規模で統制された開発チームが、ウォーターフォール型で統制された開発を遂行する、まるで規律の取れた軍隊のような・・・海軍にありながらも、ものぐさ過ぎて失敗できなかったデイヴィッド・ラムの物語が、ここにも重なってくるように感じます。
さて、話は大きく変わります。
これはもうその通り。何も専門的な難しいデータ構造を知らないとならないとダメということじゃなくて、自分が取り組む課題をどのようにモデル化するか、というときに、どういうデータ構造を使うのが適切だろう?世の中にすでに似たような課題はないかしら?とちょっと一歩立ち止まるだけで良いと思います。データ構造もそうだし、どのようなメッセージングモデルを採用するか、どのようなデザインパターンを採用するか、知っている範囲でできるだけ一般的なアリものを使っていこう!ということ。
このことはもうひとつ良い効果があります。適切なデータ構造などを採用することで、設計意図が仲間に伝わりやすくなります。仮にその実装がちょっとアレだったとしても、それはきっと仲間が直してくれるでしょう😁
囲碁の世界に、「下手の考え休むに似たり」という格言があります。対局中に長考することも多いですが、下手なうちは、どれだけ長いこと考えても大した手は思いつかないので、上手い人から見たらまるで休んでいるようなものだ、という、厳しい言葉ですが、囲碁打ちの経験上は否定できない言葉でもあると思います。
囲碁の上達においては、「定石」を学ぶことが大切です。実際の対局が、知識としての定石通りの展開になることはあまりありませんが、先人たちが試行錯誤して導いてきたパターンを学ぶことを通して、その途中途中にある様々な変化に対応する力を養うことができます。
良いオープンソースを読むことは、良い定石を学ぶことに近いかも(ここは宣伝かな?😁)。
愛されたいなら、まず相手を愛しなさい、ですね。「most valuable resource 」という表現ですが、この「リソース」に含まれる他のリソースとしては、例えば、「時間」や「自分ひとりの工数、もしくは能力」、「自由に使える計算資源」、ちょっと極端ですが「お金」といったものまで、自分個人に紐づくすべてのリソースを含むのではないかと感じます。それらと比較しても、ベータテスターは開発を行う上で重要なリソースであるのだ、と。では、実際にどのように振る舞えばよいのでしょうか?本文にひとつのヒントが示されています。
最初は、「うわ、痛いところをつかれた」と思ってしまうこともあるかもしれません。でもこれは上に紹介した「バグをどう捉えるか?」という意識の問題です。もしくは、チームをエンカレッジするために敢えて褒めるようなこともあるでしょう。まずは形から入るだけでも良いですね。そのうちいつの間にか、それが自然なことになるように感じます。「いやーーー、モヤモヤしてたところがついに超絶スッキリ解決したよ!ありがとう!!!」みたいな。
まぁ今でも「あああああそれだよー!自分で思いつけなかったのがくやしい!おろかすぎる!」って思っちゃうこともありますけどね 😁
良いアイディアを得るために一番優れたやり方は、自分で考えること?いや、そうじゃないこともあるよ(むしろそうじゃないことの方が多いかも)、という経験は、開発者であれば誰しもあることではないでしょうか。とはいえ、一度は自分でウンウン悩んだことじゃなければ、提案してくれたアイディアが素晴らしいものであることを理解することすらできないかもしれません。チャンスは備えあるところにのみ訪れるのです。
本文ではさらに面白い逸話が紹介されています。
技術の前では皆平等です。優れたアイディアを優れていると正しく認識できるということは幸せなことですね。
引用部のライセンス表示