Heppoko Binbo Yarou no Newbie Nikki

旧題: へっぽこびんぼう野郎のnewbie日記 #vZkt8fc6J

「プログラマの三大美徳」とかいうのは基本的に時代遅れで、間違っていて、おかしい

プログラマの三大美徳というのは次の3つだと、Perlを作った人が言ったけど、これを言葉そのままに捉えると全然違うことになる。

・怠惰(Laziness)
・短気(Impatience)
・傲慢(Hubris)

ぼくはこれは間違っていて、次の3つの方がより正しいと思う。

・勤勉
・根気
・責任感

☓怠惰 ○勤勉

ここで言う怠惰というのは「効率をよくするために努力することをいとわない」ということらしいけど、そういうのは「怠惰」という言葉から読み取れない。実際プログラミングでも Lazy は遅延評価の場合に使われる英単語なので、 Laziness がいい場面もあれば良くない場面もある。だいたい「効率をよくするために努力すること」は「怠惰」ではないし、「効率が悪いまま思考せずに続けること」が「努力」でもない。むしろ後者のほうがよほど怠惰であると思う。

こういった考え方はたぶん昔にはそんなにありふれていなかったからだろうけど、今この時代に「怠惰」が大切だと言われてもピンとこない。

昔は「横着すること」と「工夫すること」と「発明すること」と「効率化すること」についてそれほど分別がついていなかったのだと思う。「やりたくないからそういうことするんでしょ」という発想が多くを占めていたと思う。それがいつ頃からか「効率的にできるのにそれを避けて愚鈍な"努力"を続けるのはダメ」というような思想が世の中にだいぶ根付いてきた。それを逆に利用されて「努力なんてバカバカしい」というような風潮もあるけど、怠惰という言葉は、どちらかというとこの風潮に似合う。

昔の話はともかく、勤勉さが重要なのはプログラマでも変わらず、たとえばバグ1つ取るにしても正確に調べてから直すのと「なんとなくここを直せば直るかも」という予測のままに直すのでは全然違う。ここでは前者が「勤勉」で、後者の方が「怠惰」だと思う。

また、良いプログラマになるには仕事以外でも何かしらにコミットすることは不可欠だと思う。それはたとえ楽しみながらやっていても絶対に「怠惰」ではない。

この「怠惰」というのは「ただ勤勉でありさえすればよい」に対して警鐘を鳴らしたものであると思う。なので怠惰という言葉に惑わされるべきではないはずだ。

もちろん「ただ長い間働くこと」は「勤勉」ではないと思う。

☓短気 ○根気

プログラマは短気ではいけない。基本的に根気が要求される。

根気というと「つらいことをじっと耐え忍ぶ」という意味に聞こえてしまうけど、耐えるのではなく、前進しながらあるいは戦いながらやり続けることであって、「つらいことを耐えてさえいればよい・無抵抗であればよい」という意味ではない。

この言葉があげられたときは「処理速度やリソースが余っているのにそのまま放置することへの怒り」というふうに説明されていたらしいけど、それはどちらかというとMOTTAINAIの精神であり、勤勉の範疇に入るように思う。

ただ「短気」と言っただけでは「怒りっぽい人がプログラマに向いている」のように誤解されかねない。別に短気だからプログラマの美徳を備えているとは思わない。どちらかというと根気の方がよほど大切である。

実際「根本的に複雑な問題」を解く場合、根気(それとリソース)が無ければ解くことはできない。短気と根気は両立することもあるけど、間違いなく根気の方が的確な判断をするのに貢献すると思う。

☓傲慢 ○責任感

傲慢とは、ここでは品質にかける自尊心を言うようだが、それは傲慢ではなくて「プライドをかけて責任を持つ」ということに近い。傲慢という言葉によって「実力もないのに驕り高ぶること」が良いように見えてしまう。

実力に見合った自信は別に傲慢ではない。むしろ傲慢による弊害の方が大きい。プライドばかり持っていても困る。いわゆるそれは責任感というやつで、絶対にバグを出さないという精神だと思う。

おわりに

三大美徳の、コアな精神については特に否定しようと思わないけど、それぞれの命名に以前から不満を持っていた。

どうもその中身よりも、目を引く3つのフレーズが独り歩きしていて、

あたかも本当に「怠惰で短気で傲慢であること」が正当化されているように聞こえるからだ。「プログラマだから怠惰なのは仕方ない」とか「プログラマだから短気なのは仕方ない」とか、そういうふうに持っていかれかねない。それは全然、コアな精神とはかけ離れている。実際、リーナスさんも最近普通の意味での短気さと傲慢さを反省したらしく、時代が変わったことを感じる。

3つのフレーズは、たとえば「人生には次の3つが大切だ」と言っておいて

・アイス
・クッキー
・ケーキ
・氷は大切だ。
・優しい心を持った人(クッキー)は大切だ。
・ときどき人生にケーキのような楽しみを取り入れることは大切だ。

のようにするのと同じで、ただキャッチーなだけで、ニュース記事なんかによくある釣りタイトルとも同じだと思う。

ラリーさんはたぶんここまで世界的にこの発言が広まると思ってなかっただろうし、あくまで7つの大罪からとった3つを使った世間に対する皮肉のつもりだったのだろう(憶測)

ただぼくとしては「プログラマの三大美徳である怠惰と短気と傲慢を持った人」というのは、全然怠惰でも短気でも傲慢でもないと思う。だいたいなんでも「この3つが大事」とか言ってアナロジーしようと思えばできる。

偉そうなこと言ってぼくは全然美徳とかないけど、とりあえず不満があったのでこんな記事を書いてみた。

まあ「勤勉!根気!責任感!」と言っても流行らないんだろうけど……

追記(2019/03/13)

なんかご本人も「努力、忍耐、謙遜」と表裏一体だよ!みたいなことを言ってたようだ。わろた。

https://www.oreilly.co.jp/BOOK/osp/OpenSource_Web_Version/chapter10/chapter10.html