PHPは何故こんなに叩かれながら、こんなに使われるのか?

投稿者: | 2008年3月4日

PHPは定期的に叩かれるそうですが、今回の騒ぎの発端はどうやら、Ruby開発者のまともと氏のブログみたいですね。

PHPがいかに駄目な言語か

彼はPHPを「おかしなコードを書くことを助長する言語」 と考えているようですが、具体的にどの辺がそうなのか、彼の記事からはわかりませんでした。

次の記事でも安全なWebアプリのために言語ができること、としてリストアップされてるもののうち、どれをPerlやRubyがクリアしていて、どれをPHPがクリアしていないのかは書いていません。で、最後に

htmlspecialchars($_GET['text']);

とか平気でやっちゃうような環境で安全なコードが書けるはずが無い

って?なんじゃそりゃ。そんな捨て台詞で終わってしまったら、「感情的にPHPを貶している」と取られても仕方が無いでしょう。ましてや(複数の人が指摘するように)Rubyの開発者である彼が言ったら「Rubyの宣伝かよ!」という反応が来るのは当然です。

例えて言うなら、東芝のHD-DVDの開発PLが「BR-Discのここがおかしい」なんて書いたら、「自社宣伝ですか?」とか「負け惜しみかよ!」と炎上するのと同じです。それに対して「そんなこといってないもんねー、ただ技術的見解を述べただけだもんねー」なんて言っても通用しないでしょ。

このように、発言者の立場で受け取られ方が違うのは当然なんですが、それが判らないとしたらプログラム言語よりまず自然言語を学ぶべきですね。

とまあ、話が脱線しましたが、本件はあのマッチョなダンコーGUY(by分裂さん)さんにも飛び火した(飛びついた?)ようです。

「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い

・・・だから学び続けやすい言語に魅力を感じる。PerlもRubyも、最近ではJavaScriptもそうだ。C/C++とLisp/Schemeは一生もの の師という感じがする。Haskellはこの両方の師の薫陶を受けた「若い師」で、いろいろなことを学び直させてもらっている。しかし、PHPには「教 官」までしか感じない。

ああー、何だか哲学や〇×道みたいになってきましたね。「一生ものの師」ですか・・・まあこのあたりが我々のようにプログラムを道具として割り切る人間との違いなんでしょうね。

道具とはすなわち手段なんです、つまり目的は別にある。プログラムを組んでナイスなWEBサイトを作りたい、とか、プログラム(ROM)を組みこんでクルマを気持ちよく走らせたい、とか、会社の受発注業務を楽にかつ確実にこなしたいとか。なので、道具自体には特にこだわりが無く、簡単に使えればそれでいい(逆にややこしいのは勘弁)と思ってます。

PHPの良さは、何といってもWEBサイトで多くの人がやりたいなと思うことが、簡単にできるようになっている点でしょう。例えばフォームからメールを送りたいとか、DBにユーザ情報を蓄積したいとか、ファイルをアップロードしたいとか、別に生粋のプログラマじゃなくても思うはず。PHPではそうした機能が予めビルトインされているので、面倒な手続き抜きにできます。

ところが、まつもと氏あたりはその辺が気に入らないみたいですね。セキュリティ上の問題を挙げていますが、根底にはもっと根深いものがあるような気がします。オタクな人たちはプログラミングに人生をかけており、言語への愛や信仰心を語る。なので、そういったプログラム道の精神を理解しない初心者が、適当なコードを書いて公開するのが許せないのではないでしょうか。「お前ら試合なんて10年早い、素振り千回やって来い!」みたいな。言い換えると、プログラム自体が自己目的化してしまっているのではないかと。

よって、信者ではない普通の人にとっては、そのあたりが「キモイ」「ウザイ」んだと思います。例えば何処かのQ&Aで「〇〇がしたい」と方法を聞いたとしても、「その聞き方がなっとらん」とか、基幹技術について長々と講釈するとか、そういう傾向ってあるんじゃないでしょうか?

その点、PHPのコミュニティーでは、こちらの説明が拙くても、やりたいことやその人のレベルをある程度察知して、大体のアドバイスをしてくれる人が多い、というのが僕の最初の印象でした。勿論、別の場所あるいは時代によってはそうではないかも知れません。ただ、PHPを使う人は(プログラム経験の多少に関わらず)おおよそ道具に対してはドライで、目的から入っている人が多いのではないか、と分析したりしています。

もっと言えば、PHPの開発者(名前は忘れました)自体が、「便利だからこんなの作ってみたよ」って軽い乗りだったのではないかと想像します。「プログラム言語とはかくあるべし」とか「俺の超クールでいけてる言語で世界を変えるんだ!」などと大げさな意気込みは多分無かったでしょう。それゆえに言語として見ると弱点だらけで哲学も無い、適当さが目立つものかも知れませんね。

ある意味、PHPがプログラム道の師匠や求道者から「クソ言語」と叩かれている間は、堅気の人間には親しみやすい言語であってくれるような気がします。

PHPは何故こんなに叩かれながら、こんなに使われるのか?」への7件のフィードバック

  1. いくずく

    「PHPはいかに駄目な言語か」リンク先読んでみました。
    PHPは、よく知りませんが、これを読んでいるとbasicや初期フォートランをなんとなく思い出してしまいました。

    プログラムの一般論として考えると、言ってることはある程度、共感できますね。

    確かに、文法上、悪いプログラムを誘発してしまうプログラム言語というものはあります。Javaなどはその辺をよく考えて作られた言語で、最初にぱっと作れませんが、これで書くと文法上、そう変なプログラムにならないし、しらずしらずの内に構造化、オブジェクト化の考えが身についていくと思います。

    エンドプログラマーでは、己の才能と責任で乗り切れるので、少々悪いプログラムになっても、結果として正常に動作するプログラムがかければ問題ないわけですが、ある程度以上の複雑なプログラムまたは、多人数でのプロジェクト開発では少々問題がでてきます。

    たとえば、システム上流設計者側として考えると、多人数のプロジェクト開発を管理する場合、エンドプログラマーのスキルが低くても、問題がないようにするのが重要です。このためには上流設計で、切り分けして、機能ごとにカプセル化してしまえば、下流での品質ばらつきの抑制やバグチェックが簡単になります。こういう場合にはやはり下流で下手なことのできない、かっちりした言語のほうがあっています。

    もうひとつは教育の問題ですね。僕も今まで、学生や研修生などのプログラムの講義・演習を担当したことがありますが、プログラムスキルのばらつきは個人ごとに大きいなというのが感想です。
    よくない人の場合、やはり、プログラムの大枠づくりや関数・変数構造の作り方などに問題がある人が多くて、変なクセがついている場合があります。こうなると、巨大プロジェクトをつくる場合の上流プログラム設計にはあまり向いてなくて、後でかなり苦労している人が大半です。
    やはり、最初にある程度のプログラム開発の方法論を把握しておいたほうが後々は困らないかなと思います。

    返信
  2. 管理人タイチ

    その、悪いプログラムを誘発しやすい言語、というモノが良くわからないんですよね。
    先ず「悪い」というのが、汚いとか読みにくいという意味なのか、関数や変数の定義の仕方が屈折しているという意味なのかが一点。そして、そのような悪い書き方を言語側が許す/許さないというのは、一体どういうことなのか?オブジェクト化してしまえば、どんな言語でも勝手な書き方はできないと思うのですが。

    まあ何にせよ、自己流表現が大プロジェクトの妨げになる、という事は理解しているつもりです。ただ、僕が言いたかったのは「PHPを使う人全員がSEを目指している訳でも、将来巨大システムを開発したいと考えている訳でもはない」ということです。例えば、WEBデザイナーが単にメールフォームから実際のメール送信をしたいだけ、というケースはありえます。であれば、汚かろうが何しようがとにかく動けばよい(セキュリティー上問題がない事が前提ですが)。よって、そういう使い方やそれに適したプログラム言語があっても良いのではないかと考えます。

    しかし、まつもと氏はそういうのは許されないと「PHPしか使ったことがない初心者がWEBアプリを作って公開するな」と言ってる訳です。それは無いんじゃないか、というのが僕の意見です。

    返信
  3. いくずく

    ちょっと、書き方舌足らずでしたが、前のコメでも書いたように、僕はPHPの簡単なサーバープログラムにオブジェクト指向を強制するのは懐疑的です。
    それを前提に、あくまでも、プログラムの一般論として考えるとある程度共感できるってことです。まつもと氏のはいいすぎだと思います。

    僕自身は、簡単なプログラムを書く場合は、ベーシックを好んで使ったりもしますし、TPOに合わせて言語と書き方は選んでもよいとは思います。ただ、教育としてはある程度、オブジェクト指向は学んでおいたほうがよいとは思います。

    悪いプログラムを誘発する要因は色々ありますが、もっともよく見られるのは自由度がたかすぎる点でしょうね。PHPは知らないのでbasicとかで例をあげると、変数宣言の自由さ、処理ライン変更の自由さなどですね。
    変数宣言の自由さは、まずデバッグが大変になります。
    また、オブジェクト指向の秘匿性カプセル化をくずしてしまう場合がありますし、グローバル変数を多用するとかもまずいですね。わかって使い分けてればいいですが。gotoなどで簡単に処理ラインを飛び越せるので構造化プログラムからはなれやすいなどです。
    大体、いいといわれる言語ほど文法の制約が強くなっているといったらいいでしょうか。だから、ちょっとしたプログラムをつくるときには、面倒になります。ただ、教育としては、この制約の強いプログラム言語を一度習得しておいたほうがよいと思います。
    その思想は、PHPなどの簡易といわれる言語を使う場合でも、間違いなく役にたつとおもいますよ。

    返信
  4. 管理人タイチ

    そういう話ならその通りだと思いますよ。ちなみに、PHPで中規模以上のシステム開発をしたい場合は、フレームワークに行ってしまうってのが最近の流れのようですね。とりあえず「設定」さえすれば結果を享受できると。CakePHPというFWが親切で判りやすいらしいので、僕も試そうと思っています。

    変数宣言については、そういえばPHPには何も制約がないですね。というか、制約とは具体的にどんなものかが良くわからない(^^;そういう意味で、制約の強い言語を学んでおいた方が良いって話なんでしょうね。

    グローバル変数は、$_SESSION[],$_COOKIE[],$_SERVER[]などが予め定義されていますが、それ以外に自分で定義する必要性を感じた事はないですね。確かにグローバル変数はセキュリティー上も良くないですしね。

    学生とかに教えていて、レベルがまちまちって言うのは、こうした知識や経験のほかにセンスの差ってあるんですかね?ちなみに僕は、細かく変数宣言をしながら、代入を繰り返すのがあまりすきじゃないんですよ。「お前どっから来てん」みたいな(^^

    返信
  5. いくずく

    レベルがまちまちは、ある意味センスの差がでているように感じますね。もっとも、背景にはプログラム構築方法論の理解不足があるように思います。知識としてはわかっていても、とりあえず、簡単なプログラムではさほど問題にはならないため、あまり気にしない習慣が身に付くのですね。しかし、ある程度以上の複雑さになると突然破綻してしまうことが多いです。たとえプログラムできてもデバッグに非常に手間がかかるとか。なんか感想としては、メタボリック症候群の自覚症状と治療に似た感覚がありますね。(~_~;)

    その他、Cの場合では、ある一定の概念が理解できないって人も結構いますね。特のポインター系が鬼門ですね。ポインターによる多次元配列の概念とか、そこで落ちこぼれる人がかならず何人かいます。

    返信
  6. 管理人タイチ

    メタボリック症候群ですか、耳が痛いですね(^^;体型に出ている、ズボンがきつい、という意味では自覚症状はあるんですけどね。

    それはともかく、ポインターの概念はPHPでは普段意識することないですね。ファイルの読み書きで初めて耳にして、最初は「なんのこっちゃ」でした。今でもよく判りませんが、そういえばCではポインタの理解が鬼門だというのは聞いたことがあります。

    あと、僕は破綻するほど複雑なプログラムは書いていないんだと思いますね。そういうのって多分学術系のプログラムで問題になるのでは?

    返信
  7. 管理人タイチ

    当コメント欄では、スパゲティーコードを誘発するプログラムの話になっていますが、元々まつもと氏のPHP批判はセキュリティー上の問題に関してでした。

    これについて、PHP関連の著書で有名な大垣氏が記事をかいています。
    http://blog.ohgaki.net/lamp-4

    結論から言えば、「言語を替える事はセキュリティ問題の解決策にはなりません。」

    古いバージョンのPHPで書かれたコードに脆弱性があると言うが、この点ではPerlやRubyにも同じようなケースは良くあるとの事。つまり言語の問題ではなくバージョンの問題であると。

    これで、まつもと氏のPHP批判がどうも具体性に欠ける理由が判りました。だって批判する理由が無いのだから。

    返信

管理人タイチ へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です