kなんとかの日記 このページをアンテナに追加

2010-06-13

プログラミング言語の優秀さと道具としての評価は別

| 08:38 |  プログラミング言語の優秀さと道具としての評価は別を含むブックマーク

ワシは、cgi.rb なんかが標準添付になっている RubyPHPdis る資格はないと思ってる (cgi.rbの元ネタである CGI.pm を擁する Perl も同じじゃないかな)。cgi.rb は、標準添付モジュールのくせにコードが汚いし遅いし、cgi[] の戻り値が String だったり File だったりするし、どう考えても設計ミス。

## Ruby だと
cgi = CGI.new
p cgi['name']    #=> これが File である可能性がある

## PHP だとそんな問題はない
$name = $_REQUEST['name'];   # 必ず文字列
$file = $_FILE['name'];      # ファイルは別途取り出す

そして大半の Rubyist はこういった問題に気づいてすらいない。そういう人たちが PHPdis ってるのは「ハァ?」と思う。

実は Python も似たようなもん。知ってるか、21 世紀になって 10 年近くたつというのに、Python 標準添付の cgi.py はセッション機能をサポートしてないんだぜ? びっくりだろ。しかも Google App Engine でも Python SDK ではやっぱりセッション機能が用意されてない。Pythonセッションになんか恨みでもあるのだろうか。加えてプロセスの起動はトロいわ、cgi.py の読み込みはもっとトロいわで (これは urllib.py のせい)、ちょろっとした掲示板を作りたいときに Python を選ぶのは躊躇する。まあ Python は昔から mod_python が優秀だったから CGI はさほど重要視されてなかったのかもしれんけど、それでも wsgiref を標準添付するまえにやることがあるんじゃねーの? と思う。


結局のところ、言語としての優秀さと道具としての評価は別の話ということだよね。これは言語の速度とアプリケーションの速度とは別の話であるのとよく似ている。RubyPythonプログラミング言語としてはすごくよくできているけども、Web アプリケーションを作る道具としての評価は、ワシからみると PHP とそれほどの差はない*1

逆に初心者向けでいえば、PHP のほうがずっとよく出来ている。初心者が RubyCGI スクリプトを作成すると、

  1. まずファイルに実行属性をつけるところでつまづく (そんな高度な概念は理解できない)。
  2. 次に #!/usr/local/bin/ruby の書き換えがわからなくてつまづく (そんな暗号は理解できない)。
  3. 最後に 1 行目が「"#!/usr/local/bin/ruby\r\n"」となっているせいで理解不能なエラーになってつまづく (←ワシもワシも)。

これに比べると、PHP は天国だ。なにせ拡張子を「.php」にするだけでいい。これは初心者でも分かりやすい! つまづくポイントが少ない方が、道具としては優秀だ (まあ PHP はそれ以外のところではまりポイントが多数あるけど)。

ドキュメントもそうだよね。PHPの公式ドキュメントは優秀すぎる。関数の一覧も見やすいし、検索もできるし、有益なコメントがついててこれがまたドキュメントの価値を高めている。これに比べて Ruby のドキュメントは、揃ってはいるんだけど、見やすさや検索性という点ではダメダメ。これを初心者が見て理解できるかというと、まあ難しいよね (そういうわけで、このプロジェクトには期待してる (競争が発生するという意味で))。言語を「道具」として見た場合、ドキュメントは非常に重要。この点でいえば、PHPRubyPython よりも優秀な道具だといえる。


「言語の速度 != アプリの速度」という話をすると、スクリプト言語屋さんはだいたい同意してもらえる。けどそういう人でも「言語の優秀さ != 道具としての優秀さ (道具としてみれば RubyPHP もさほど変わんないよ?)」という話をすると、怒ったり無理な反論したり感情的な態度になる (ここらへんの反応とだいたい同じだと思えばわかるだろうか)。

でもさ、「言語としての優秀さと道具としての評価は別」なんて、よく考えたら当たり前のことでしょ? いくら RubyPython が優秀だからといって、Windows 用のゲームを作りたい人にとっては VBHSP のほうが優秀な道具なわけよ。あるいは英語がわからない子供にとっては、道具としてはなでしこのほうが優秀なわけよ。優秀な言語がいつも優秀な道具であるとは限らない。そんなの当たり前のことでしょ?

だから、Rubyist や Pythonista が PHP の言語仕様を dis るのは別にいいけどさ、確かにプログラミング言語としての RubyPython は本当によくできてるけどさ、それと道具としての価値はまた別だということを知ってほしい。そんなこととっくに知っとるわい! という人はぜひ cgi.rb の代替物を作るか cgi.py にセッション機能を追加するか urllib.py の _hextochr まわりを修正してから出直してきてほしい。

#他の言語屋さんから dis られて困っている PHPer の方がいたら教えてください。相談にのります。


今日のまとめ:「言語仕様の優秀さ != 道具としての優秀さ」


・・・え、PHP は道具として優秀じゃないって? そこはぜひ Read Air, PLEASE!!


(追記)

ngsw プログラマではないけれど、言語がそもそも道具だと思うんだ。だから評価は不可分なんじゃないでしょうか。 2010/06/14

http://b.hatena.ne.jp/ngsw/20100614#bookmark-22280889

道具としての価値を決定する要素は、言語仕様以外にもいろいろありますよ、ということです。

oukayuka CGIなんて誰も使ってないから放置されてるだけじゃないの? Webフレームワーク全盛の時代にCGIがダメだからこの言語はダメなんて言う人がいるとは思わなんだ。 2010/06/13

http://b.hatena.ne.jp/oukayuka/20100613#bookmark-22280889

キミはせめてtdiaryhikiぐらいは知るべき。Matz日記もるびまcgi.rbに依存してるじゃないか。

こういうこと言ってるのはきっと事情をよく知らないRails使いに違いない。Railsだってcgi.rb使ってる (た) のにね。

#つうか標準添付ライブラリが放置されてたらまずいだろww

denchuinc ruby 最近RubyでWebプログラミングする人たちって,cgi.rbなんて使ってるのかしら? 拡張子phpにすれば良い,ってのもサーバ側の設定次第な気が……。2010/06/13

http://b.hatena.ne.jp/denchuinc/20100613#bookmark-22280889

キミもtdiaryhikiを知った方がいい。それともcgi.rbを使ってるtdiaryhikiに対するあてつけか? 高度だなあ。

ssig33 はあ、 cgi.rb の代替って sinatra でいいんじゃないですかね 2010/06/13

http://b.hatena.ne.jp/ssig33/20100613#bookmark-22280889

動作がひどく遅い require 'rubygems' が必要な時点で、代替にはならないんじゃないですかね。

あと代替として推薦するならsinatraじゃなくてrackじゃないですかね。

nazoking PHPの $_REQUEST[xxx] は配列が入ってることがあるよ! 2010/06/13

http://b.hatena.ne.jp/nazoking/20100613#bookmark-22280889

それはキーとして「"xxx"」じゃなくて「"xxx[]"」を指定したとき*だけ*だよね。取り出すデータをプログラマがコントロールできるならそれでいいけど、cgi.rbの場合は違うから。

*1:もちろん今なら RailsDjango の存在が前提だろうけど、そこまで含めるとそれは RailsDjango の評価であって RubyPython の評価じゃないし、PHP だってたくさんのフレームワークがある。

hitachitac 2010/06/13 09:50 PHPの言語仕様に文句をつけている人がWebアプリを作成する道具としてのPHPにまで文句を付けている事ってそんなにありますかね?
大抵は、Webアプリを作る場合の手軽さは評価してる事が多いと思いますが。

gg 2010/06/13 10:01 基本的にPHPを批判するのって「言語仕様がアホ」だからですよね。
少なくとも道具としてのPHPは一級品だと思います。事実、自分で書く動的WebページはPHPで書いていますし。

というか「道具としての優秀さ」は比較できるものではないですよね。
「道具」は「用途」があって初めて比較できる。

VB LoverVB Lover 2010/06/13 12:11 PHPはWebプログラミング界のVBや!

kwatchkwatch 2010/06/14 01:08 hitacさん:
> PHPの言語仕様に文句をつけている人がWebアプリを作成する道具としてのPHPにまで文句を付けている事ってそんなにありますかね?

『道具としてのPHP』どころか、PHPを使ってる人のことまで侮辱してますよ。なにか、いじめの深刻さを把握できてない教師のようですね。
http://blog.livedoor.jp/dankogai/archives/50993137.html

gさん:
> というか「道具としての優秀さ」は比較できるものではないですよね。
> 「道具」は「用途」があって初めて比較できる。

はい、まったくその通りです。でも「必ず <?php ?> を書かないといけないPHPはCLIに向いてないからダメだ」というような、用途を勘違いした批判をしてる人もいるんですよ、困ったことに。
http://blog.livedoor.jp/dankogai/archives/50835571.html

VB Loverさん:
> PHPはWebプログラミング界のVBや!

まったくその通りです。言語としてはウンコだけど、道具としては結構使える。

authorNariauthorNari 2010/06/14 10:04 > プログラミング言語の優秀さと道具としての評価は別
その通りだなと思いました。cgi.rbよりはPHPの方がよさそうだなーと思います。

> cgi.rb なんかが標準添付になっている Ruby に PHP を dis る資格はない
この辺りが少し引っかかりました。
アフターRails世代のRubyistって「あぁ、俺はcgi.rbを使ってるー」って人は
あまりいないのじゃないでしょうか(僕とかそうなんですけど)。記事にも書
かれている通り、sinatraとかRailsとかはすでにrack使ってますしね。

cgi.rbをあんまり意識していないRubyistがPHPをdisれないのだとしたら、それ
はなんか「自分が完全完璧じゃないと、人を指摘してはいけない!」ような雰
囲気になってしまってちょっと嫌かなぁと、というのが率直な感想です。

あ、cgi.rbもPHPもヘビーに使ったことはない素人考えなので、全然スルーして
もらって結構です(汗)。

defdef 2010/06/15 01:41 言語としての優秀さと言語仕様の優秀さは別じゃないですかね。そして、Ruby の言語仕様についても批判はありますし。

http://wota.jp/ac/?date=20100604#p01

kwatchkwatch 2010/06/15 07:04 authorNariさん:
> cgi.rbをあんまり意識していないRubyistがPHPをdisれないのだとしたら、それ
> はなんか「自分が完全完璧じゃないと、人を指摘してはいけない!」ような雰
> 囲気になってしまってちょっと嫌かなぁと、というのが率直な感想です。

・「disる」と「指摘する」は違うと思います (ただの指摘をdisられたと感じる人もいますけど)。
・相手よりひどい欠点がある (かつそれに気づいてもいない)
のに相手をdisるのがまずいのであって、『自分が完全完璧じゃないと…』なんて思う必要はまったくないと思いますし、その心配は杞憂じゃないでしょうか。
・「自分はrails以降の人間でcgi.rbなんか意識してないから云々」というのは、単に自分の無知を棚に上げてるだけのように見えます。まあ知らないままで相手をdisるのも言論の自由なんでしょうけど、傍から見るとギャグにしか見えません。

authorNariauthorNari 2010/06/15 09:04 > 「disる」と「指摘する」は違うと思います
あ、なるほど。何も知らないまま、PHPを批判してしまうようなことは駄目だ、とこの記事でいってたんですね。理解不足でした…。納得です。

arikui1911arikui1911 2010/06/16 10:35 > cgi.rb なんかが標準添付になっているRuby
つまり標準添付から外せばいいのです。
極論ですかね。代替もないし。
webrick/cgiはPythonのcgi.pyのようにセッション機能がありませんし。

kwatchkwatch 2010/06/17 21:57 authorNariさん:
主題はそこではなくて、あくまで「言語仕様の優秀さ != 道具としての優秀さ」です。PHPを批判するための条件とかそういう話ではないです。

arikui1911さん:
ご自身で分かってられると思いますが、極論です。cgi.rbを改善するか、または代替物を用意することが正攻法であり、cgi.rbを標準添付から外すことは問題から逃げてるだけ。

   2014/06/21 02:44 なんか必死で憐れだなw