2009年11月8日日曜日

なぜ、私はRubyでプログラムを書くのか?(そして、なぜ、あなたはRubyを使わない方がいいのか?)

今回は、Giles Bowkettさんのブログから「Why I Program In Ruby (And Maybe Why You Shouldn't)」という記事を訳してみたいと思います。

この記事は2007年11月に書かれた記事ですが、まつもとゆきひろ(Matz)さんがTwitterでつぶやいて、興味を持ちました。自分もおもに仕事でRubyを使っているのですが、どうしてRubyなんだろう?言語Xでもいいのではと思うときがあります。結局はRubyがいいやになるのですが、どうしてその結果でいいのかということを考えたことがありませんでした。今回、この記事を読みながら、その理由を考えていきたいと思います。


なぜ、私はRubyでプログラムを書くのか?(そして、なぜ、あなたはRubyを使わない方がいいのか?)
Giles Bowkett

Neal Fordが、最近、おもしろいポッドキャストを録音しました。絶対に聞いて下さい。でも、一つだけ言いたいことがあります。反論になるかもしれないし、同じ意味だけど違うことを言っているだけかもしれない。どうであれ、大事だと思う。

Nealはどんなプログラミング言語でも同じプログラムを書くことができるということはチューリング完全であるから、どのプログラミング言語を使うかは「どのプログラミング言語でこのプログラムを書くことができるか?」ではなく、どんな言語でも書くことができるから、「どのプログラミング言語が開発しやすく効率的であるか?」と言い出す。

この質問はRuby言語の設計方針の一つを見落としています。第1にRuby言語はプログラムを書くことを楽しむことができるように設計されています。たくさんあるWebページ上のインタビュー記事の一つで、Matzは次のように言っていました:

チューリング完全理論によるとチューリング完全な言語で可能であること全ては、理論上では、別のチューリング完全な言語でも可能であるそうです。しかしながら、作業量は異なります。誰もアセンブリ言語でプログラムしようとしませんが、理論的にはアセンブリ言語でどんなプログラムでも書くことが可能です。そのため、何ができるかという点では、プログラミング言語によって異なりますが、その違いは限定的です。例えば、PythonとRubyはほとんど同じ機能をプログラマーに提供します。

「何が」を強調するよりも、「プログラムを書いている時にどのようにかんじるか?」の「どのように」という部分を強調したいと思います。そこが他の言語の設計とRubyの設計で主に異なります。特に、Rubyを使っているときにどのように感じるか?といった気持ちというものを重視します。みんなのためにRubyを完璧にするために一所懸命仕事はしませんでした。それは、完璧という考えは人によって異なるからです。万人に対して完璧なプログラミング言語などありません。Rubyを自分にとって完璧にしようとしましたが、おそらく、他の人には完璧ではないでしょう。Guido van Rossumにとって完璧なプログラミング言語はおそらくPythonでしょう。

「どのプログラミング言語がプログラムを書いている時に気分がいいか?」という質問より「どのプログラミング言語が開発しやすく効率的であるか?」という質問は、この設計方針において、あまり重要でないと思われます。

日本では、芸術と芸術の違いはほとんどありません。おそらく、全然ありません。芸術(と技術)の日本の理論は、協調と調和の原則を大抵含んでいます。アメリカではプログラムをすることが芸術か技術かを議論することになるでしょう。しかし、その2つの言葉が同じ意味であれば、プログラムをすることが工芸か工芸かということを聞いていることになります。明らかに、答えは、「そうだよ。何言っているの?」となるでしょう。いわば、プログラミングにおいての協調と調和については、アメリカでは、奥義か身勝手なことであるようです。しかし、日本では、空が青いことと同じぐらい当然なことなのです。

協調と調和は気持ちいいものです。アメリカのRubyist達はよくRubyの能力、表現力、そして、効率性についてばかりとりあげますが、Rubyは気持ちよくするために設計されたという点を心にとめていないようです。なぜRubyが気持ちいいかということ説明したいRubyistでも明示的にその為に設計されたということを挙げません。Nealはポッドキャストでこの点については述べています。

Nealのポッドキャストは主にJRubyについて話をしています。JRubyは第1世代のアメリカ人、片親が外国人のRuby自身であるここアメリカで生まれた子供です。ソースコードでできている日本人の片親ではなく、両親がイギリス人ではありますが、私も第1世代のアメリカ人です。この点にJRubyの持つ痛みが分かるような気がします。第1世代のアメリカ人なら誰でもいつも感じることについてお話したいと思います。他の国からの考えや文化は同じようなものが既に存在しない限り、風で散り散りになる霧のように消滅してしまいます。考えや文化についての言葉が存在しない場合には、受け入れようとはしません。その考えは隙間に落ちるように消えていきます。

それはアメリカのものでもありません。新しい通常の人類の言葉の話し方や書き方を習う人は誰でも母国語には存在しない新しい考えを発見します。反対に考えを誰かに伝えようとする場合は、言葉がない場合は、とても苦しむでしょう。

プログラミング言語は調和、平穏、そして、喜びの経験を与える為に土台から設計されるべきという考えはアメリカのプログラミング文化にとっては全く異質な考えです。そして、アメリカのプログラマーは何故Rubyが好きなのかについて議論しています。彼らの喜びのために設計されたという考えは目の前にあっても消えてしまっています。この国でのもっと近い考えはRubyはおもしろくなるように設計されたという考えです。それは近いですが同じではありません。その考えは禅の庭園と言うよりはおもちゃを意味します。

David Heinemeier Hansonは、Rubyのこの考えを理解しているプログラマーの一人です。もしかしたらデンマーク人特有かもしれません。Railsの初期には、彼は宣伝に力を入れていました。しかしながら、Railsが多くの人に使われるようになってからは歴史となってしまっています。

誰もが使うと言うことは常に科学技術の世界においては話題になっているということです。「なぜ、X言語を使うべきか?」といったことを人々が議論することがすきです。しかしながら、本当はなぜ人々がX言語を使うべきかについてではなく、なぜ、私はX言語を使うのかとなぜ、人々が言語Xを楽しむだろうと考えるかについて議論しています。Rubyの第1設計思想が楽しみなら、Rubyを使う第1原則も楽しみであるべきです。

機能や効率性を求めているからといってにRubyでプログラミングをしないでください。使う「べきだ」と考えているからといってRubyでプログラミングをしないでください。好きだったらRubyでプログラミングをして下さい。もし好きでなければ、止めて下さい。プログラミング言語について宗教戦争はばかげています。千年前のキリスト教の恥ずべき十字軍の救世主的熱意は西洋文化に残っています。その明白な一つの例としては唯一の真のプログラミング言語、テキストエディタ、もしくは、人類を支配する指輪があるべきだという滑稽な思想です。プログラマーは複数のプログラミング言語、テキストエディタ、環境を使って仕事ができる方がはるかに便利です。多様性があることは生態学的に健全です。Nealはポッドキャスト中でこの点を指摘しており、いわゆる多言語プログラミングとして、混合プログラミングと呼称しています。彼はこれをいい流れだと考えており、私もそう思います。

0 件のコメント: