2006年10月03日 01:00 [Edit]

プログラミング言語foobarの生産性の高さはどこまで本当か

分裂勘違い君って、コードは分裂も勘違いもしてないのね(失礼)。

分裂勘違い君劇場 - Rubyの生産性の高さはどこまで本当か?
nbookmarkもの人がブックマークしているこの「Rubyを仕事に使うべし!Part1 なぜ仕事で使うとうれしいのか」という記事で、Rubyのすばらしさついて、いろいろ書かれていますが、実際のところ、どの部分が、どこまで本当なのでしょうか? 少し検証してみたいと思います。

それはとにかく、言語の生産性で最も大事なのは何かを改めて考えてみた。


出た結論は、これ。

それを手に入れたくなった時に、それが手元にある事

はっきり言って、「いろんな言語のいいとこ取り」も「構文が強力」も「楽しくプログラミング」も 「問題が起こりにくいように設計されている」も、枝葉末節というか、この「定理」から自然に導き出せる結論に過ぎない。

C#は確かにいいと思う。私自身はJavaよりずっとかっこいいと思う。でも使わない。「手元の環境」であるOS XやFreeBSDでは敷居が高いからだ。なぜ敷居が高いか?デフォルトで付いてこないからだ。CやJavaやC++やObjective CならXcodeに付いてくるし、ましてやPerlやRubyやPythonやPHPならXcodeすらいらない(ただし、XSなどC/C++による言語拡張が不要な場合)。そして(ECMA|Java)Script (以下JS)。全てのブラウザーについてくる。

この違いは大きい。

なぜ「全てのLL言語のふるさと」であるLispが「生産性向上」ツールになり得なかったかといえば、手元になかったからだ。これは未だに手放せないCとは好対照である。

ただし、「手元にある」というのは、インストールされているだけでは充分ではない。やろうと思ったことが、それを使えばすぐに出来るという手応え、すなわち「手が届く」感触があってはじめてその言語は「手元にある」ことになる。

例えば、awk。インストールされている点に関して言えば、およそUnixの血を引くOSであれば/usr/binの中に入っている。しかし複数ファイルを開くのがおっくうで、それをやりたい時にawkに手を伸ばしても、やりたいことに「手が届かない」。だからLarryはPerlを書いた。

逆にやりたいことに「手が届き」さえすれば、その人の生産性にとって汎用性は二の次だ。PHPが台頭したのはそのためだ。PHPユーザーが欲しかった機能は「プログラミング」ではなく、「動的なWebページ」だった。「プログラム」したい人にとって、静的なデータと動的なコードが渾然一体となったPHPファイルは嘲笑の的でもあるが、「ほとんど静的、ちょっとだけ動的」なページを作成するのにはPerlですら「重た」かったのだ。

そしてフレームワークの時代。DHHが「手に取り」たかったのは、PHP「を」「実装する」環境。Pythonでは自由がなさすぎた、Perlには自由がありすぎた。SmalltalkはPHPからかけはなれすぎていた。彼が結局手にしたのがRubyだったというわけだ。そして今そのRubyで書かれたRuby on Railsに「手を伸ばし」がたいがために、Rubyを習う人々が増えてきた。

しかし、最近では「欲しいもの」に「手が届く」ためには、「両手が必要」、すなわち一つの言語では充分ではないことが多くなってきた。例えばAJAX。クライアント側はもちろんJSで書かれるが、サーバー側も書いてはじめて「手が届いた」ことになる。

しかし、「両手を使う」と、「片手づつ」の倍以上仕事がはかどる。どれだけはかどるかは、本blogを見ていただければおわかりいただけるだろう。"perl+javascript"ではじまるタイトルのentriesは、ほとんどが30分とかからず書いたものだ。10分かかっていないものも少なくない。これを「言語統一」のためにspidermonkeyを使いでもしたら、私は発狂していたかも知れない。

だから、生産性を上げたいと考えたら、「両手を使って仕事をする」ことを学んだ方がいい。RubyかC#ではない。RubyもC#も、なのである。上がるのは生産性だけではない。「想像力」も「創造力」も上がる。もちろんRubyとC#でなくたって、PerlとJSでなくったって構わない。

一番大事なのは、あなたが欲しいものに手が届くことなのだから。

Dan the Cyberpolyglot


この記事へのトラックバックURL

この記事へのトラックバック
生産性という言葉はおそらく経済学から来ているのだと思うが、経済学者でないわたしが
生産性【ユメのチカラ】at 2006年10月17日 14:04
先日のこのエントリーに関連して。 それを手に入れたくなった時に、それが手元にある...
ほしいものに手が届く【今日のコネタ】at 2006年10月05日 11:16
◆◇◆【10月04日に誕生/死去した人】◆◇◆◇◆◇◆【今日のブックスランキング】◆◇◆ダニーことdankogaiが「プログラミング言語foobarの生産性の高さはどこまで本当か」というエントリでPHPについてこう書いている。逆にやりたいことに「手が届き」さえすれば、その人...
[PHP]全ての文系人間はPHPをやるべきである。【好むと好まざるとにかかわらず富士山とにゃんこ写真ブログ】at 2006年10月04日 05:55
あー、明日からの「どう見てもデスマです。本当にありがとうございました」な日々の...
~(なぜ仕事でRubyを使うとうれしいのか)【ratio - rational - irrational】at 2006年10月04日 00:49
プログラミング言語foobarの生産性の高さはどこまで本当かそれを手に入れたくな...
それを手に入れたくなった時に、全てを手元に置こうとするのがJava【眠る開発屋blog】at 2006年10月03日 13:00
最近http://itpro.nikkeibp.co.jp/article/COLUMN/20060919/248312/の記事を発端に、 http://d.hatena.ne.jp/fromdusktildawn/20061002/1159784863とか http://blog.livedoor.jp/dankogai/archives/50647659.htmlとか、 著名なブロガーさんの間でもRubyとJavaについていろい
[Java][プログラミング]Rubyのブロック構文のように、Javaで全行処理し終わったら勝手に閉じるイテレータを作る【矢野勉のはてな日記】at 2006年10月03日 03:14
この記事へのコメント
・ロシア語とドイツ語、どちらの方が生産性が高いですか?
・その言語がしゃべれれば、目的によらず誰でもいいのですか?
・愛を語りたい場合、どちらが生産性高いですか?


ロシア語と英語の違いはわからないけど、
論理的に話すのであれば、英語。
曖昧さ、わびさびを伝えるのであれば、日本語。
おしゃれに話すのであれば、フランス語。

とはいわれていますね。

Posted by まころん at 2006年10月04日 17:40
で。
HASKELL最悪ということでFA?

...ネタですよ。
Posted by ねね at 2006年10月04日 06:44
いきなり一般化して断言するのはこのブログの常套手段ぽい。
Posted by ななし3 at 2006年10月03日 20:12

そのとおりだと思います
Posted by hidebow at 2006年10月03日 18:59
言語に生産性などなくて、「あなた」に生産性があるのかという
話でしかないような気がする。結局

・対象のレイヤと同じレベルで問題を直接取り扱うことができるか
・表現方法はあなたの思考モデルに沿っているか(脳ネイティブか)

の2点の落ちるのでは?後は消極的な(でも重要な)制約条件以上の
ものではなさそう。

で、1は満たしてもらうとして、後は

・ロシア語とドイツ語、どちらの方が生産性が高いですか?
・その言語がしゃべれれば、目的によらず誰でもいいのですか?
・愛を語りたい場合、どちらが生産性高いですか?

といった問題と同じ領域に落ちるような。結局「目的」「あなた」という
変数が絡むので、「宗教論争の時間を思索に使っていれば今頃は全員が
救われていただろうに」という話になる。
Posted by tai at 2006年10月03日 18:26
dlが対象外ならWin32APIも対象外でしょ。機能的にdl⊃Win32APIだし。(cf. dl/win32)

ネイティブな操作って、ネイティブなライブラリやAPIを呼び出せることを含むんじゃないのかな。
Posted by ななし2 at 2006年10月03日 13:48
すみません.なぜか,修正途中で三度も送信されてしまいました・・・上の二つを消しておいてください m(__)m
Posted by むらけん at 2006年10月03日 05:31
はじめまして.Ruby 大好きだけど,冷静に突っ込みます.

> ↑Unixの主要システムコールは整理されて実装されているし、dlがあるし、

この文脈で dl は対象外だと思いますよ,ななしさん.
Posted by むらけん at 2006年10月03日 05:30
↑Unixの主要システムコールは整理されて実装されているし、dlがあるし、WindowsやMac OS XにはWin32APIやRubyCocoaがあるけど。「フレームのもと」ってことは釣りなのかな。
Posted by ななし at 2006年10月03日 04:00
そう。Lisp Machineが広まってれば歴史は変わっていたかもなぁ
Posted by lisper at 2006年10月03日 03:59
>Lispが「生産性向上」ツールになり得なかったかといえば、手元になかったからだ

Lispに限らないけど
「OSネイティブなAPIを操作しづらい」
とかいうのも、生産性向上ツールになれないケースの要因としてあるんじゃないかな…。

言語が生産性高いかどうかは

・ポータブルであること(どこでもインストールされている)
・ネイティブな操作が簡単にできること

の2つがポイントな気がする。

…あれ。Rubyはダメじゃん(←フレームのもと)。
Posted by Bar at 2006年10月03日 02:09
http://local.joelonsoftware.com/mediawiki/index.php/Wasabi
するとこれなどは、「手を増やせる人」といったところですかね。
Posted by hama at 2006年10月03日 01:57