ジジイの若かりし頃

Pygments には zsh の lexer はまだない」のなかで、「csh programming considered harmful」の紹介をしたけれど、この種の「プログラミング言語批判論文」のようなものには枚挙の暇はなくて。

今回の話、「lintで思い出した話」からの流れである。「csh programming considered harmful」のこともあったからなおさら、ふと、そういえば誰かが「なぜ PASCAL を使ってはならないのか」のようなものを書いてた人がいたよな、と思い出した、というハナシ。

記憶を頼りに探し始めたら、例のヤツ(「本物のプログラマは…」)に辿り着いてしまって、あー、違った、と。こっちは実際悪い冗談というか、喩えるなら京劇役者がアングラ演劇を馬鹿にしているような、あるいは宮大工が現代建築を馬鹿にしているような、そんな話。「本物」としている「本物」は本当に「本物」であろうとも、「本物ではない」としているものが「偽者である」とはならないよ、ってことさ。「法隆寺が本物であるとしたって、辰野金吾の東京駅が偽者だ、なんて誰も思わんだろ」というくらいのレベルの話をしている。実際「本物のプログラマは…」は「Newsgroups: eunet.jokes,rec.humor」に対して配信されたものであって、当時から十分にジョークであることが理解されて伝わっていたものである。(ただしそこで述べられている「本物賛歌」が全くのフィクションで冗談だ、ということではなく、多分本当だ。)

で、探り当てたら、あ、そうか。ジジイだったか。ジジイ、39歳の頃。34年も前だ。

以下画像クリックでリンク先に飛ぶけれど、ワタシの記事、とくに注意事項を読んでからにしてね。

上の画像引用で「D&E」とあるのはこれは、翻訳版としては「C++の設計と進化」のこと。

まず「Pascalが私の好きな言語でない理由」を「読む前に」注意しておきたいこと。「これを理由に Pascal を非難しないこと」。このことの真意は後述するけれど、先に簡単に行っておくと、「馬鹿に見られるからやめとけ」てこと。「リーナスもカーニハンも言ってる!」なんて大した理由にはならない。例えばリーナスがコーヒー嫌いだと仮定する。その理由は、昔デート中にパンツにこぼしてフラれたから、かもしれないじゃないか。それでも「リーナスが言ってる!」と言うかい? 例えばワタシには Pascal を批判する権利なんかないが、当たり前である。(Delphiも含め)一度も使ったことがないんだから。もし貴方もそうなら貴方もそうである。

さらに注意しておくべきは、当たり前だがこれが書かれた時代、である。上で書いた。34年前の論文である。似たようなものをあと20年カーニハンが遅く生まれていたら、攻撃対象は絶対に Pascal ではなかっただろう。さらにいえば、今でも真実なことばかりなわけがないじゃないか。

この手の「言語論争」のようなものは、必ず宗教論争の色を帯び始め、さらには昔から大変人気がある。なぜならそれは、実際に面白いからである。「中のヒト」になってしまってもそれはそれで面白いかもしれないが、技術者目線では「それも一理ある」コレクションの場として、あるいは思わぬ宝探しの場(「あ、ruby ではそんなこと出来るんだ、とか」)として、そうでなくても人間観察の場として面白い。冷静じゃない舌戦の観戦は、神経衰弱ももたらすけれどもね。

だけれどもワタシが「貴方」に望むのは、「貴方自身の評価を確定(確認)する目的でこの手の宗教論争を活用しないこと」である。もう一度言うけれど、それは「馬鹿にみえる」。だれだれが言っている、とか、どっちが優勢だ、とか。そんなのどうでもいい。大事なのは「貴方自身の観点に基く、貴方自身の経験・体験に基く、現実的で実用的な判断を下すこと」である。

さて、こんだけの「注意してね」を書かねばならんほど紹介に気をつかうようなものを、それでもなおあえて紹介したいのは何故なのか?

それこそがまさに今書いた「自身の観点に基く、自身の経験・体験に基く、現実的で実用的な判断を下すこと」を自身で実践しているのがこのカーニハンの論文だから、である。これは「C++の設計と進化」にも言える。紹介した先のサイトでは D&E を薦めているが、私も同じ理由でこの本を薦める。Stroudup は java も批判するが、読んでみれば「現実的で実用的な判断」の意味はわかると思う。

カーニハンの言う「シリアスなプログラミング」という表現は、まずはなにより「実」を重視していることを示している。これは D&E でも同じ。C/C++ はいつでも「美しい娯楽玩具」ではなく「無骨な実用工芸品」だったのである。「なぜ C++ は C++ なのか」の問いはいつだって、「必要だから」であった。

たとえばワタシも java は使いやすい局面があることは認めつつも心底からは好きになることがありえないのは純粋に、「javaでは出来ないシステムプログラミングがあるから」に過ぎない。いや、これについては正直に白状しておこう。java が嫌いな理由は、「java が嫌うから」だ。若い子は知らないかもしれないが、java 陣営の C/C++ 批判は度を過ぎていたし、価値もなかったのだ。もともと「テリトリーが違う」わけである。C/C++ プログラマの誰も、java がシステムプログラミングに向かないことは最初から気付いていた。(当時の) java 陣営にとってはこのことは隠しておくべきことであった。ただただ C/C++ が撲滅されればいい、と攻撃した。目的が先天的に異なるものの比較ほど不毛なことはないのに。そして残念なことに、java 陣営による C/C++ 攻撃は現実に功を奏し、C/C++ は「史上最悪の言語」の汚名を着せられ、それは未だに続いている。

ワタシが是が非でも言っておきたいことはそう、「どうかお願いだから、そこらのシュプレヒコールや論争、はたまた空気に騙されないで」ということ。冷静に考えれば当たり前のことなんだけれど、「評価」と「目的」が密接に結び付いてないといけんのよ。(ついでにいえば、「目的に合わない」ことを批判に結び付けるのもアタマおかしい。「目的に合わない」だけのことでしょうよ、そりゃ。)