ぐらめぬ・ぜぷつぇんのはてダ

2008/11/24以降のメインブログはこちらになります。 : http://www.glamenv-septzen.net/

本はてなダイアリにはコメント・トラックバックを受け付ける記事を公開します。

2008-01-29

[]あらら、叩かれてる・・・。

Matzにっきで発見。

I am so tired of people defending PHP.

...

PHP is terrible

Need proof? Here it is, broken down by category:

Jon Canady : Columbus OH Software Developer

以下、私見。

"Language Features":

  • "==="については正直しゃーない、としか言えない。ただし"==="と"!=="が何故有るのかを理解していて、なおかつ、"=="でも問題ないと理解している場合に於いては、"=="で済ませてしまっても問題ないと思う。そんなに型が気になるのであればキャストする、という手もある。(スカラー型のみだけど)
  • ハッシュやリストが混在しているのは正直、好きずきだと思う。
  • オブジェクト指向が壊れてる(静的遅延束縛?):静的遅延束縛はよく分からない。自分の意見としてはオブジェクト指向云々の前に、まず参照渡しかCopy on Write機構が腐りきってると思うのでまずそこを直して欲しい。っつーか、言語仕様の根幹であるシンボルの参照の扱いがメジャーバージョン毎に変わるのってどうなのよと思う。
  • lambdaが無いと言っているけど・・・id:rskyさんが現在真の意味でのclosureを実現できるようになるパッチを提出中です。とはいえ、現実問題としてPHPのWebプログラミングしててlambdaが無いとどうにもならない、という状況に追い込まれたことは無いからこれもまぁ、あったら嬉しいけど無くても困らないよ、程度。
  • short_open_tagsとかregister_globalsとかsafe_modeの設定の話。これは同感。うーん、これについては、あまりにも運が悪かったとしか。register_globalsがonの間にPHPがばーっと広がっちゃって、ホスティングサービスとかもそのバージョンで動くアプリがばーっと乗っかっちゃったので、offするタイミングがのびのびになっちゃった歴史もあるし、なんというか、こう、踏まなくても良かったはずの地雷を何故か不思議と良く踏むよね、という感じ。

"Built-in Functionalty":

  • 標準ライブラリとかの関数の命名ルールについて:慣れだと思います。好きずき。私はJavaもPerlもUNIX-Cも読めるけど、PHPの関数名が特別おかしいと感じたことは無いです。慣れましたし、それほど非道くは無いとおもいますがこれも好きずきの問題?
  • 引数の順序が紛らわしい:あー、これは、まぁ、確かに。まぁ、使ってれば慣れますよ。

"Common use":

  • PHPで書かれた有名なアプリ一杯あるけど、HTMLとロジックが分離してない?:コードを見てないから何とも言えない。只、充分Webアプリのアーキテクチャパターンが出揃った「今」の時点と比べてしまっては、そりゃ、文句は一杯つけられるよね。と思う。じゃぁPerl4の時代に作られたCGIプログラムはどうなのよ?とか。そもそもどう分離していればオッケーなんだ?という問題もある。

最後にMatzさんが

Webアプリケーションをなめるな

no title

と手厳しく仰ってるけど、これは完全に同意だし、自分も絶えず勉強中です。HTTPや周辺要素技術がわんさかあるので、大変なのです。

私自身はPHPの大量の関数に慣れてしまって、一番早くしゃべれる言語になってしまってますのでアレなんですが、只、ここまで来るのにはやっぱりPHP3の時代からちょっとずつ触ってたのがあったかな、と思います。

うーん・・・PHPの厭な面と絶えず付き合ってきたから、かもしれません。

まぁ初心者が勉強しやすい言語ですが、初心者に作らせて良い言語では無いと思います。

でも、最近は"PHPで作るとここが危ないよ"という情報も沢山出揃ってますので、そういったのをきちんとアンテナ張って目を通したりする人であれば、暫く勉強を続ければ大丈夫だと思います。逆にそういった情報に自分からアクセスしようとせず、分からないことがあってもPHPマニュアルを調べもせず、PHPPro!に初心者免罪符で質問投げて答えだけほしがる・・・という人は・・・これは、PHPに限らずどんな言語であっても、上手く行かないとは思います。

中途半端ですが、そんなオチ。

[]もうちょっと考えた。

id:Yudoufuさんからのコメントを返信し終わって、食器洗いをしながらぐるぐる考えてたら、ExcelVBA, BASICとの対比で気づいた点がある。言語仕様とそれに対する周囲の反応、歴史、使われ方。ともに良くPHPと似ている。いずれも初心者に学習しやすく、初心者でもすぐ動くものが作れて、手早く、出現以降急速に拡散し、広まり、デメリットが認知されつつも長く使われる言語である。もちろん学習しやすいか否かを置いておけばPerlも例外ではない。いずれもある種のムーブメントを起こし、ITに大きな影響を与えている。

言葉は悪いが、いずれもゴキちゃんのようにしぶとく、進化し続け、生き延びている。

違うのは、PHPはWebアプリケーションを作る為に特化している事だ。PerlでもCGIは作れるが。

そこが分水嶺になっている。顧客に対する価値提供という観点ではExcelVBA/BASIC/PHPともに素晴らしい性能を有している。また動作環境も幅広い。デプロイが容易だ。Webアプリという視点ではASPもあるが、気軽に安いレンタルサーバーを借りられて動かせるのはPHPかPerlだろう。

しかしPHPはWebアプリケーションとして「身元不明の第三者」に公開される。ExceVBA/BASICアプリは企業内で完結する(外に流出したらそれこそ大事件)ため、初学者が作り込んでしまったあやうい所も影響範囲が限定される。一方PHPは外部公開という特性上、初学者があやうい所を作り込んでしまう場合の影響範囲が非常に大きくなる。

いわば、ExcelVBA/Basicアプリでは隠れていたデメリット特性が、PHPの性質から思いっきり表に出てしまった。

これが、PHPが広く使われているにもかかわらず相変わらずいぢめられている事の一因ではなかろうか?

うーん、もうちょい考察が必要。PerlCGIとの対比も必要だろう。

ああ、電車の時間が・・・ Σ(゚д゚lll)

問題は「初心者に作らせて良い言語ではない」にあるのではなく、・・・ああ、もう!電車の時間がマジデヤバイ!!

2008-01-30追記:何だか一日たつとやっぱりそれなりに釣られているようで、小飼氏のBlogも、まつもと氏のBlogにもたくさんのPHPerが釣られている。

うーん、そもそものきっかけとなった

http://mindblind.net/2008/01/24/attacking-php/

への言及が無くて、みんな小飼氏とかまつもと氏の言動にばっかり釣られるのは、やはり国内影響力が半端じゃ無いと言うことか。

私自身としては、↑に書いたことが本筋っぽく思えるので、むしろアンカテの人の方に全面賛同する。

でも、「DBをなめるな」と「Webアプリケーションをなめるな」には重要な違いがある。DBをなめて困るのはなめた本人だけど、WEBをなめて困るのは本人だけではない。

我々は公共性の進化に見あった速度で進化しているか - アンカテ

同意。ここが、違うのだ。やっぱり歴史を振り返ることが出来る人は違う。

実際ExcelVBAが蔓延したばっかりに、本来であればきちんとVBなりVCなりで設計・実装していないといけないような代物なのに、Access+ExcelVBAで恐るべき力業を発揮し、それが為に後々・・・これがくせ者で、モノによっては10年前の代物とかが平気で出てくるのだ。で、後になって別の会社か同じ会社でも事情と歴史を全く知らぬ人間がメンテで泣く、と。

いや、実際泣かされた。

まぁ10年前の代物が出てくることそれ自体は悪くないのだ。むしろ、10年にわたり使い続けられる事はそれだけユーザーが満足しているのだから、むしろ凄い事である。まぁこの辺りは語り尽くされているのでこの辺で。

翻って、これが「第三者に対して公開される」Webでやるとどうなるか。アンカテの指摘通り、企業内で完結していた問題が公にさらされてしまう。このリスクこそが最大の問題点であり、言語機能云々とは別問題としてそこにある。この点について言えばPerlだろうがPHPだろうがRubyだろうがPythonだろうが同列。

落ちがついていないけど、多分、こちらが問題だ。他はまぁ、個々人の好みになっていくと思う。自分自身はPHPの他にJava/Perl/Cとかやっているため、PHPマンセーではない。ケースバイケースで最適解は異なるのだから、只のツールである。PHPでやりたくてもJavaでやらざるを得ない場面もあったし、PHPで作りたかったけどシステム系の関数の実装が不十分で結果としてPerlを使ったこともある。

という感じ。

それにしても、こうして思い返すとつくづく・・・会社の人間向けに書いたPHP入門。

大人の事情により、本連載ではPHPの入り口をWebアプリではなく、コマンドラインから起動する普通のスクリプト言語にしました。

HTTPやApacheなどの余計な些事に囚われず、単純なコードサンプルでPHPの基礎体力を付けましょう。

no title

コマンドラインからのCUIツールとして始めたのは、あながち間違いではなかった、と思う。