自分の経験の枠組みは自分で変えられるか?

例によってメタな方向に話を広げようと思うんだけど、Ruby VS PHP論争の背後には「自分の経験の枠組みは自分で変えられる」という発想の有無という問題があるのではないだろうか。

そう思ったきっかけはこれ。

artonさんは、Matzにっき(2008-01-29)のコメント欄にあった、「影響力の大きい人が発言してるので怒ってます」という一言レスに着目して、興味深い考察をしている。

影響力のある人ってのは、つまり権威ってことなんだし、自分で吟味しない人は常に一定の割合でいて(そうでなければ、世の中に権威という存在はありえないわけだが、実際、存在している)その人たちに影響を与える。

ってことは、権威がある人は、だめなものはだめ(良いものは良い)、と言うべきですね。

私も全くその通りだと思ったけど、冒頭のように考えてみたら謎の発言の意味が少し読めてきた。

つまり「プログラミング言語の仕様というものはユーザの総意によって変えることが可能である」という暗黙の前提が無いとしたらどうなのだろうということだ。

これにちょっと関連した話題で、Yuguiさんは、「もし著名な人がRubyをDisったら、Rubyistはどういう反応をするだろうか」ということを想像して、感情的な反応はしないだろうと予想のもとに次のように言っている。

私の周囲のRubyistは「Haskellかっけー」と言って勉強して、「Erlangのグリーンスレッド実装はあんなに効率的なのに、Rubyはどうしてこんなに酷いんだ?ちょっとErlang勉強してみる」と言って勉強会開いて、「Perl6すげー。Rubyも真似しようよ」「いや、Rubyを捨てて乗り換えるんだ」「むしろこれからはScala」「Rubyだってここを直せば良い感じになる。このパッチよろ」っていう人たちだから。

つまり「Rubyに問題があればそこを変えればいいんだし、それができなかったら自分が使う言語を変えればいい」という発想の人がRuby使いには多いということだ。

そして、このメンタリティは、Rubyという言語の特性というよりは「1つの技術にロックインされてない人」だから持ち得るもので、もしRubyがもっと普及したら、必ずしもそうとは言えなくなるかもと言っている。

これは重要なポイントだと思う。

プログラマにとって、プログラミング言語というものは「経験の枠組み」である。そこにあるルールの多くは、少なくとも最初のうちは、意味不明で「あれこれ考えずにとにかく言われた通りにすればいいんだ」と叩きこまれるものである。で、その既存のルールを早く覚えて深く理解すれば、それだけで自分の生活の quality of life は上がっていく。

だから、プログラミング言語は、ある段階までは、自分の外部にあって変えることができない「環境」であり、プログラマは、その不変の「環境」の中で、その制約に従って生きるしかない存在である。

ところが、オープンソースとかLLというものを覚えるうちに、それが必ずしもそうとは言えないことに気がつく。

つまり、自分が住んでいる「環境」について堂々と文句を言って、時にそれを変えてしまう人たちがいることに気がつく。

少なくとも、「環境」がなぜそうなっていてそこにどういう意味があるのかを、自分が納得するまで追及することは無駄ではないし、そんなに叩かれることでもないし、むしろ喜ばれることもあるし、時にはヒーローになってしまうことだということに気がつく。

言語仕様だけではなくて、ライブラリやフレームワーク等の関連するソフトウエアや、ドキュメントやコミュニティのあり方や開発の進め方について、つまり、プログラマとしての自分の経験を形作る「環境」全体について、不満があれば変えることができるということを知る。

そういう人の割合が特に多いのが Ruby のコミュニティの特色だと思う。

ところが、世の中には「自分の経験の枠組みは不変のもので自分には手が届かないものだ」という信念の人もいて、「変えられる」派と「変えられない」派は、時に深刻な対立を引き起こす。

「変えられない」と考える人は、言語の仕様に理解できない所や納得できない所があったら「悪いのは環境ではなくて自分である。変えるべきなのは環境でなくて自分である」と考え、環境の是非を考える前にそこに適応しようとする。

人間には能力の限界があり、全てを手に入れることは困難です。 だから人々は標準を求めます。 開発者の場合だと、どの言語が良いか迷いに迷って、一つの言語を苦労して習得するワケです。 まつもとさんのように技術力のある方はこの苦労は分からないかも知れませんね。

その苦労して習得した技術を一方的にけなされるのですから、これほど惨めなことはありません。

このコメントをした人には、「人間には環境は変えられない」という信念があるのだと思う。言語開発者はその環境を変えるどころか創造してしまう人なのだから、自分たちとは同列でない「神」であり、「神」が人間の世界に言及する時は、それなりの作法があるだろうと言っているのではないだろうか。

だから、この対立の構造の一部には、プログラミングという領域の外に根ざしている部分があると思う。

というか、もともとネットというものは、「自分の経験の枠組みは自分で変えられる」という信念の人が、自分の信念に合う世界として発見し、その信念に沿って構築した新大陸だ。

ネットやオープンソースやLLが「自分の経験の枠組みは自分で変えられる」という経験を与えたからユーザがそういう可能性に目覚めた、というのは話が逆なのだろう。

コンピュータやネットを知る前から「自分の経験の枠組みは自分で変えられる、そうあるべきだ」という信念を持っている人が一定数いて、そういう人が(ネット以外の)リアルワールドが自分の信念と一致してないことを知り、「どうも変だ、何かがおかしい」と考えて彷徨ううちに、自然と引き寄せられて集ってきて、自分たちの信念に合うように世界を再構築しているのではないかと思う。

PHPのコミュニティは、そういうメンタリティとは逆の人が集っていて「不変の確定した枠組みを作る」ということにフォーカスを当てている。だから、マニュアルや教育システムが整備されていて、スキルとして明解で人月として計算しやすい「PHPプログラマ」の集団を送り出すことができたのではないだろうか。

そう考えると、PHPは「人間には環境は変えられない」という信念にマッチしている分だけ、旧世界には受けがいいけどネットという新大陸では叩かれやすい、ということになる。

「自分の経験の枠組みは自分で変えられる」とか「自分の経験する物事は自分と環境の相互作用で成立している」とか「自分を取り巻く環境を構成する要素には変えられる部分と変えられない部分があるが、変えられる部分の方が本質的で重要である」とか。

そういう考え方を巡る対立って、この問題に限らずあっちこっちにあるような気がする。「変えられる派」が「変えようよ」と言うと、「変えられない派」は「変えることができる人は例外であってそういう人を規準にしたりするな自分たちと同列に置くな」と言って怒る、そういうパターン。

あんまりちゃんとフォローしてないんではずしてるかもしれないけど、「モテ/非モテ」とか「ポジティブ教」とか。