OOPの何が嫌いって…

あまり知られてなかったり、知ってても忘れている人がほとんどだと思うけど、私も「言語書き」だ。母校で講義も持っていたし、JISの委員だったりする。あ、そー言えば著作もあったわ。

過去形でないのは、今でもちょっとした定義言語はふつーに作っているから。とは言えmatzみたいに「流行りの言語」とか「これから流行る言語」とか作るわけじゃないけど。

大昔、C++とObjective-Cとどっちがいいんだみたいな議論があった頃、C++と同じアプローチでCOBOLのOOPなものを設計していた。Objective COBOL Enhancementで「OCOBOLE」。「おこぼれ」だ。某研究所でそれをマジメにやるのやらんのとゆー話があった頃、異動になってそういったところから離れた。

時を前後してSmalltalkにハマり、その勢いでPascalの処理系を作った。P-codeではなくて、byte codeを吐くもの。Pascalの基本機能を実現してから、OOPな機能を入れようと思っていた。とゆーか、それがやりたくてbyte codeを吐くPascalなんてのを作ったのだ。

ところが、その頃からOOPLな世界に急激に嫌気がさして来た。byte codeが当時のCPUにとっては重いということもあって、「この先やーんぴ」という気分になってやめてしまった。それ以来、OOPLはエンドユーザになることはあっても、言語仕様やら意味論みたいなものには、一切関わりを持たないことにした。

何に嫌気がさしたかと言えば、OOP周辺に多い「理屈こねこね」にだ。

私にとって、プログラム言語なんてのは、「たかが言語」に過ぎない。だから、必要ならすぐ覚えてしまうし(そういったのはなぜか得意だ)、使いやすい言語があればすぐそれに走る。私の興味の対象は「何を書くか」であって「何で書くか」ではない。自分の取り組む問題に合っていればそれでいい。

書き方のスタイルなんかも、実はあまり気にしない。インデントにはクセがあるし、名前のつけ方にもクセはあるのだが、他人が自分よりもうまくやっているのがあれば、すぐそれを真似してしまう。Cは4カラムだけど、Rubyは3カラムかなぁとか。

その反面「○○らしい書き方」というのはあまり気にしない。私の書いたプログラムは、3mくらい離れて見れば、たいてい同じに見えてしまう。「らしく」書くことのメリットはわかっているし、それに合わせたいとは思うけど、他人がどうやっているか別にどうでもいい。気に入らなきゃ直してしまえばいいんだし。

ところが、なぜだかOOPL周辺には「らしさ」を強要する空気がある。「そんなの○○じゃない」みたいなけなし文句に満ちている。あるいは「OOな思考とは」みたいな議論が多い。また言語デザイナくらいになると、「文法の意味」みたいな議論が大好きだ。

そういったのに萎えたものだから、「やーんぴ」だったのだ。

繰り返しになるが、私にとって「プログラム言語」とは「プログラムを書くための道具」に過ぎない。それは自分がデザインした言語も含めてだ。だから、目的を達していればそれでいい。「らしさ」だとか「意味論」なんてのはどうでもいい。「オブ脳」なんてクソ喰らえだ。

確かにいたずらに読み難いコードを書く奴は、頭かち割ってやろうかという気になる。でもせいぜいそれまでだ。今風の言語は1つのことを実現するのに複数の方法があって、「こっちの方が効率いい/読みやすい」とかいうのがあるようだが、私はむしろ

そんな言語仕様の方が異常

とさえ思う。Larryだったかが、「ポストモダンな言語」みたいな話で「書きたいように書ける言語がいい言語」みたいなことを言ってたと思うが、

そんなことしたかったら他の言語定義しろよ

とさえ思う。あるいは「いろんな方法」があるんだったら、「どれ使おうが俺様の勝手」だとも思う。それをいいだ悪いだ言うのは、時間のムダだと思う。そんな議論してる暇があったら、プログラム書け。

で、また繰り返しになるのだが、こういった輩はOOP周辺に多い。COBOLerやC屋がそんなことを言うことはあまりない。

別にCみたいなJavaやC++でもいーじゃん。ちゃんと動いて、ちゃんと読めれば。「らしく」というは可読性のために有効なことは少なくないが、あくまでもそれは「手段」に過ぎない。