Magnolia Tech

いつもコードのことばかり考えている人のために。

プログラマの三大美徳について…その原典ではどう語られているのか

何度も読み返す技術書の話題で忘れてはいけないのがPerlの作者であるLarry Wallが書いた「Programming Perl」。

この本、Perlというプログラミング言語に関する解説書である共に、定期的にブログなどで話題になる「プログラマの三大美徳(無精、短気、傲慢)」に ついて解説されている原典でもある。

この三大美徳…意外と原典ではストレートには語られていない点も興味深い。三大美徳の中身は散々語られているので、ここでは原典でどのような流れで語られているのか調べた。

Perl自体の人気もだいぶ下がっているし、日本語に訳されているのはPerl 5.6対応(20年前!)の第3版しかなく、2012年に出版された第4版は日本語には翻訳されていない、という状況なので、これから読む、という人も少ないと思われる(ちなみに第4版は1091ページも有る…)けど、機会が有れば読んでみてほしい。

いま、自分の手元に有るのは第4版だけだけど、記憶では第3版もあまり変わらなかったはず。

原典「Programming Perl」で語られる三大美徳

「Programming Perl」の中で最初に”プログラマの三大美徳”について語られるのは、"はじめに"の最後の方。

And although we don’t intend to teach you how to program, the perceptive reader will pick up some of the art, and a little of the science, of programming. We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris.

「だけど私たちはあなたにプログラミングのやり方を教えるつもりはないけど、洞察力のある読者であれば、プログラミングの技術と科学を少しだけ学ぶことができるでしょう」と言ってからの、「私たちはプログラマの偉大な三つの美徳である”無精、短気、傲慢”を身につけることを推奨する」と流れていく。

とてもプログラミング言語の解説書とは思えない流れ(それ以外にも色々と深い記載が多く、ぜひこの”はじめに”は読んでみて欲しい)。

しかも、実は”まえがき”はほぼこれで終わっていて、この後三大美徳の内容についてはしばらく出てこない。次に出てくるのは387ページから始まる「CHAPTER 10 Packages」。

この章は冒頭からこのように始まる。

“In this chapter, we get to start having fun, because we get to start talking about software design. If we’re going to talk about good software design, we have to talk about Laziness, Impatience, and Hubris, the basis of good software design.”

「この章ではソフトウェアデザインについて話をするので、楽しみながら始めることができます」と言い、その後に「良いソフトウェアデザインについて話すためには、無精、短気、傲慢について話さないといけない」と続けている。

そうなんだ!

良い設計をするためにはこの三つについて話さないといけない、と言って、”はじめに”で唐突に出てきたキーワードの伏線を回収している……Larry Wallの講演会を聞いているのか?伏線回収がしっかり展開する小説か?という流れ。

その後、packageの話ではなく、三大美徳の解説に入っていくのだけど、実はここでもまだストレートな解説には入らない。

  • 抽象化をすべきところを回避してカット&ペーストで済ましてはいけない……”それは偽りの無精”である
  • 逆にカット&ペーストで済ますべきところを過剰な抽象化の層を作ってはいけない……”それは偽りの傲慢"である…ただし、一般的には抽象化を減らすより、抽象化増やす方向に考えていくべき…
  • 既存のコードを再利用すべきなのに、自分自身で書くことに飛びついてしまう人がいる……”それは偽りの短気”である

と、逆説的な戒めが続いた後、実際のpackage機能の解説に入っていく。そして…またこの章でも、それぞれの美徳について詳しく書かれることはなく、解説は続く。

”偽りの…”という部分はいずれも、すぐ下の脚注に書かれている……そしてその中で、車輪の再発明についても触れている。

this is False Impatience. But if you’re determined to reinvent the wheel, at least try to invent a better one.

「それは偽りの短気である…しかし、あなたが車輪の再発明をすると決めたらなら、せめてより良いものの発明に努めてください」と結んでいるところが、以前言われていたような単純な車輪の再発明は良くない、という言い回しとも違っていて、興味深い。

そして最終的に、三大美徳の詳細な解説は「CHAPTER 24 Perl Culture」(751ページ目!)の後半、Perlのコード自体で詩を書く試みの「Perl Poetry」の次、Perlのイベントを解説する「Events」に挟まれる形で唐突に出てきて、終わる。

その記載されている内容自体は、これまで色々なブログでも解説されてきたので、ここでは割愛するが、できればぜひ原典で読んでみて欲しい。

おわりに

プログラマの三大美徳が、原典である「Programming Perl」の中でどのような流れで出てくるか、調べた。これまで色々なブログで語られてきたプログラマの三大美徳の考え方は間違ってはいないのだけど、この「Programming Perl」というLarry Wallの思想が詰まった書籍の、さまざまなトピックと絡めて読まないと、言葉が強すぎるが故に誤読してしまう可能性が有るが有るのでぜひ機会が有れば原典を読んでみて欲しい。色々なところに、Larry Wallという偉大なプログラマの思想が伝わってくるに違いない。

2020/11/29 修正 コメントでy2_naranjaさんに、「the art of...」の訳はもっと適切なものがあるよと、教えていただきましたので、修正しました。ありがとうございます。

2020/11/30 追記 その後、ブクマのコメントで教えてもらったことや、英語版のWikipediaなどで調べたところに依ると、三大美徳の定義が用語集に追加されたのは第2版からで、今のように独立した項として書かれたのは第4版からだということが分かった。前書きは変わってないみたいなので、当時の記述レベルで読んでたらとても趣旨をきちんと理解できなかった自信が有るな…。

2020/12/1 追記 タイトル誤字ってることをブクマでご指摘いただきました 恥ずかしい… 直しました