«前の日記(2008-01-28) 最新 次の日記(2008-01-30)» 編集

Matzにっき


2008-01-29 [長年日記]

_ [言語] PHP使いの反論

一般的に思われているのとは異なり、PHPはとても愛されている言語だ、と思う。

なにしろ、私がたまにPHPの良くない点を指摘すると、 たちまちホットエントリになる。またコメント欄にたくさんの反論をいただく。 びっくりだ。

それだけPHPという言語を愛している人やら、 PHPという言語の欠点を公に指摘されると自分自身がけなされたと感じる人が多い、 ということなのだろう。それはそれですばらしい。

しかし、一方で「指摘はもっともだ」というような声も散見される。 言語としての評価は分かれるということなのだろうか。

しかし、PHP使いの反論は、その多くがどうにも噛み合わない。 今後のためにも*1ちょっと分析して記録しておこうと思う。

たぶん、ここのPHPをHSPとかに置き換えても同じことが成立すると思う。

書いてないことへの反論・思いこみ

これが一番多い。たとえば、

  • どの言語でも安全でないプログラムは書ける
  • 「PHPを選ぶ初心者バーカ」とはなにごとか
  • Rubyなら初心者でも安心なのか
  • PHPを陥れるのはRubyの宣伝のため

えーと、幻を読むのは止めていただきたい。そんなこと書いてないじゃん。

どうやら、私はRubyという言語設計者なので 「他の言語を馬鹿にし、自分の言語を宣伝したくてうずうずしてる」という 脳内イメージが形成されているらしい。

が、もう15年も付き合っていて、必要なだけは十分に世間に知れ渡っているRubyを 今さら宣伝しても、私にはなんにもうれしくない。

「人は自分が持つであろう意図と動機を他人に見いだすのだ」と以前聞いたことがある。 とすると、これらの批判をする人たちはもし「自分の言語」を持ったとしたら 全力で他の言語をけなし、自分の言語を持ち上げるのだろうか。 というか、PHPが彼らにとっての「自分の言語」なのか、もしかして。やれやれ。

私は言語オタクとして、さまざまな言語の良いと思うところは良い、悪いところは悪いという 印象を自分の日記に記録する。公開しているんで読みたい人は読み、参考にできると思う人は 参考にする、それで良いと思う。

私がPHPを「イケてない言語」と発言しても、 たかがひとりのプログラマにそう言われただけじゃないか。 それでPHPユーザーが負け犬認定されるわけでもなし、 「そういうところもあるよね」と笑い飛ばせば良いと思う。

そうじゃない?

他の言語について知ってる?

言語を比較するためには他の言語についてのある程度の知識が必要だろう。 Perlを知らずしてスクリプト言語を深く語るのは難しいし、 Lispの知識なくRubyを深く語ることは難しい。 Pythonは? うーん、PythonにはPythonの知識だよね(笑)

たとえばPHPしか知らないとしたら、PHPの欠点を指摘されると自分のやり方全体が 否定されたと感じるのではないだろうか。

なんとなく、他の言語も知っているが諸般の事情でPHPを使う、 という人は「批判はわかる」と言っているような気がする。 たとえば「Rauru Blog >> 悪いのはPHP自体じゃないかもしれないけど」とか。例に出して悪いけど。

もちろん、セキュリティホール作りこむ人はどの言語でも作りこむ、ってのは真実ぢゃろう。しかし何と言うかだな、PHP には、そういう人を呼び寄せる(あるいは居付かせる)何かがある、んぢゃなかろうかね。 似たような話として、perl で use strict しない 文化圏 にもそういう何かがあるという気はしてる。

弾さんの 「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い でも指摘されているように 私のPHP批判に怒っている人はあまり外のことを知らないで怒っているような気がするな。

もちろん例外はあるだろうけど。

ずれた正論ですり替える

たとえば「どの言語でも安全でないプログラムは書ける」とかは正論だ。誰も否定できない。 正しいことを断言すると気分は良いだろう。また正論で反論するってことは 相手を間違い認定するのと同義なので、ますます「勝った」感が強くなる。

でも、ちょっと待って? 反論している相手(この場合は私)は 本当にそんな正論で論破されるようなことを主張しているの?

この場合だと、たとえば「PHPでは安全なプログラムは書けないが、Rubyなら書ける」とか 私が主張していたらこの反論は有効だ。でも、私はそんなこと言ってないよね。

私が書いたのは「Webアプリケーションをちゃんと書くのは難しいから、 Webアプリ向け言語に初心者に優しいという宣伝文句を使うのは良くない」ということである。 ここについては、別にRubyがいいとかなんにも書いてないよね。 また、「どの言語でも安全でないプログラムが書ける」ということと対立もしない。

ついでに言うと「どの言語でも安全でないプログラムが書ける」ということと、 「どの言語でも安全なプログラムを書くのは同じくらい難しい」とは まったく違う。でも、このふたつが同じことのような印象を与えがちだよね。 これって詭弁だと思う。

ここからはRubyの宣伝にもなっちゃうんでエントリを換えよう。

*1  今後もPHPの欠点を指摘するつもりなのか

_ [言語] 安全なWebアプリのために言語ができること

最初に繰り返して明言しておくが、 どんな言語だろうとなにも考えないで完全に安全なWebアプリケーションは書けない。 が、脆弱性を作りにくい言語(およびフレームワーク)機能というのはありえる。 たとえば

  • 安全なメモリ管理

    Cのような生のメモリ領域を使い、実行時の範囲チェックを行わない言語では 容易にバッファオーバーフローが起きる。RubyやPHPのように言語自体がメモリ管理を 行う場合(バグがない限り)安全。

  • パラメタ処理などの抽象化

    ミスによる脆弱性を起こしがちな、 環境変数や標準入力からデータを切り出してくる処理やクッキー処理を手動で行わない。

  • テンプレートシステムによる出力

    インジェクションなどの原因となる生の文字列操作でHTMLを構築することをできるだけ避ける。

  • ORマッパーによるデータベースアクセス

    インジェクションの原因となる生の文字列操作でSQLを構築することを避ける。

  • データフロー追跡

    RubyやPerlでは外部から入力された文字列にtaint(汚染)と呼ばれるマークがつく。 taintされた文字列から加工された文字列にもtaintがつく。 これをチェックすることで外部からの入力をチェック(サニタイズ)しないまま 危険な操作(ファイル名にする、systemを呼び出す、HTML/SQLに埋めこむ、など)を 禁止することができる。

  • 落とし穴の多寡

    たとえば、バイナリセーフ関数かそうじゃないかの違いのような 「落とし穴」に対して開発者が無関心かどうかは、最終的なプログラムの安全性に 影響する。言語ユーザが気をつけなくちゃいけないことも増えるしね。

もちろん、PHPでも各種フレームワークなどを最大限活用することで、 上のような機能を揃えることもできるだろう。そもそも「できない」って言ってるわけじゃない。 でも、CGI向け各種機能がビルトインされていて

htmlspecialchars($_GET['text']);

とかを普通にやっちゃう(しかも、それがゆえに初心者に優しいとかされてる)環境で 安全なソフトウェアを書くのは、他の言語に比べて大変困難であろう。

なんか間違ってる?

本日のツッコミ(全79件) [ツッコミを入れる]
_ emo (2008-01-30 02:48)

なぜPHPを使う人(?)たちはここまで反論するんだろうか。<br>一人の技術者の1見解でしかない筈なのに。<br>この反論する姿勢こそ、言語に対する学習姿勢が現れているんじゃないかと感じました。<br>言語文化の差なのかも知れません。

_ tori (2008-01-30 07:37)

速攻でつくコメントがまたユーザ攻撃ですか。。<br>「ふりだしにもどる」<br>わざわざエントリ改めて、噛んでふくめるように<br>説明したmatz氏もズッコケてることでしょー

_   (2008-01-30 07:44)

http://b.hatena.ne.jp/entry/http://neta.ywcafe.net/000827.html<br><br>なぜRubyを使う人(?)たちはここまで反論するんだろうか。<br>一人の技術者の1見解でしかない筈なのに。<br>この反論する姿勢こそ、多言語に対する攻撃姿勢が現れているんじゃないかと感じました。<br>言語文化の差なのかも知れません。

_ smats (2008-01-30 09:12)

> たとえばPHPしか知らないとしたら、PHPの欠点を指摘されると自分のやり方全体が否定されたと感じるのではないだろうか。<br><br>これはかなり核心をついていそう。

_ とおりすがり (2008-01-30 11:08)

自分は言語は楽ができればいい派なのですが(PHP の "==" と "===" には泣かされました(笑))、たぶん PHP は Web アプリ界の BASIC なのですよね?私はそのように位置付けているのですが…、だから初心者向けという看板やグローバルありとかは、自分の中で「そういうポジションだよね〜」と合点がいってます。Perl4 なんかもそんな気持ちでした。<br>過去 CUI なプログラミング時代にはこのような話はなかったのでしょうか?「BASIC vs.○○」みたいな・・・。<br>あと、BASIC つながりで Visual BASIC などは言語としては(世間一般またはまつもとさんは)どのような評価なのでしょう。<br>ちょっと興味があります。(私は使ったことがないのですけど)

_ 昨日の通りすがり (2008-01-30 11:43)

「『PHP は初心者に優しい』というキーワードのために、プログラマに必要とされる作法が軽視されがちだ」ということが、意図するところで宜しいのでしょうか?<br><br>本来ならば、<br> ●想定している入力値は何か?<br> ●入力される変数の値はどうあるべきなのか?<br> ●変数はどういう経路で入力されているのか?<br> ●出力される正しい値(型や安全性)は何か?<br> ●汚染の有無を確認する必要性は何か?<br>を考える必要がある。<br>しかし、「PHP のプログラミング初心者」は実際に入力される値の中身や入出力の過程を意識せずに、htmlspecialchars などの関数を通過させれば、安易に安全な値になると考えがちということを指摘したいのでしょうか?<br><br>上記の趣旨ならば、合点がいきます。<br>このことは昔から指摘されていますし、指摘しない初心者向けの解説本を多く見かけます。<br>だからこそ、PHP は言語仕様上、入出力の値が汚染されているか確認できる(警告する)仕様を備えるべきではないかということなのでしょうか?

_ a (2008-01-30 13:13)

だから2ちゃんねらにエサあげないでくださいってばw<br><br>コピペ厨がきてんのよ。PHPスレに。<br><br>Webアプリ一般の話をしたいのなら、そこにPHP(特定の言語)を書かないで下さい。<br><br>PHPの話をしておいて、同じエントリでウェブアプリ一般の話をすれば、人はどう思うかわかるでしょ?

_ oo (2008-01-30 13:21)

taintマークの機能はまだまだ発展途上だと思っています。例えば、html出力に使う場合の「サニタイズ」と、osコマンド発行に使う場合の「サニタイズ」は異なる処理ですが、それらをそれぞれしたかどうか区別する手段がありません。<br><br>入力値の「サニタイズ」でなく、データを使う場所(html出力時/sql発行時/ファイルオープン時/osコマンド発行時などなど)で、それぞれ適切にクォートすれば必要十分であり、データフロー追跡の必要もないという考え方(by高木浩光さん)はいかがでしょうか?

_ 通りすがりマン (2008-01-30 14:50)

まずは、まつもとさんが言い訳にする「自分はただの一開発者」という認識を改めてください。<br>あなたは世界中の開発者が使用している「言語」の設計者です。<br>ましてや滅多にない日本発のものともなれば、あなたはもう開発界の神様仏様なワケです。<br>そんな人がPHPの欠点を書けば、影響はとてつもなく大きいのです。<br><br>人間には能力の限界があり、全てを手に入れることは困難です。<br>だから人々は標準を求めます。<br>開発者の場合だと、どの言語が良いか迷いに迷って、一つの言語を苦労して習得するワケです。<br>まつもとさんのように技術力のある方はこの苦労は分からないかも知れませんね。<br><br>その苦労して習得した技術を一方的にけなされるのですから、これほど惨めなことはありません。<br><br>まつもとさんが人との付き合い方をご存じの方でしたら、欠点を挙げる際には、フォローも必要なことはお分かりのはず。<br>どこかの政党とか、どこかの大統領候補者選びとか、どこかのOSみたいに、ネガティブキャンペーンは格好悪いです。<br>まつもとさんにその意志がなくても、人々はそう受け取ります。<br><br>私はRubyを使ってみたいです。<br>でも、まつもとさんの態度が横柄なので、私はRubyを使いません。

_ 通りすがり (2008-01-30 14:53)

誰も指摘してないみたいだけど、PHPの一番の強みは、公式サイトに充実したマニュアルが(不完全とは言え)整備されている事だと思います。ほぼ統一されたフォーマットでHTMLになってるので参照のし易さはMSDNに匹敵するんじゃないでしょうか。フレームワーク以前の使い方ではチュートリアル+リファレンスの形で1箇所にまとまっているため、解説書や解説サイトを頼らずとも本家のマニュアルだけで最低限必要な情報がそろっていました。加えて、拡張パッケージのPEARとそのマニュアル。言語自体のポテンシャルは低いですがwebアプリに特化してるためプロトタイピングをはじめる場合の敷居が、異常に低いんですよ。ま、言語使用がアレなのであとでいろいろと泣かされますけど・・・。

_ 通りすがり (2008-01-30 15:01)

そうそう。Cライクな文法も人気の一因かと。<br>C ライクな言語ばかり触ってると、Perl は論外として、Ruby や Python も読んでて結構疲れます。<br>Ruby は for 文なくて面食らうんですが、多分この感覚はわかんないでしょうね。Ruby 畑の人には。

_ かんた (2008-01-30 15:05)

> なんか間違ってる?<br>なぜそういう攻撃をされるのでしょうか?<br>いっそうのこと「phpは使えない言語だ!」っていってしまえばいいのに・・<br>楽天ではPHP全廃すればいいのに・・

_ ねむい (2008-01-30 16:18)

> Ruby は for 文なくて面食らうんですが、多分この感覚はわかんないでしょうね。Ruby 畑の人には。<br><br>いやいやいや。Ruby畑と言ったって、Ruby開発者はCでRubyを実装しているわけだ。<br>後発だから他の言語の実装やライブラリを参考にする。<br><br>Ruby開発陣でなくてRuby熟練者という意味?でもRubyで飯が食えるようになったのなんてせいぜいここ2,3年だよ。<br>当然、ほかの言語を経験してから来る人が大半。<br><br>Rubyをけなされても、よっぽどまとはずれでなければ黙って自分がやるべきことをやるだけ。<br>Perl方面もだいたい同じ。<br><br>ちょっとヒステリックなイナゴが多すぎないかい?<br><br><br>あと、Rubyにもfor..in..文はあるよ。三項のfor(;;)はないけど。

_ うんと (2008-01-30 16:44)

なんだかPHP書く人(あるいは怒っている人)は、PHPしか書けない(と思い込んでいる)みたいに読めるけども、<br>それってソースあるの?<br>俺俺ソースで書きこんでません?<br>実は、RubyもPHP書けて、他にもC++やJava等も書けて、利点も欠点も知っているからこそ、PHPの批判ばかりするので怒っている人の方が多いんじゃないでしょうか。<br><br>もう指摘されているけども、<br>>PHPを陥れるのはRubyの宣伝のため<br>例えそんなことを言うつもりはなくても、あの煽りまくっている文章を、他の言語作者のボスが書いたなら、そう読み取られて当然ですよ。<br>HD-DVDの欠点を列挙するソ●ー社員を見たら、誰でも宣伝だと思うでしょう。

_ 通りすがり (2008-01-30 17:36)

影響力の大きい人が発言してるので怒ってます。

_ 11時8分のとおりすがり (2008-01-30 18:09)

ありゃ―すごいことになってますね。私だったら泣いちゃう…。<br>私には、まつもとさんの一連の日記が Ruby の宣伝には読めませんでしたよ。「俺が作った Ruby なら○○だぜっ!」とか書いてなかったですから。<br>「PHPってこうだよねぇ(だから時としてこまったチャンだよねぇ、もしくはこまったチャンプログラムができやすいよねぇ)」と読みとりました。<br><br>あ、ほんとに書きたかったのは「明日ビッグサイトに行きます、お話、楽しみにしてます。」でした(笑)。人気っぽいから入れるか心配。

_ じょりちょこ (2008-01-30 18:21)

PHPがコンピュータサイエンスの成果を全然活かしていないってのは事実です。そこはPHPファンでも反論できないよね。後発の言語なのに、先人の失敗を繰り返すってのはどうなのよ?って気持ちはある程度プログラミング言語理論をかじればすぐに感じることだと思う。Javaは、積極的に新規なフィーチャーを排除してデザインされているわけだけど、PHPはそういう意図すらないのではないか。言語を複雑にしないように、しかし、便利機能はなるべく搭載するようにしてきたのではないか。結果として、一貫性がなく、バグが検出しにくく、脆弱性を作りこみやすく、しかし、それでも「とりあえず動くものを作りやすい」という特徴によって生産性が高いと思われてきたのではないか。<br>個人的にも、いま、仕事で下請けの作ったPHPのアプリケーションのソースレビューをしているんだけど、まあ、ひどいもんだよ。PHPしか知らない奴がいかにも書きそうなコードといえば良いだろうか。<br>「C++は仕様が複雑すぎるために人を挫折させる」と言います。しかし、その仕様は必要があって生まれたものであって、そこで雑した人は「自分には理解できていない世界がある」ということを自覚すべきだし、自覚できると思う。<br>PHPは正直なところ、そういう挫折感を人に与えないようにすることに力点が置かれ過ぎていると思う。PHPからプログラミングに入った人は、PHPでは味あわなかった挫折を他の言語で味わった結果、自分はPHPに向いている、この言語には向いていない、と感じるのではないか。そういう人はPHPが責められると、自分が責められていると感じるのではないかな。そして、さらに悪いことに、他の言語で味わった挫折感が「自分が理解していない世界がある」という発見につながっていかない。だから、コンピュータサイエンスの発見してきたことをPHPプログラマは知らないでいることが多いんだ。<br>StrutsしかわからないJava使いも同じだけどね。アンチョコの引き写しでしかプログラミングできないから、ひとたび新しい課題を与えられると、何も考えずに見よう見まねで試行錯誤して、自分でも何を書いているのかわからないコードを山ほど生み出してしまう。なんとなく書いて、動作確認し、うまく動かないとわかるとif文を追加し、とやってしまう。<br>そういう人は、本当に邪魔だから、勉強するか、プログラミングを辞めるかどっちかにしてほしい。

_ 金銀Perl (2008-01-30 19:00)

PHPが好きで好きで反論したくてしょうがないなら、PHPで安全なWebアプリを書くための方法論をまとめてみたら?とは思うけど。<br>ずれた反論が多いよね。

_   (2008-01-30 19:10)

>それだけPHPという言語を愛している人やら、 PHPという言語の欠点を公に指摘されると自分自身がけなされたと感じる人が多い、ということなのだろう。それはそれですばらしい。<br>><br>>しかし、一方で「指摘はもっともだ」というような声も散見される。言語としての評価は分かれるということなのだろうか。<br>><br>>しかし、PHP使いの反論は、その多くがどうにも噛み合わない。今後のためにも*1ちょっと分析して記録しておこうと思う。<br><br>PHP使いの反論?そんなの自称した人っていましたっけ?<br>勝手に話を作らないでいただきたいのですが。

_   (2008-01-30 19:14)

ちなみに私はPHPもRubyも使えませんよ。JavaとC++とSchemeくらいしかまともに使えません。<br>口を出したのは、言っている事がおかしいと思ったからであって、PHPが好きだからではありません。

_ naknak (2008-01-30 19:17)

PHPを学んだことが以前あったのですが、学ぶにつれて何となく感じたPHPという言語への不安感は、こういうことだったのかと、まつもとさんの日記を読んで分かりました。<br>まつもとさん、どうもありがとうございました。

_ popn.ja (2008-01-30 20:25)

うーん、ご自分の発言の影響を過小評価されているのではないでしょうか。いちプログラマ以上の存在とみなしている人が多いゆえ、反響(反応)も大きかったのだと思います。

_ atushi (2008-01-30 21:23)

> PHP使いの反論?そんなの自称した人っていましたっけ?<br>> 勝手に話を作らないでいただきたいのですが。<br><br>コメントに関して言えば、いなかったと思う。(トラックバックでは数人いたように思うけども。)でも反論した人は「phpを使ってる人」だと思ったのは無理からぬことだと思うし、そこは議論の中心ではない。そんな言葉尻をとらえて批判するのはあまり良いこととは思えない。あなたが怒っているのは理解できるけど。 <br><br>せっかくの機会なのだし、識者の方にはもっと技術的内容に踏み込んだ議論をして頂きたい。残念ながら私はPHPを良く知らないので、議論はできないけど。

_ manamanmana (2008-01-30 21:40)

私もPHPメインの会社にいて、そこのある事業部でPythonで一からサービスをつい先日立ち上げたんですが、Pythonでやるってかなり内部から批判がありましたね。大体誰が知ってるんだっていう所で批判されますけど、Pythonも習得は早いんで、PHPしか知らなかった人に教えてもすぐに戦力になりましたよ。<br><br>あと、スーツの別事業部長が、「だいたい○○(俺のこと)はわかってないんだ、PHPの需要がどれくらいあるかを。YahooもPHP使ってる時代だぜ。」とか自信満々に言われたりして。今普及しきってるやつに全力かけてどうするのって。。<br><br>やはり「外の世界」を見てるかどうかって大きいと思う。<br>言語にしてもそうだし、市場としてもそうだし。Webプログラミングしか知らないという人はHTMLが無いとプログラム作れない人もいますよ。そのワリにはPEARで何ができるかだけはしっていて、使ったこともないのに、これってできるかな?っていうと、意気満々で「楽勝です」って言ったりする。それはPEARに機能があったなって記憶をもって発言してる。そういう人ってプログラム部品をくっつけあうことだけをプログラミングと思っていて、「ある値を返す関数を返す関数」とか言ってもポカンとされることが多いです。<br><br>僕自身も、ほかの言語に傾倒しながら仕方なくPHPを使う人の一人ですね。

_ 機械伯爵 (2008-01-30 21:47)

……Pythonにまで飛び火させないで、お願い(泣)

_ 元職業プログラマ (2008-01-30 22:51)

久々にお邪魔したら、皆さん、熱気のあるディベートを闘われていて、うれしい限りです。<br>なんといっても、Ruby vs PHP・HSP連合(?)の闘いが一番見ごたえがありますね。<br>……Haskellにまで飛び火させますが、HaskellはPHPやHSPの対極にある言語だと思っています。<br>http://ja.wikipedia.org/wiki/Haskell<br>どんな人でも、HaskellやRuby、C++等を習得すると、PHPで書こうが、HSPで書こうが、今より良いプログラムを書く事が出来ると思いますが、いかがでしょうか?

_ ざっと読んでみたruby使い (2008-01-30 23:17)

私はオレ言語が世界一、ほかの言語はこういうところが駄目だからこの言語を作ったんだ、と思っていない人の開発した言語なんか使う気になれないので、<br>コメント欄で影響が大きすぎるとかそういう意見を言ってる人が理解できません。<br>言語作者が自らの言語の優位性を語ることは悪いことではないと思います。<br>それに、耳が痛い意見で正論だと思うなら、ソースをフォークさせるなりなんなりして修正したPHPを出せばいいのではないでしょうか?<br>その上で、新しくなったPHPはrubyよりずっとwebアプリが簡単に、安全に書ける。その点rubyは時代遅れで....<br>となればすべてのPHP使用者が幸せになれると思いますし、PHPのその偉大な成果はほかの言語に波及していくことになると思います。

_ LM (2008-01-30 23:18)

穿った見方だけど、逆に、初心者や欠点の多いPHPだからこそ、コンサルやチューニングのカモにしてお金や名誉を得てる人たちも多そうな気がします。<br><br>Matzさんの日記をポジショントークと受け取って反論している人たちの中には、意識的にしろ、無意識にしろ隠れポジショントークしてる人もいるのでは?<br>影響力の大きい人にネガキャンはられると、自分たちの利益が目減りしてしまうことに繋がるので。<br><br>もっとも、仮に、どちらもポジショントークであるとするならば、その時点でもう影響力の大小とか関係なく、市場原理として対等だと思うので、徹底的に議論してもらったほうが、目的のために言語を選んだり使ったりする側のユーザーとしては有り難いかもしれません。

_ popn.ja (2008-01-30 23:24)

>どんな人でも、HaskellやRuby、C++等を習得すると、(略)今より良いプログラムを書く事が出来ると思いますが、いかがでしょうか?<br>習得の度合いによるとは思いますが、マシン語(68k系)/BASIC/FORTRAN/PASCAL/C/C++/Java/PHP/Rubyなど使ってきてもだめなプログラム書きのままです。初心者は言語に依存せずに「構造化プログラミング」などを始めからきちんと身につける必要があるとおもいます。そういう意味で「初心者に優しい(作法を身につけられる)言語」は何になるのでしょうか?

_ YOUsuke (2008-01-30 23:35)

>smats氏<br>多分核心をついている。だからMatz氏はまずその恐慌状態を解除することに注力すべきだったのだと思うが、時既に遅し。正論で畳み掛けるという、恐慌状態に陥っている人に対してあまり良くない一手を打ってしまった。<br><br>まあMatz氏の日記なので何やったっていいんだけど。

_ 元職業プログラマ (2008-01-30 23:48)

_ popn.jaさん<br>私は未だ使った事はないのですが、もし私が新入社員の教育係になったら、Boost C++を使って、手取り足取り教えたいと思います。<br>http://www.boost.org/<br>その次は当然Haskellを少しばかり教えて、後は、線形代数学や記号論理学や圏論等の概要を勉強してもらいます。<br>ここまでくれば、一流プログラマに育つのは間違いないと信じています。

_ (2008-01-30 23:59)

503とか500を連発するサーバーでWebアプリの発言されても……<br>というのは冗談として。<br>実際、PHPを名指しで題材にするなら、できれば具体的に問題点の指摘と改善案の提示をした方が技術屋らしいと思うのですが。ただ単に話の枕にするためにPHPをこきおろしているのなら悪趣味ですね。<br>もし、「PHPなんてクソなんだから、Webアプリで使うべきじゃない」と本気で主張するのならば、その手間を使ってWebアプリ用のmini-Rubyを実装して提示した方が言語実装屋らしいし、また建設的で有意義だと思います。<br><br>…………Rubyのcgiクラスの設計を見たら、とてもじゃないですが(素の)RubyをWebアプリ用言語としては紹介できないですよ…………

_ 元職業プログラマ (2008-01-31 00:00)

言い忘れましたが、「構造化プログラミング」よりも先に、「オブジェクト指向」や「関数型プログラミング言語」、「関係代数」等の諸概念を教えるのが先だと思います。<br>アッセンブラを教えるのは、その後でも遅くないと思います。

_ tori (2008-01-31 00:18)

「影響が大きいから/実績があるから人をdisるのはよくない」<br><br>とか言ってるゆとりにだけは一生負ける気がしないわ。

_ きゃっと (2008-01-31 00:20)

> それだけPHPという言語を愛している人やら、 PHPという言語の欠点を公に指摘されると<br>> 自分自身がけなされたと感じる人が多い、ということなのだろう。<br>><br>残念ながら私はPHPよりはRubyの方が詳しいです。そもそもこの<br>「多くのPHP使いは、PHPという言語の欠点を公に指摘されると、自分自身がけなされたと感じる」<br>は本当なんですか?<br>ソースはありますか? あなたがそう思っているだけなのではないのですか?<br>これを「ネガティブキャンペーン」だと思ったことはありませんか?<br><br>> しかし、一方で「指摘はもっともだ」というような声も散見される。言語としての評価は分かれるということなのだろうか。<br>> <br>ここでいう「指摘」というのはいったいなんのことですか?<br>あなたは日記中やコメント中で、言っていることが右往左往していてどれを指しているのか分かりません。<br>「PHPは初心者向け」といった文言のことですか?<br>それとも「『PHPは初心者に優しい』は不適切な宣伝文句」のことですか?<br>前者はともかく、後者の賛成はあまり聞きませんが。<br><br>> しかし、PHP使いの反論は、その多くがどうにも噛み合わない。<br>あなたの言ってることにもかなり一貫性を欠く頓珍漢な内容が多いですが、それは自覚しておられますか?<br><br>> 「人は自分が持つであろう意図と動機を他人に見いだすのだ」と以前聞いたことがある。<br>> とすると、これらの批判をする人たちはもし「自分の言語」を持ったとしたら全力で他の言語をけなし、<br>> 自分の言語を持ち上げるのだろうか。<br>><br>これは自戒もした方がいいと思いますよ。<br>まあ、余計なお世話でしょうが。<br><br>> 私は言語オタクとして、さまざまな言語の良いと思うところは良い、悪いところは悪いという印象を自分の日記に記録する。<br>> 公開しているんで読みたい人は読み、参考にできると思う人は参考にする、それで良いと思う。<br>><br>「PHPの文法にはいろいろな欠点がある」で止めておけばよかったのに、<br>「PHPはダメだ(or ダメじゃないと思い込もうとしている)」とか「初心者がPHPで書いたページは害悪」<br>とまで言ってしまってますよね。あなたがこれを実践しているとは到底思えません。<br><br>> 私がPHPを「イケてない言語」と発言しても、たかがひとりのプログラマにそう言われただけじゃないか。<br>> それでPHPユーザーが負け犬認定されるわけでもなし、「そういうところもあるよね」と笑い飛ばせば良いと思う。<br>><br>あなたも「人は自分が持つであろう意図と動機を他人に見いだすのだ」なんて持ち出してまで<br>自分のことを正当化する必要は無いのでは?<br><br>> なんとなく、他の言語も知っているが諸般の事情でPHPを使う、という人は「批判はわかる」と言っているような気がする。<br>> たとえば「Rauru Blog >> 悪いのはPHP自体じゃないかもしれないけど」とか。例に出して悪いけど。<br>><br>私はPHPについてほとんど知りませんが、あなたの書いておられることがとても極端で偏っていることは分かります。<br>というかいい加減、ソースも提示せずに感想だけで<br>「PHPを擁護している人はPHPしか知らない。そうでない人はいろいろな言語を知っている」<br>みたいなレッテル張りをすることはやめませんか?<br><br>> 弾さんの 「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い<br>> でも指摘されているように私のPHP批判に怒っている人はあまり外のことを知らないで怒っているような気がするな。<br>><br>弾さんのページは「PHPは(上級者の私の目から見ると)物足りないし、ずっと使いつづけるようなものではない」<br>というのをLarryの引用やスクリプト言語の周辺事情を交えながら主張しているだけです。<br>これはこれで非常に理屈の通ったものです。<br>「初心者がPHPで書いたページは害悪」とか「PHPはダメな言語」なんてむちゃくちゃなことは言ってませんよ。<br><br>> 私が書いたのは「Webアプリケーションをちゃんと書くのは難しいから、 Webアプリ向け言語に初心者に優しいという<br>> 宣伝文句を使うのは良くない」ということである。ここについては、別にRubyがいいとかなんにも書いてないよね。<br>> また、「どの言語でも安全でないプログラムが書ける」ということと対立もしない。<br>><br>「ちゃんとやるのは難しい」というのはプログラミングに限らず、どんなことでも同じではないでしょうか?<br>また、誰でも最初は初心者なわけですし、PHPの導入の手間とRoRの導入の手間がぜんぜん違うのは事実です。<br>(昔は初心者だったが今は違う)上級者が「PHPの文法は終わっているからダメだ」といくら言っても、<br>他の言語でやるならそこにはまた別の問題が立ちふさがってくるわけですしね。<br>初心者が躓きそうな落とし穴をなるべくつぶして「初心者に優しい」と宣伝することのいったい何がいけないのでしょうか?<br><br>> htmlspecialchars($_GET['text']);<br>> とかを普通にやっちゃう(しかも、それがゆえに初心者に優しいとかされてる)環境で安全なソフトウェアを書くのは、<br>> 他の言語に比べて大変困難であろう。<br>><br>この主張はわかりました。ちゃんと気をつけないと虚弱性が生まれるということですね。<br>Ruby/Perlはtaintというマークがついているということですが、ならばPHPにもこの機能がつけば問題はすべて解決、<br>「PHPは初心者に優しい」を公言してもいいということですね?

_ popn.ja (2008-01-31 00:23)

_ 元職業プログラマさん<br>参考になりました。自己研鑽をかねて勉強してみたいと思います。<br>あと、「オブジェクト指向」とかは頭の中から飛んでいました。

_ x (2008-01-31 00:33)

虚弱性って入力ミスって事はないよね…

_ きゃっと (2008-01-31 00:39)

>>x<br>「脆弱性」の間違いでした^^

_ axv (2008-01-31 00:43)

よし、みんな<br>PHPの弱点を全部潰して、<br>Matsをギャフンと言わせるんだ!!<br><br>そしたら、RubyがPHPを追いかける様になるぞ!!

_ まつもと (2008-01-31 00:57)

それだ。待ってますから。>PHPの弱点を全部つぶす

_ (2008-01-31 01:06)

いや、待ってますじゃなくて。<br><br>せめてクソ設計のcgiクラスのやり直しを………………

_ axv (2008-01-31 01:13)

>のさんへ<br>>せめてクソ設計のcgiクラス<br>よし、担当はのさんで決定!!<br>多分この次にパッチをくれるはず。

_ じょりちょこ (2008-01-31 01:30)

PHPの弱点を全部つぶすとPHPじゃなくなると思うけど。<br>PHPってコア言語とライブラリ関数の区別が弱いところが最大の欠点だと思うのね。標準ライブラリの細かい挙動まで含めてPHPの仕様だとしか言いようがないところが。<br>PHPが「後方互換性が重視されていない」という批判を受けるとき、問題になるのはもっぱらライブラリ関数のことですよね。<br>弱点をつぶそうとしたら、コア言語とライブラリ関数の区別をしっかりつけられるようにしないといけない。逆にいえば、相応に表現力のあるコア言語を確立し、Cで書かれた外部関数とコア言語のインターフェースも確立することになる。<br>それを達成したとき、PHPのコア言語は今よりずっと表現力のあるものに仕上っていると思う。その結果、PHPの「安直さ」は後退して、「奥深さ」を秘めるようになってしまうはずだ。そのとき、もうPHPは初心者向けというくくりでは扱えなくなっていると思う。<br>ライブラリ関数に使ったことがない関数があってもあまり気にならない。でも、コア言語を十分に理解していないことは気になるはずだ。<br>PHPはコア言語が貧弱だけど、ライブラリ関数が充実している。それが初心者にとって福音なんだと思う。さらっとコア言語を習得できて、あとは関数を探せばいいだけだから。<br><br>まあ、もっともShift JISをまともに扱えないだけで、PHPは使いものにならないと思うけどな。

_ kidb (2008-01-31 01:40)

>よし、みんな<br>>PHPの弱点を全部潰して、<br>>Matsをギャフンと言わせるんだ!! <br><br>大事なのはこう思うことだよね。

_ (2008-01-31 01:47)

axvさん<br>ごめん、そこまでRubyに愛着ないんだ。昔に作った自作CMSが動く程度で十分。クソcgiも我慢して使うよ。<br>そんな時間があったら俺言語とか自作アプリに使うし。<br><br>当然matzさんのいう「脆弱性を作りにくい言語」というのは重要だけど、そもそも「Webアプリに使える言語」という前提がなければWebアプリを作成しているプログラマー(やプロジェクトのステークホルダー)の心には響かないわけで。「そんなこと言うんだったら、言語屋ならPHPよりもWebアプリに使える言語を持って来い。言語屋の仕事じゃ無いのか?」と言われるんじゃないのかな。<br>もちろん周辺のライブラリ&フレームワーク(RoRとか)に頼るというのも一つの解だけどね。だけどそれはmatzさんの仕事じゃないから、Webアプリ用言語としてPHPを扱き下ろせる仕事をしているとは言えないんじゃないかな。

_ (2008-01-31 02:02)

そういえば、じょりちょこさんとかの意見を見て思ったのですが、「初心者向けのWebアプリ用言語」ってどんなのですかね?<br>とりあえずは<br>1. 小さい核言語<br>2. あまり高度でない(簡素な)機能<br>3. 充実した安全装置<br>4. 充実したライブラリ<br> --> 高度な機能を実装できるライブラリ作者(上級者)向け機能<br>といったところですかね?<br>……IOとかLuaが良い線行ってるかな?

_ (2008-01-31 02:05)

一つ忘れてた。<br>5. 充実したドキュメント<br>……Rubyに一番足りていないものですね。

_ じょりちょこ (2008-01-31 02:57)

初心者向けってことなら、PHPにSQL不要な組込みデータベースがあるといいと思うよ。SQLインジェクション対策は不要になるからさ。そうすれば、残るはXSS対策で、それはechoのデフォルトの挙動をサニタイズ付きにしちゃえばいい(サニタイズしていない出力が必要なときには、初心者には面倒な方法を要求するのね)。

_ yasuizo (2008-01-31 03:22)

有名人になっちゃったのね。Matzさんて(笑)<br>しみじみと感じた出来事ですね。今回は。<br><br>話は変わりますが、松江市の「高額合算システム」の話をもっと聞きたかった(笑)Javaとの比較はやっぱり重要だと思うのですよ。今後のことを思うと。公開できる情報なら、アップしてもらえるとうれしいですね。(ある程度の主観はOKだと思います。)<br><br>まあ、どの言語もDisられるんですよ〜。誰かに必ず。それだけでそれ以上でもそれ以下でもない出来事だと思いますが。<br>PHPがだめな部分あるのは自明の理。でも、歴史がある程度あるPerlやJavaですらいまだにそういう側面がありますからね。PHPがまだまだ馬鹿にされるのは当然です!!その分進化の余地も大きくあるということでもありますし。

_ (2008-01-31 03:23)

いや、PHP改善とかの話では無しに、そういった制約無しに最初から設計するとしたらどうなるか、という話の方が良いですね。PHPの話してもつまらないですし。<br><br>SQLインジェクション対策の話は、組込みデータベースが必要というよりも、ユーザー入力を処理するSandBoxを用意する方が適切な気がします。<br>組込みデータベースでも、ユーザー入力の処理によってはそのまま使うと危険なことに変わりないし(SQLをそのまま使うよりはずいぶん危険度が落ちるけど)

_ (ぱ) (2008-01-31 03:53)

ああ、でじゃびゅ。<br>http://www.rubyist.net/~matz/20070529.html#c04<br><br>それはさておき、「初心者が脆弱性のあるWebアプリを書いてしまう」というのが問題だというのなら、関数の引数の順番がどうとか関数名がどうとかクロージャがないとかより、「magic quoteなどという根本的にセンスのない機能が存在し、かつそれがデフォルトでonになっている」(PHP5まで)ということのほうがずっと重要だと思うんですけど。<br><br>ただ、<br>http://takagi-hiromitsu.jp/diary/20051227.html#p03<br>この観点からするとERBもだめなのかもしれませんが(まあ、PHPよりずっと少ないタイプ数で正しいコードが書けますけど)。<br><br>なんというか、メタな議論はおなかいっぱいなので、具体的な機能で議論していただきたいなあ、と思いますです。

_ suna (2008-01-31 06:25)

matzさんが言っているのは言語としてとの切口なので、まったく視点が異なりますが、<br>ユーザ側から見た場合、PHPの方がWeb初心者に優しいというのは、ある意味正しいと<br>思います。<br><br> 1. cgiではなく動く<br> 2. とりあえず動かすのは簡単<br> 3. マニュアルが読みやすい<br><br>もちろん正しく理解してないとリスクを生むので危険だというのも事実。<br>ただ動かすまでのハードルが高いとそこで挫折するユーザは多いかと思います。<br>結果、ライブラリーの充実度やマニュアル、書籍の充実度が増えていき、<br>さらにユーザが増えるという流れできたのでは?<br><br>私自身は、RubyとRailsでWebアプリを作っていますが、Railsから入っていなければ<br>Rubyを使わず、PHPをそのまま使っていた可能性が高いです。<br>Railsにしても研修会(その節はお世話になりました)に参加してなければ、途中で挫折<br>していた可能性が高いです。現在ではRubyの使い勝手のよさがわかっているので、<br>ローカルアプリやコマンドをRubyで書いたり普通に使っています。<br><br>そう言った底辺レベルへのサポート度を考えると現在のところPHPがもっとも優れて<br>いるかと思います。<br>逆に底辺レベルが低いので、PHPしか出来ない人が多いというのも事実かと。<br>このあたりはVBと同じなんでしょうね。<br><br>p.s.<br>rubyはそう言った底辺レベルへのサポートが弱いと思います。<br>「たのしいruby」と「Rubyレシピブック」ぐらいの内容を公式サイトに載せるように<br>すれば相当底辺が拡がるのではないかと思います。

_ 元職業プログラマ (2008-01-31 07:17)

じょりちょこさんの <br>>PHPはコア言語が貧弱だけど、ライブラリ関数が充実している。それが初心者にとって福音なんだと思う。さらっとコア言語を習得できて、あとは関数を探せばいいだけだから。<br>というご意見は、尤もPHPの本質を突いているコメントのような気がします。<br>そこで思い出したのですが、HSPは発展途上だからかもしれませんが、コア言語が貧弱で、ライブラリも充実していない(?)と思います。<br>ところで、Haskellはコア言語の機能の高さで、他に勝る言語は無いし、普通の人が使える(?)ライブラリもRubyほどではないかもしれませんが、充実してきていると思っております。

_ 元職業プログラマ (2008-01-31 07:23)

sunaさん<br>http://www.ruby-lang.org/ja/man/html/Ruby_A5EAA5D5A5A1A5ECA5F3A5B9A5DEA5CBA5E5A5A2A5EB.html<br>Rubyは、上のマニュアルを真面目に読めば、結構分かると思いますよ。

_ 元職業プログラマ (2008-01-31 07:25)

そういえば、こちらにも非常に有益な情報が含まれています。<br>http://jp.rubyist.net/

_ 田辺 (2008-01-31 07:53)

「初心者っぽいコードを積極的に支援する」<br>「初心者による低品質なコードの氾濫」<br><br>上記のような評判や弊害を以て、言語を批判したのも<br>過剰反応される理由のひとつだと思います。<br>評判や弊害は言語批判の根拠とはなりません。<br>言語批判の対象は、言語仕様と考えます。<br><br>PHPは「上級者」にとっては良い言語なのでしょうか。<br>もし「初心者」「上級者」の双方に取って使い勝手の悪い言語であれば、<br>「初心者」などの言葉を使わず議論ができるのではないでしょうか。

_ uwi (2008-01-31 11:08)

言語屋さんなんだし、言語と(一つしかなくても)言語処理系の区別ははっきりつけて話をしてほしい。混ぜるな危険。

_ kino (2008-01-31 11:35)

私は仕事でPHPを使います。もちろん他の言語も使います。<br>(大したものは作れないですけど)<br><br>その上で、まつもとさんの主張には同意できるものは多々ありました。<br>特に"=="と"==="の問題は常々感じていて、「よくぞ言ってくれた!」と心の中で叫んだのは事実です。<br><br>それよりも、個人の日記に対して「言語設計者がこのような発言をするのが問題だ」<br>という意見の方が気になります。<br>個人の日記で、自分の意見の表現を制限されることの方が問題ではないでしょうか。<br><br>極論かも知れませんが、Web上の日記はもはや日記とは<br>言えないのではと、そう感じる今日この頃です。<br><br>最後に、このエントリでRubyに興味を持ちました。<br>ありがとう御座いました。

_ ゆーぼー (2008-01-31 22:35)

皆さんは(私も)それぞれお好きな言語があり、それを愛しているから、このような炎上?が起こるのでしょう。<br>全ての方のご意見を、熱くならず、一度ゆっくり肯定してみましょう。<br>で、暫く反芻しましょう。<br>あとは、自分へのフィードバックで糧にしちゃお。

_ 元職業プログラマ (2008-01-31 23:14)

Rubyの良さは、なんといっても、popn.jaさんやkinoさんのように、素直な言語であるという事に尽きると思います。(Matzさん自身がどうなのかはわかりませんが。)<br>その理由は、多分、MatzさんがUNIX、C/C++、shell(ksh or bash?)等を長年やっていらっしゃったからではないかと考えます。<br>私の様に、そういうものを長年やってきている人間からすると、Rubyは非常に素直に受け入れられる訳です。<br>私の仮説では、PHPやHSPを愛好している(?)方は、UNIX、C/C++、shell等に対する経験が少ないのではないかと考えます。<br>だからカルチャーギャップが生まれているのではないでしょうか?

_ 元職業プログラマ (2008-01-31 23:16)

やっぱり、カルチャーギャップではなく、カルチャークラッシュでしょうか?

_ あほ (2008-02-01 00:11)

で、結局<br><br>htmlspecialchars($_GET['text']);<br><br>の問題点はなんなのでしょうか?<br><br>まさか説明せずに逃げるわけありませんよね?

_ Meister (2008-02-01 00:55)

> _ の (2008-01-31 02:02)<br>> <br>> そういえば、じょりちょこさんとかの意見を見て思ったのですが、「初心者向けのWebアプリ用言語」ってどんなのですかね?<br><br>ここがそもそも認識のずれてるところでしょう。<br>matzさんの記述を私が読み取った限り、「初心者向けのWebアプリ用言語」などというものは存在できない。<br>なぜなら、<br><br>> 「どの言語で書いてもおかしなコードを書く奴は書く」という指摘もあった。それは言うまでもない事実ではある。<br><br>が真であり、<br><br>> 初心者による手を抜いたWebアプリケーションは PHPが作られた当初はともかく、現代では害悪ではないだろうか。<br>(言い換えると、「おかしなコードを書く奴(初心者)による手を抜いたWebアプリケーションは害悪」)<br><br>が真であるならば、「おかしなコードを書く奴は、どの言語で書いても害悪なWebアプリケーションを書く」ことになるからです。<br>つまり、誰でも安全なWebアプリケーションを書ける「初心者向けの『Webアプリ用』言語」はありえません。<br><br>そしてこのことが、最初のエントリにあった<br><br>> でも、「初心者に簡単」を一般公開されるWebアプリケーションを開発するための言語としての利点にするのはもうやめようよ。<br><br>に繋がるのだと私は理解しました。

_ (2008-02-01 00:58)

誰も乗ってこないな >初心者向けのWebアプリ用言語<br>俺言語作っているひとっていないのかな…………<br><br><br>>あほさん<br>私が解説しますかね。PHP使ったことありませんが。<br>間違っていたら指摘をお願いします。>有識者の方<br>もう誰も読んでいないかもしれませんが。<br><br>PHPの場合はHTML文中で直接コードを記入するケースがほとんどで、PHPの実行結果はその場にHTML文書として書き込まれます。また、PHPの場合はHTMLで特別な意味を持つ&<>"'もPHPから直接HTML文書中に展開することができます。<br>この結果、PHPのプログラムはHTMLタグやJavaScriptなどの埋め込みが簡単にできますので、非常に便利でお手軽なプログラミングが可能です。──────外部から入力された文字列を使わないうちは。<br><br>しかし、外部入力の文字列を扱い始めた瞬間に、この便利な機能は一転して危険なものになります。PHPは外部入力の文字列を特別扱いしませんので、<br>$_GET['text']<br>と外部入力をそのままHTMLに埋め込むようなコードも簡単に書くことができます。<br><br>もしここで外部入力の文字列が悪意をもったリンクならば、フィッシング詐欺の片棒を担ぐことになりますし、悪意をもったJavaScriptならばウイルス配布の片棒を担ぐことになります。<br><br>通常は<br>htmlspecialchars($_GET['text']);<br>として外部入力の特別文字をエスケープするのですが、<br>・安全にするためにわざわざ手間を掛けなくてはいけないのはイクナイ。タイプ量多過ぎ。<br>・そもそも外部入力は危ないんだから、特別扱いする安全装置を付けた方がスマート。プログラマのケアレスミス一発で奈落の底に堕ちるようなのじゃマズいだろ。特にPHPはHTML前提Webアプリ用言語なんだし。<br>といった問題点が浮かび上がります。<br><br>個人的には外部入力文字列用の専用クラスを用意しても良いと思いますけどね。<br><br>…………でも、erbもこういう仕様じゃなかったっけ??<br>使ったことないからわかんないけど。

_ (2008-02-01 01:28)

>Meisterさん<br>なるほど。言語屋としての敗北宣言なんですね。<br>確かに技術で全ての問題が解決するわけではありませんが……<br><br>私は、「初心者向けのWebアプリ用言語」は存在できるか、あるいは少なくともコンセプトとして目指すことはできると考えています。もちろん、初心者/初学者向けということならば言語だけで全てがカバーできるとは思いませんが、良い指導者の元で安全に学習するためのツールを目指すのはそんなに大変ではありません。<br><br>いくつか思い付くアイディアをちょっと並べると……<br><br>○良く初心者に指導するときに使う方法として、動作を制限する治具を使用しながら無理が生じないように動作を身に付けさせるというのがありますが、それと同様に言語も<br>・プレーンテキストを吐き出すだけのエンジン/ライブラリ<br>・安全なHTMLを吐き出すエンジン/ライブラリ<br>・危険なHTML・JavaScriptも扱えるエンジン/ライブラリ<br>・外部入力も扱えるエンジン/ライブラリ<br>と、段階的に言語エンジン/ライブラリを用意する<br><br>○セキュリティチェックやテスト環境を充実させる。Webアプリの挙動ができるだけ目で見えるようにする。<br><br>○使用を推奨するメソッドやライブラリ、フレームワーク、あるいはプログラミングスタイルなどは、できるだけシンプルに記載できるようにする。<br><br>○危険な動作は明示的・冗長的にコーディングしなくてはならないようにする。危険な動作は特別なメソッドでしか扱えなくする。<br>例えば<br>tained_string = CGI.new["text"]<br>tained_string.sandbox_for_tained_string do |t|<br> # 汚染マーク付きのstringはSandBox内でしか汚染マークの除去や文字列の結合、<br> # 出力ができない<br> # SandBox内の文字列は自動的にescapeHTMLで処理される。<br> print tained_string # print CGI.escapeHTML(tained_string)と同義<br>end<br><br>とかですかね。もちろんこれだけじゃありませんが。

_ (2008-02-01 02:22)

おっと、なんかズレてるな……まあ、いいや。蛇足ながら追加で。<br><br>「初心者向けの『Webアプリ用』言語」「初心者に優しいWebアプリ向け言語」と「誰でも安全なWebアプリケーションを書ける言語」は別物です。「Webアプリケーションをちゃんと書くのは難しい」のは正しいかもしれませんが、だからといって「初心者に優しいWebアプリ向け言語」というものが存在できないわけではありません。<br>…………もちろんPHPじゃないですが。<br><br>初心者にとって最も大きな障壁はまさしく「Webアプリケーションをちゃんと書く方法が判らない」ということでしょう。ならば、「Webアプリケーションをちゃんと書く方法がわかるようになれる」言語であればそれは「初心者向けの『Webアプリ用』言語」と言う事ができるし、「Webアプリケーションをちゃんと書いていないことを気付かせる言語」ならばそれは「初心者に優しいWebアプリ向け言語」と言う事ができる──と私は考えています。<br>初心者でも「誰でも安全なWebアプリケーションを書ける言語」は不可能かもしれませんが、初心者に「Webアプリケーションをちゃんと書くのは難しい」ということを判らせる言語を作ることは不可能ではない……と思います。そういう言語は「初心者向けの『Webアプリ用』言語」と言う資格を持っていると思いますが、いかがですか?<br><br>まあ、matzさんの言う通り、「初心者に優しいという宣伝文句を使うのは良くない」というのは賛成です。PHPはそんなコンセプトじゃないだろ、どう見ても。

_ 内容以前の問題ですコレ (2008-02-02 19:31)

 ズレてる、ズレてないとかどうでもいい、くだらん。<br><br> 結局、おのおので好きな言語で書けばいいじゃんそんなの。<br> 最終的にセキュリティの事考えながら作られているコードを書けば、誰も文句言わないんだから。<br><br> そもそもこういう議論で、モヒカンとムラ社会の住人が言い合ってもムダなだけ、視点がまるで違うから。<br><br> 無論どっちが上・下っていうのは絶対ないからね! お互いのそういう”匂わす態度”がこういう論議呼ぶんだから。<br> お互いに何かが欠けてるのを認めなさい。<br><br>>モヒカン側>人に気遣う事覚えましょう、空気よめと気遣いは別だぞ!<br>>ムラ社会側>技術的な内容を見ないで脊髄反射するのやめなさい!PHPの内容については全くそのとおりだし。

_ 米子人から (2008-02-03 00:05)

Webアプリのための言語を論ずるのもよいが、smptの罪悪をどうするのかの方が、ず〜と、ず〜と 重要に思います...。

_ 話は逸れますが (2008-02-03 01:18)

「初心者向け」かどうかはプログラミング言語にとって重要な要素でしょうか?<br>初心者はインターネットに接続していない環境で十分に学んでから実践に移ればいいだけと思います。<br>IT産業が慢性的な人材不足で未熟な開発者が一向に淘汰されないことが問題なのではないでしょうか。<br>そのうち技術力の高い(あるいは低くても)コストが安い外国人労働者に駆逐されるのではないかと感じています。

_ (2008-02-03 04:20)

>内容以前の問題ですコレさん<br>matzさんが2008-01-26に<br>>たぶん、「初心者がおかしなコードを書くのをじゃましない」とかあるいは「初心者っぽいコードを積極的に支援する」から、「初心者に優しい」って呼ばれるんだろう。もしくは「設計者がまだ初心者」とか。<br>>そういう言語が存在しちゃいけないとは言わないけど(人に迷惑をかけない範囲で)、ここ半世紀の言語の進化をないがしろにするのはもったいないと思うな。<br><br>といっているわけですが、だったら言語屋・技術屋として「初心者に優しい言語」について書きゃ良いのに、というのが私の意見です。PHPをdisったって仕様がないでしょうに。<br>“安全なWebアプリのために言語ができること”というのも重要だと思うけど、特に強調している『「PHPは初心者に学びやすい(と言われていることが問題である)」という部分に共感する。』ということの解決にはなっていないし。<br><br>また同様に<br>>PHPは初心者に簡単かもしれないが、初心者による手を抜いたWebアプリケーションは PHPが作られた当初はともかく、現代では害悪ではないだろうか。<br>>Webアプリケーションをなめるな<br><br>と言っているわけですが、だったら「初心者がどうすれば良いのか」ということを言わなきゃ初心者は縮みあがるだけでしょう。そんなことも判らないから批判を集めるわけで。<br><br><br>>話は逸れますがさん<br>>「初心者向け」かどうかはプログラミング言語にとって重要な要素でしょうか?<br>> 初心者はインターネットに接続していない環境で十分に学んでから実践に移ればいいだけと思います。<br><br>どうやって『十分に学ぶ』んでしょうか? 実践を知らずに? またどうやって『十分に学んだ』ことを知るのでしょうか? 最新の知識でさえ数年で腐るこの世界で?<br>確かに自分が未熟なことを知らずにWebプログラムをインターネットに放つ初心者が多いのはわかります。問題はまさしく「自分のプログラムがどれだけ危険なのか」ということが判らない(あるいは判っていても目を瞑る)ことでしょう。<br><br>確かに現場で実際のコードを作成しているプロの職人にとっては「初心者向け」であることは何の価値も無いでしょう。matzさんが“安全なWebアプリのために言語ができること”で挙げている内容の方が重要です。<br>しかし、もし未熟なプログラマを部下に持つマネージャーだったら? あるいは入社したての初心者を鍛えなくてはならなくなったプログラマーだったら? そういった人間にとっては、たとえ言語としての機能が劣っていたとしても「初心者の教育に向いている」ことの方が遥かに重要だと思います。少なくとも私は「初心者の教育に向いている言語」を選びます。<br>──────問題はそういった「初心者の教育に向いている言語」が無いことですけどね。

_ もみもみにゃんご (2008-02-03 06:16)

Matzさん!このままだと不利ですよ。<br>もし、PHPerに Ruby の CGIライブラリ(CGI.rb)を見られでもしたら何を言われるかたまったものではありません。<br><br>いますぐ「フレームワークを使いなさい」ということにして標準から外すべきです。

_ もみもみにゃんご (2008-02-03 06:39)

> …………でも、erbもこういう仕様じゃなかったっけ??<br><br>そうですね。<br>そういう時は Erubis 使うといいかも。速くなるし。<br><br>Erubis: fast and extensible eRuby implementation<br>http://www.kuwata-lab.com/erubis/

_ じょりちょこ (2008-02-03 08:03)

「の」さん、「最新の知識でさえ数年で腐るこの世界」とおっしゃいますが、その程度の知識に依存することが問題なのでは?<br><br>Joel Spolskyは「Javasスクールの危険」でこう書いてます。<br>「私の知るSchemeとHaskellとCのポインタが使える人はみな、Javaを使い始めて2日で経験5年のJavaプログラマよりいいコードを書くようになる」<br><br>これは実際、自分の経験したことと同じです。僕は、5年前にある会社に入社したとき、初めてPHPに触れました。その会社ではずっとPHPが主力の開発言語だったのですが、僕は一ヶ月もすると、その会社で何年もPHPでプログラミングしてきた人たちより、いいコードが書けるようになりました。<br><br>話を拡散させて申し訳ありませんが、PHPによって救われた人というのは、PHPによって盲目にされているとも言えると思うのです。<br><br>ただし、PHP自体は、ゆっくりと好ましい方向へ進化してきていると思います。register_globalsやmagic_quotesはPHP 6.0で廃止されることが決められており、現状で「この機能を使用しないことを強く推奨します」と警告されています。いずれデフォルトの警告レベルも上げられ、字句解析レベルで発見される脆弱性に対して警告メッセージが出るようになっていくでしょう。<br>いずれ構文が見直され、コア言語とライブラリ関数の区別が明確になり、コア言語の仕様も標準化され、後方互換性を重視できる状態が整備されるかもしれません。<br>もっとも、これらがすべて実現したときには、もうPHPは初心者向けではなくなっているかも知れませんが。

_ 話は逸れますが (2008-02-03 12:22)

の様<br>ご回答ありがとうございます。<br><br>>どうやって『十分に学ぶ』んでしょうか? 実践を知らずに? またどうやって『十分に学んだ』ことを知るのでしょうか?<br>>しかし、もし未熟なプログラマを部下に持つマネージャーだったら? あるいは入社したての初心者を鍛えなくてはならなくなったプログラマーだったら? <br><br>教育はどのような職種でもとても重要な問題です。<br>「初心者向けプログラム言語」とは別の方法で解決すべきだと思います。

_ 元職業プログラマ (2008-02-03 13:35)

PHPカルチャーでは、セキュリティーや性能、プログラムのエレガントさ等より、とにかく「動く」プログラムを手早く作る事の方が重視されているのでしゅうか?<br>だから、PHPカルチャーでは、学ぶとか教えるという事があまり重要視されないのではないのかと思ったのですが、いかがでしょうか?<br>そういえば、PHP自身が他の言語から学んでいない見たいですよね?

_ (2008-02-03 14:32)

>もみもみにゃんごさん<br>>そういう時は Erubis 使うといいかも。速くなるし。<br><br>初心者が簡単に使える環境になっていないから、「初心者向け」という観点からはerbの代用にならないですね……。こういうのを貪欲に取り込んで欲しい気もしますが。<br><br>>じょりちょこさん<br>>「の」さん、「最新の知識でさえ数年で腐るこの世界」とおっしゃいますが、その程度の知識に依存することが問題なのでは? <br><br>そうすると、「SchemeとHaskellとCのポインタが使えるようになるまでは、初心者はWebプログラムをしてはならない」という極論も出てきますが……。それに、プログラムの本質的な部分だけの勉強では、matzさんが指摘しているhtmlspecialchars($_GET['text'])のようなバッドノウハウはカバーできないですよ。<br>matzさんの要求されているWebプログラムの安全・セキュリティ関係は、バッドノウハウが多く陳腐化の激しい部分ですからね。<br><br>>もっとも、これらがすべて実現したときには、もうPHPは初心者向けではなくなっているかも知れませんが。<br><br>危険なことを危険とわかるようになるのだったら、それはそれで「初心者向けの強化」だと思いますが? 本当は、どうやったら危険な状態を回避できるかというのも含めてわかるようになるとより良いのですが。<br><br>>話は逸れますがさん<br>>元職業プログラマさん<br><br>当然、「初心者向けプログラム言語」とは他の方法で解決することもできるでしょう。昔からある徒弟制度などは実地で身に付ける形ですしね。あるいは実際の道具を使ってトレーニングを行うことも良く行われているかと思います。詰将棋ですとか麻雀の次の一手ですとか、C++のGotWなんかもそうですね。<br>ただ、優れた技術には優れた学習法があるものですし、優れた学習法ではそれ専用の道具を使うケースが多々あります。スポーツや武術で初心者用練習ツールを使うのは普通ですし、DIYだって初心者向けの工具はいくらでもありますしね。車の練習だって教習車やシミュレーターを使って行う訳ですし。<br><br>PHPのユーザーは実地で動作するということを重視していて、学習ということを重視していない、というのは確かにあるのかもしれません。PHPの文化は良く知らないので深入りできませんが。そうなると学習用言語が「初心者向け言語」として採用されることはありませんね……

_ rudy (2008-02-03 21:35)

言語に欠点が無ければ終了、そんな言語あるわけないじゃん。<br><br>言語の欠点、指摘すること多いに結構だと思います。

_ しょしんしゃ (2008-02-04 01:24)

WEBアプリを作ろうとしていますが、初心者向けの言語ってなんですか?今すぐ作りたいので今ある言語で紹介してください。

_ (2008-02-04 22:15)

>しょしんしゃさん<br>だから無いって。

お名前:
E-mail:
コメント:
[]

«前の日記(2008-01-28) 最新 次の日記(2008-01-30)» 編集

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.