講義資料の続き

Beating the Averages

プログラミング言語は半分技術で、半分は宗教なんだ [注6]
...
注6: 結果として、プログラミング言語の 比較は宗教戦争になるか、中立であろうとするあまりに 人類学の研究かと見まごうような学部生用の教科書にしかならない。 平和を好むか、大学での終身雇用を手に入れたい人は、この話題を避けて通る。 でも、宗教的な部分はこの問題の半分だけなんだ。他の部分には研究すべき価値がある。 特にあなたが新しい言語を設計したいと思っている時には。

というわけで、本当はもう少し宗教論争的な意味で炎上することを期待していたんだけどなー。真面目に書きすぎだと複数人に指摘された(苦笑)
炎上してから公開するつもりだった原稿の続き:


賢者は歴史から学ぶ。愚者は経験からしか学ばない。

自分で適当な設計で作って罠にはまる前に、既存の言語処理系を色々見比べて、どんな設計を採用したのか、どういう失敗をしたのかを学ぶことが重要だ。
しかし言語間比較は不毛な論争を招きやすい。

なぜか?


ある設計上の問題に対して解決策Aと解決策Bはどちらがよいのだろうか?
例えばGCはデフォルトでONがいいのか、それとも必要な人だけ使えるのがいいのか?
文字列は破壊的に変更できる方がいいのかできない方がいいのか?
整数や多倍長整数浮動小数点数や文字列の間の暗黙の型変換はある方がいいのかない方がいいのか?

「選択肢Aが正解だ」

と言えると思っている?
それは視野が狭い。
現実社会の問題の大部分は簡単に割り切れない「ケースバイケース」な問題だ。

メモリの消費量や実行時間にシビアでないケースではGCまかせにしたほうがプログラマは楽かもしれない。
しかし組み込みでメモリがとても少ない場合や、例えばシューティングゲームみたいにゲーム中にGCが走るとユーザがイラッとする場合などGCまかせにしたくないケースはいくつもある。

唯一の正解があるはずだという思い込みは不毛な議論を招きやすい。


よく起こる不毛な議論のパターン:「宗教論争」「自転車置場の議論

宗教論争とは

言語Xと言語Yのユーザがそれぞれ「自分の使っている言語の設計/機能が正しい」と考え、相手の言語の設計を「自分の信じる正しい言語と設計/機能が違う」という理由で互いに批判する状態。(一般的には言語の設計に限らずエディタやOS、政治、そして宗教も対象になる)

言語Xの信者が主張する「正しさ」が「言語Xに近いこと」なので、何が正しいのかについて意見がまとまるはずがない。不毛な議論である。

宗教論争はなぜ起こるか

全ての言語を均等に知っている人はいないので、どんな人の発言にも「彼の得意な言語がなんであるか」に起因する偏りがある。
人間には自分の慣れたものに愛着を感じる傾向があるので、自分の得意な言語をほめすぎることが多い。
また自分の知らないものの価値を認めることは難しい。よって自分の知らない言語のユーザが自分のよく知らないくだらない機能を高く評価し崇め奉っている「信者」にみえてしまう。

また、特に1つの言語に愛着が強い場合、その言語の欠点を指摘されるとたとえ的を射ていようが「自分に対する攻撃」と感じてしまい、防衛のための反論をしがち。

自転車置場の議論とは

駐輪場に屋根をつけるかどうか、何色に塗るか、といった些細な問題ほど議論に参加する人が多くなる現象。
プログラミング言語で言えばsleepの引数が秒であるべきかミリ秒であるべきか、文字列のリストを結合するのはString#joinであるべきかList#joinであるべきか、配列の各要素に関数を適用するメソッドの名前が map であるべきか collect であるべきか、などの議論。
こういう議論が無意味なわけではないが、大勢で考えなければいけないような問題でもないし、必死になって自分の主張を貫くような価値のある対象でもない。

自転車置き場の議論はなぜ起こるか

人間には「他者から関心・注目・反応が欲しい」という承認欲求がある。承認欲求に飢えている生き物にとって、大勢が参加する議論に加わるのはいいエサだし、万が一自分の意見が通りでもしようものならすごいご馳走だ。
だから簡単そうな問題にはまず素早い人が口を挟み、議論の参加者が増えたことで自分も一言噛んでおこうと思う人でますます議論が紛糾し、そして彼らは自分の名誉と注目を守るために必死に他の意見を貶めようと発言する。

ある種の自然現象

宗教論争も駐車場の議論も、人間がそういう性質の生き物だから起きる自然現象だ。自分が起こさないように努力をすることは必要だが、起きてしまったことに嘆いたり怒ったりしても無意味。夏が暑くて時々夕立になることと同じ。夕立をふらせた雲に文句を言っても雨はやまない。

夕立に怒るのでも夕立が降るのを嘆くのでもなく、夕立の時には雨宿りをして、濡れて風邪をひかないようにするのが賢明。



「PEPのススメ」に続く。