伽藍とバザール #1
僕自身が開発者として大切にしたい姿勢や思想の多くが、ハッカー文化、オープンソース文化の文脈で既に語られています。例えば、エリック・レイモンドの「伽藍とバザール」では、様々なオープンソースソフトウェアの開発から 19 の味わい深い教訓を導き出しています。
この note の初めに、私の自己紹介を兼ねて「伽藍とバザール」を読んでいきたいと思います。優れた書評はすでに数多く書かれていると思うので、ここでは自己紹介を含むものとして私的な体験や考察を数多く交えていきたいと思います。
はじめに
オープンソース・ソフトウェアを読むというのは、ごくシンプルに、楽しいものです。優れた開発者が、現実の問題をどのように定式化・モデル化し、どのように使われることを想定したか、といった設計的な側面。それをどのように解くか、どのような言語仕様を用いて実装するか、という実装的な側面。どちらも、自分には全く思いもよらないような、新しい着想や手法に触れたとき、見ず知らずの開発者と深く分かりあったような心持ちになります。コメントの書き方ひとつとっても、この人は、このクラスを使う人のことを深く考えて、もしくは信頼をして、書いてくれているなぁ、なんて感じると、開発者の誠実さに触れたような、温かい気持ちにもなります。
公開されたソースコードは、何らかのライセンスの下、世界で共有されたソフトウェア部品です。大げさな言い方をすれば、人類が蓄積している技術知の一端を担うものです。ひとつのソースコードが世界につながっている。あらゆる前提が異なる未来の誰かに、何かひとつでも今の自分が考えたという思考の証が伝わるかもしれない、それって素敵なことじゃない?
ではさっそく、冒頭で紹介した「伽藍とバザール」の 19 の教訓を読んでいきましょう!
「伽藍とバザール」 19 の教訓
http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ より引用
この note での外国語の翻訳や人工言語の解釈は、私の主観的な理解に大きく影響を受ける「インチキ超訳」です。原著者の意図を、自分の能力の及ぶ限り尊重するつもりですが、インチキ超訳では原文に書いてないことを行間の虚空から捻り出すことがありますので、ご注意ください😅
第一の教訓では、「itch」の訳出がちょっとだけそうです。これは単なる「強い希望」とか「切望」とかではなくて、「痒くてムズムズするのをどうにかしたい」ような感じ、「あー、このソフトもっとこうだったらいいのになー、微妙に違うんだよなー、あとちょっとだけココがこう変わるだけでいいのに!」という感覚、わかります。
そしてすぐに警句が来ます。ムズムズする気持ちは大事だけど、その気持ちのままいきなり一行目を書き出すんじゃねーぞ!という。後半は直訳すれば「グレートなプログラマーは、何を書き直せばよいか(再利用すればよいか)を知っている」となりますが、再びのインチキ超訳です。確かに、書かないで済ませるというより、既存の優れたコードに基づくべきだと本文でも述べていますね。
「constructive laziness」というのは対立する概念です。直訳すれば「建設的な怠惰」、誰かの優れた実装を基にして書き直していくというというのは自分でウンウン考えてゼロから書き始めるよりも建設的、laziness という言葉に込められた意味の二重性です。laziness が推奨されるのです。成果を出すために。
この言葉の初出は、ハインラインの SF 小説「Time Enough for Love(愛に時間を)」の中で語られる「The Tale of the Man Who Was Too Lazy to Fail(ものぐさ過ぎて失敗できなかった男の話)」でしょうか。
ものぐさ過ぎて失敗できなかった男、デイヴィッド・ラムの物語が語られます。その内容は、ぜひ原著をご覧いただければと思いますが、デイヴィッドの物語は最後にちょっとした補足がなされます。
愚直なる努力が美徳である、という態度は一歩間違うと、手段と目的を混同し、手段が目的化する恐れがあります。建設的に怠惰でいるとは、言い換えれば、
Be lazy about doing, not lazy about thinking.
(手を動かすことに怠惰たれ、考えることを怠けるな)
ということだと思っています。
どんな問題も、最初に定式化、実装したときには完全にそれを自分のものにできていないことが多い。二度目はもっとうまくやれるのです。うまくやりたいと思ったら、少なくとも一回はゼロからやり直すことを想定した方が良い。
これは本当に痛感することが多いです。自分が取り組んでいた問題の真の範囲は(気づかなかったけど)このくらいの広がりだったのだ、ということや、この状態変数を持つことが本質的に設計を簡略化させるのだ、ということや、実体験としても枚挙にいとまがない。二度、三度と同じような問題に取り組んでいると、その問題について今一番考えているのは自分なのではないか、という幻想を持ちますが、いやいや、それは過去にたくさんの人間が通ってきた道、ということも多いですね。
ペアで語られています。コードを書き捨てるのではなく、書いた人間にはそれを継続させる義務がある、ちゃんとやっていれば、後継者として興味深い問題を解決するチャンスがやってくるのだ、という意図だと理解しています。この文脈とはズレますが、前者の教訓は、私自身は別の意味で捉えているところもあって、それは「ブラックボックスにして進めた箇所には、必ず後から逆襲される。それを理解しなければ前に進めないときが、いつか必ずやってくる。」という意味です。よほどのことが無い限りは、ブラックボックスとして問題を先送りしない方が良いと思っています。それで何度おそるべき手戻りを起こしてしまったことか・・・
さて、この教訓は、オープンソース文化の一番素敵なところかもしれません、みんなで寄ってたかって修正、改善し続けるパワーは想像以上にスゴイぜ!
そしてここでも laziness がキーワードになっています。Linux の開発プロセスの発明こそがもっとも偉大だ、という文脈で
リナス・トーバルズとデイヴィッド・ラムの姿が少し重なって感じられました。
さて、19 の教訓のうち、まだ 3 分の 1 ですね、ハインラインに脱線してしまったからだ 😅
引用部のライセンス表示
引用部に別の記載の無い引用箇所のライセンスは以下の通りです。
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?