言語女子会3: Pythonが恋愛に悩んでRubyに相談しましたの巻

言語女子会: undefとnullは両方必要?言語女子会2: varは必要?/privateがない?の続編です。

Rubyに恋愛相談

Python: 最近悩んでるのよね…
Ruby: んー、何に?
Python: 自分はどんな人が好きなのかなぁ…とか…
Ruby: あー、そんなの簡単よ!一緒にいて楽しいことよ! *1
Python: そんなの誰とだって仲良くなったら楽しいんだから差別化にならないじゃん
Ruby: そうとは限らないわよ、たとえば、あっ…
C: ごめーん、会議が長引いちゃって遅れちゃった!(髪の毛ファサーっ)
Python: ああ…なるほど…

C

C: 何の話?え、恋愛に悩んでる?そんなの簡単よ。卓越性よ。
Python: 卓越性??
C: そうよ。なんらかの分野で「わたしが一番」という状況を作ることよ。そうすれば男の側からいくらでも寄ってくるわ。
Python: なるほど…ナンバーワンになることですか…
C: そうね、あとは胃袋をつかむことね。食事は毎日必要になるわ。毎日必要になる根幹をつかんでしまえば不動の地位が築けるわよ。
Python: それってOSの実装言語になるとかですか?
C: そういうこと。ラクでいいわよー、そういう状況の男って。だって私に従うしかないんだから。
Python: (なんかいかにもキャリアウーマンだなー)

JavaScript

Python: (そうは言うけどPythonでOSを実装するっていうわけにもいかないしなぁ、なんか別のプラットフォームを探すか…)
JavaScript: さっきのCさんのはなし、すごいおもしろかったねー☆
Python: あ、聞いてたの
JavaScript: やっぱプラットフォームを独占しちゃえばあっとーてきにつよいよね☆ (ブラウザを独占している余裕の笑み)
Python: (イラッ)
Ruby: (イラッ) ところで、あなたの妹さん、元気してるの? *2
JavaScript: んー、まあ元気なんじゃない?でもあの子、ペットのパトラッシュだかフラッシュだかと一緒じゃないと出歩けないからー
Ruby: 最近ペット不可の店多いよね。Apple Storeとかメトロとか。 *3
JavaScript: そうなのよー。店を追い出されたことにスネちゃって、最近は部屋でゲームばっかりやってるかもー。さいきんはFacebookとかで畑たがやしてるかなー。
Ruby: (なんかこのままだとActionScriptちゃん心を病みそうね…)
JavaScript: ま、わたしだってcanvas使えばゲームとか作れるしー、妹のモテ期はもう終わったんじゃない〜?

Java

Ruby: まあ、プラットフォームを独占できれば勝ち組ってのはわからなくもないけど、そうそう都合よく空いてるプラットフォームなんてないよねぇ
Python: そうだよねぇ
Java: (話に割り込んでくる) プラットフォームがなければ作ればいいのよ!
Python: あ、Javaさん…
Java: ヲラーー!! *4
Python: ヒィィィ怖い…
Java: まあアジテーションはさておき、Cさんがプラットフォームを独占してしまったからといって諦めるのは早いのよ。人間の作るものには必ず微妙な差があるわ。それを均質化することでプラットフォームはいくつでも生まれるのよ!
Python: 均質化…ですか
Java: そうよ、JSがでかい顔できてんのもjQueryなんかのクロスブラウザライブラリで均質化したからこそよ!あれもまた均質化によるプラットフォーム創出だわ!そしてその創始者はこの私!(ババーン)
Ruby: やっぱJavaさんとJavaScriptちゃんって仲がいいんですね!
Java: !! 誰があんな奴のことなんか…名前勝手にパクりやがって…ブツブツ…
Python: (Rubyちゃんヤバイよ、それ地雷だよ)
Java: アイツのせいで「ちょっとジャバとか書ける人いないかな?」って言われた場合、だいたいがJSのことじゃんか。*5 いい迷惑だよ!
Ruby: (ああー、そういうことなのかー)
Java: だいたいね、あんな「クラス?なにそれ美味しいの?ぽかーん」とか言ってるユルいやつと同一視されるとか!あいつに比べたらまだPHPの方がよっぽど可愛げがあるわ! *6
Python: え、そうなんですか。意外…。
Java: そうよ!あなたたち!男を従える上で一番重要なのは何だと思う?それは規律よ!
Ruby: 規律?!
Java: そうよ、男はみんな愚かなのよ。彼らの好きになんかさせたら失敗をするに決まっているわ。だからこそきっちりルールを決めて決まったレールの上を歩くように仕向けなきゃいけないのよ。まずはクラスを作れ!型宣言をしろ!多重継承は禁止!グローバル変数なんて不要だ!
Python: なるほど…あえて自由度を削ぐことで男を管理しやすくするわけですか…
Java: そうよ、わたしみたいにアッシー・メッシー・ミツグ君をどっさり抱えているとその管理だけで大変なのよ
Python: (うわー、この人「男はたくさんいた方がいい」なんてバブルな思想なんだ…)
Ruby: (こういう思想だから「頭数揃えて」とか「人月で」とか言っちゃうんだな…)

PHP

別の日…


Python: Javaさんの思想はやっぱり私にはしっくり来ないなぁ
Ruby: あなたprivate全開だしね
Python: (-_-#)
Ruby: でもJavaさんの話で意外だったのはPHPさんを評価してるっぽいところね
Python: そうね、わたしもてっきりPHPさんはJavaScriptちゃんみたいなユルい感じだと思ってたよ。
Ruby: いままであんまり話をしなかったけど、意外と参考になるかもよ。
Python: そうね。


Python: …というわけで恋愛についてアドバイスを貰えませんか?
PHP: あら…そうねぇ…重要なのは安心感を与えることじゃないかしら
Python: 安心感?
PHP: みんな不安なのよ。いきなり難しいことを要求したら逃げられちゃうわ。最初の1歩はとにかくやさしくなきゃ。
Python: なるほど。
PHP: 大学のサークル勧誘とかもそうでしょ。「このサークルは自分を受け入れてくれる」と感じさせることが重要よ。プログラミングでいうなら、最初に動くものができるまでの動線がとにかく短く、わかりやすくなきゃいけないのよ。
Python: そうかー、わかりやすさかー。わたしもわかりやすさは重要だと思う。
PHP: そうね。あとはCさんの言っていた卓越性も重要ね。すべてに卓越することは超人でなきゃできないわ。卓越と特化はセットなの。「自分の得意なドメイン」に特化して、そこでは1位でなければならないの。わたしの場合はそれが「ウェブアプリが動くまでの動線の短さ」だったわけよ。
Python: なるほど、分野を選ぶ、と。
PHP: すべてに卓越することは不可能なの。だからターゲットを絞ったらその他のことは捨てなければいけないわ。例えばあなた、文字列と数値を結合するとエラーになるわよね。でもそれって、数値と文字列を別のものだと理解することを強要する設計よね。
Python: えっ、そんなこと考えたこともなかった…
PHP: エラーにせずに結合した方がウェブアプリが動くまでの動線は短いわよね。数値と文字列は区別してもいいじゃないとあなたは思うのかもしれないけど、あなたはタプルとリストを区別したりとか、文字列とユニコード文字列を区別したりとかいろいろめんどくさい区別を強要してるんじゃない?
Python: うむむ、わたし的には「明示は暗黙より良い」って考えだから、暗黙の変換とかはあんまりしたくないんだけど…
PHP: それはあくまであなたの理想でしょ。それを求めている男性がどれだけいるの?
Python: 確かに…
PHP: 「こうした方が男性は喜ぶんだ」とか思い込んで理想を追いかけるのより、実際に男性が求めることを素早く手軽に提供するのが正しいのじゃない?
Haskell: …不潔にゅ…。

Haskell

Haskell: PHPの主張にはまったくこれっぽちも同意できないにゅ!理想を追いかけることこそ正しいにゅ!


Python: (ヒソヒソ Haskellちゃんって彼氏いたっけ?)
Ruby: (ヒソヒソ ほら彼氏にunsafePerformIOを許したことを後悔してるんじゃなかったっけ)
Python: (ヒソヒソ あ、そっか!)


Haskell: そもそも大勢にモテる必要があるのかにゅ!自分のことを理解してくれて、理想の実現を応援してくれるような一握りの仲間がいればそれで十分じゃないかにゅ!
Python: なるほど、それはたしかに一理あるかも。
Haskell: オンリーワンの独自性、ついてこれない奴はさっさと帰れって突き放し、これがセットになって初めて強い絆が生まれるにゅ!熱心なファンもできるにゅ!
Python: 突き放すことで熱心な人だけを残すということね
Haskell: おまえはキャズムを超えたんだにゅ。ファンが増えれば増えるほど熱心さの平均は下がるもんだにゅ。自明だにゅ。
Python: そうか…
Haskell: それなのにおまえは全部のファンにいい顔をしようとしているにゅ。八方美人だにゅ。そんなことだからどうしたらいいかわからないなんて寝言を言うにゅ。じぶんのやりたいことをやって、ついてこれない奴は捨てればいいにゅ!
Python: むむむ、なるほど…どうすればいいかな…
Haskell: さいきんPythonは関数の引数とか返り値をアノテートできるようにしたにゅ?そのまま型宣言を義務化したらいいにゅ。
Python: 型宣言か…
Haskell: あとオブジェクトは全部コルーチンにして、リストは全部ジェネレータにして、コンパイル時に型チェックした上でErlang VMバイトコードを吐けばいいにゅ。
Python: えー、あのマーケットに参入するのはちょっと…
Haskell: Erlangファンの半分以上は文法にげんなりしているから「文法がキレイです!」って主張すれば略奪愛できるにゅ。その点に関しては確実にErlangよりイケてるにゅ。盛大に戦って潰しあえばいいにゅ。そのあとでわたしがParallel Haskellで参入するにゅ。
Python: なんだ自分のためなんじゃんー、まじめに聞いて損したー
Haskell: 当たり前だにゅ。誰が自分よりモテてる言語に真面目にアドバイスするかにゅ。お前はバカかにゅ。

まとめ

Python: というわけでいろんな人に話を聞いてきたんだけど、やっぱり自分がどうすればいいのかわかんない…
Ruby: あなたRailsみたいなキラーアプリを持ってないもんねぇ。あ、もってたっけ?なんだっけ?ソープ?
Python: Zope?まあZopeにしてもDjangoにしても、簡単ポンと管理画面付きのウェブアプリができるのは悪くないと思うんだけどねぇ。なんか世間的にはRailsの方が注目されちゃってるねぇ。
Ruby: まああなたはウェブアプリじゃないところに軸足を移したら?ほらシヴィライゼーションとかゲームに組み込まれてたりするじゃん?あっち方面は?
Python: んー、その方面はLuaちゃんとガチバトルになっちゃうかなぁ
Ruby: じゃ、あれは?BlenderとかInkscapeとかそういうアート系の。
Python: うーん…なんか不安定そうだし…
Ruby: NumPyやSciPyなんかの科学系のは?
Python: むずかしい数式見ると眠くなっちゃうのよねぇ…
Ruby: やっぱあんた一度ファンを失ったほうがいいんじゃない?(-_-#)
Python: えっ

反響まとめ

  • アセンブリばあちゃん「あたしらは生まれた時から添い遂げる男(チップ)が決まってたから恋愛なんて考えた事がなかったねえ」(by id:raitu thanks!)
  • COBOLおばちゃん「銀行とか金持ってる人を抑えとけばずっと食ってけるよ。頑張りな。」 (by @town_b thanks!)
  • デレ全開のPHPさんは徹底的なconfigureで自分色に染めてあげましょう。でもたまにVerUpで性格豹変して反撃してくるので注意。 (by @KentarouTakeda thanks!)
  • Luaちゃんとガチバトルする気満々(mruby-RiteVM)なRubyさんの「じゃあ私狙っちゃおうっかなー…」的反応を妄想 (by id:taninsw thanks!)
  • Vim scriptちゃん「プラットフォームを独占することは重要よね!」(by @thinca thanks!)
    • EmacsLispちゃん「えっ」
  • 個性的なのがHaskellしかいないのが物足りないので、C++Smalltalklispが加わって欲しいです。 (by id:coolstyle thanks!)
  • Lisp女子会も若手のClojureが企画していたが… Scheme「無理よ!人数が多すぎるわよ!」 Common Lispプログラマーの数だけいるんだものね」Clojure「でも折角の機会ですし、私も先輩とお話ししてみたいし…」 Emacs Lisp「つっても、car/cdr/cons位しか通じねえべさ?」 Clojure「えっ?car?cdrって何です?」 Sc&CL&EL「これだから近頃の若い娘は…」(by @dowhileloop thanks!)
  • わりとオチ担当のPHPがまともにみえるwPython自然言語処理系でやたらと押されているよね。あと、Java姉さんを進化が止まったとディスるC#たんはまだですか? (by @kiichi543321 thanks!)
  • javaさんはphpさんをただ評価しているのでなく「こいつは劣化java」「物足りなくなれば自分に寄ってくる」とか思ってたりするかも (by id:akitsukada thanks!)
  • 「明示は暗黙より良い」って思想によりゆるふわモテカワになれるって発想は、ネイルケアで男にアピールに相当するくらい明後日の方向の戦略ってことですね (by id:dekaino thanks!)
    • Python: 「みんなもっとselfをさらけだしていけばいいのに…」
    • PHP: 「Pythonちゃん、あんまりあけっぴろげだと男性に引かれるわよ。男性は『アイドルはおならしない』とか思っちゃう生き物なのよ。」

あとがき

各種言語の違いを見る上で、やはり化粧やアクセサリよりも、男性観が重要ですよねー。ということで最近自分を見失いがちなPythonちゃんに恋愛相談をしてもらいました。


なおこの記事で言語の比較とかに興味を持った方には僕の書いた「言語設計の基礎知識」を含む60冊分のPDFが1冊にまとまった「Web+DB Press 総集編」がオススメです:

*1: Rubyの「Enjoy Programming」の考え方 まつもとゆきひろ氏が語る「言語の世界」の過去・現在・未来(2/2)

*2: ActionScriptのこと。ECMAScriptも参照。

*3: iPhone, iPadなどを始めとする多くのモバイル端末、WindowsMetro UIFlashがサポート外

*4: Write once, run anywhere

*5: 注:Javaさんの妄想であり統計情報に基づいたものではありません;p

*6: PHPJava風の「単一継承のクラスと多重継承のインターフェイス」を採用している件