Quoraよりシェアしました。
https://jp.quora.com/Ruby-to-Python-deha-dochira-ga-suki-desu-ka
Kenn Ejima, ソフトウェア開発者
私はRuby推しですね。QuoraはPythonの会社だし、Pythonは好きな方の言語ではあるのですが、Rubyと比べてしまうと、セクシーさが足りなくてショボーンってなりますよねぇ。
RubyとPythonって、軽量言語としてのポジション的には兄弟とか表裏一体といっても良いぐらい似ているのですが、言語の思想としてはほぼ真逆なのが面白いですよね。
RubyはPerlの文脈を背負っているので、TMTOWTDIといって「同じことをやるのにも複数のやり方がある」という自由主義的なのに対し、PythonのほうはZen of Pythonに宣言されているように、反TMTOWTDI主義とでもいうべき “There should be one—and preferably only one—obvious way to do it.” (同じことをやる唯一の書き方があるべきだ)という教条主義的な思想があります。
プログラミングとはどういうものか、聖典のように教科書的な定義の正書法が欲しければ、書き方に自由度のないPythonのほうがいいでしょう。実際、プログラミング初学者向けの教育の現場ではPythonがよく使われますね。そして、そのままずっとPythonを使い続ける人も多いでしょう。
ところが、現実世界の日本語、英語などの自然言語はどうでしょう?
「同じことを伝えるのにも、複数の表現方法がある」ほうが普通ですよね。言葉は生き物であり、使う人によってどんどん変化していきます。
しかし、それでは論理を表現するのに曖昧さが発生して不都合が生じることもあり、法律の世界では言葉の定義を厳格にしたり、数学の世界では数式を用いたりと、「日常的には使わない(不自然な)言葉を交ぜる」ことによって厳密さを担保しています。
赤ちゃんが3歳になる頃に話す言葉と、プロの小説家が使う言葉とでは、たとえ同じ言語であっても表現方法や表現の幅が違うのは当たり前ですよね。
私は、この手に馴染む感じというか、適当なことを書いても何となく通じる、しかし上達すればするほど美しい表現ができるようになる、まさに自然言語のようなRubyの性質をこよなく愛しています。
そして、いったん自由にアイデアを広げてから、推敲と編集によって刈り込んでいき、本質的な部分だけの表現へとどんどん短く圧縮していく。このプロセスは、非常に数学的な美しさを放っており、科学の世界でいうところのオッカムの剃刀という概念そのものです。Rubyでは、しばしば最終的な表現が E=mc2 のような、これ以上リテラルに短くしようがないところまで行き着くことがあります。こういうアハ体験を得た瞬間には、うっとりとコードを眺めてしまいますね。
人間は、最初から結論にたどり着くのではなく、試行錯誤の末に本質が見えてくるのです。このプロセスに自然に沿うのは、強みではないでしょうか。
そして、ささださんがおっしゃっているように、そういった実験、試行錯誤を徹底的にサポートしてくれる、オープンクラスで言語自体をどこまでもカスタマイズできるような遊び心にこそ、Rubyの本質が現れており、多くの人がRubyと出会って「恋に落ちる」のだと思います。
私が唯一、Rubyで美しくないなぁと思っているのは、スコープの終端でendがズラズラと並ぶところで、非常に目障りに感じます。これはPythonのインデントで階層を表現できるのが(ほぼ唯一の)うらやましい!と思うところです。
同じことを思う人はいるようで、ときどきEndless Rubyのようなジョークをかましてくる人もいます。
0 コメント:
コメントを投稿