2009年07月06日 14:30 [Edit]
教科書はいらない - 書評 - PHP逆引きレシピ
翔泳社片岡様より献本御礼。
ある意味実にPHP的な一冊。PHP本は、これ一冊あれば十分だと強く感じた。
PHPを使うにしても、使わないにしても。
本書「PHP逆引きレシピ」は、「PHPでプログラミングを習う」のではなく、「PHPで動くWebサイトを作る」に徹した一冊。PHPは後者に特化した言語である故に、前者には徹底的に向かない。本書を読めば、PHPを全く知らないプログラマーにもそれがわかるし、PHPを日時使っている人も、そのことが改めてわかるはずだ。
目次 - | PHP逆引きレシピ オフィシャルサポート より
|
|
本題に行く前に、本書を使う前の留意点を。本書のコードサンプルだが、印刷してあるものはそのままでは動かない。たとえば、
P. 48
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>変数と文字列の出力</title>
</head>
<body>
<?php
# 変数$nameに文字列を代入します。
$name = 'PHP逆引きレシピ';
# 変数$Nameに文字列を代入します。$nameと$Nameは別の変数です。
$Name = 'CodeIgniter徹底入門';
# 文字列と変数の値をecho文で表示します。
echo '書籍名: ' . $name . '<br />';
echo "書籍名: {$Name}\n<br />";
echo '書籍名: {$Name}\n<br />';
$format = '書籍名: %s、%s<br />';
echo sprintf($format, $name, $Name);
?>
</body>
</html>
なのだが、印刷バージョンはこれが以下のようになっている。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>変数と文字列の出力</title> </head> <body> <?php 変数$nameに文字列を代入します。 $name = 'PHP逆引きレシピ'; 変数$Nameに文字列を代入します。$nameと$Nameは別の変数です。 $Name = 'CodeIgniter徹底入門'; 文字列と変数の値をecho文で表示します。 echo '書籍名: ' . $name . '<br />'; echo "書籍名: {$Name}\n<br />"; echo '書籍名: {$Name}\n<br />'; $format = '書籍名: %s、%s<br />'; echo sprintf($format, $name, $Name); ?> </body> </html>
そう。コメントを示す#が印刷からは抜けてしまっているのだ。私はPHPプログラマーでないので、これも見たときむしろ「え?PHPって文芸的プログラミングが出来るんだったっけ?」と勘違いしそうになったが、実際に動かしてみてそれが誤解であることを改めて確認した。サポートサイト
で配布しているコードの方は問題がないので、実際に使うのであればそちらを利用して欲しい。
で、本題。
本書を読了した今は、確信を持って言える。PHPは、プログラミング言語として学ぶべきものではないと。山のような、しかし相互に関連しない関数。そして一貫性のない関数名。後のことを考えない、つぎはぎだらけの仕様....PHPほど、「こう言語を設計するべきではない」という言語はないのではないか。
しかし、よく考えてみれば誰もがプログラミング言語を覚える必要はないし、「プログラミング言語を覚えなければ動くWebを作れない」というのがプログラマーの傲慢であることを証明したのもPHPだった。「動くWebを作りたい」という人にとって、プログラミングというのは過程の一部に過ぎないし、多くの場合動く部分はごく一部だ。Webプログラミングにおける最も重要な言語は、なんといってもHTML。このHTMLの中に埋め込めるPHPは、それだけで「Webページを動かしたい」人にとって、他のプログラミング言語よりもずっと身近に感じられることは確かだ。
しかもPHPの場合、やりたいことは呪文一発で出来ることも多い。他のプログラミング言語だったら小さな呪文を組み合わせてやるところが、PHPなら「一言で済む」。本書の構成は、まさに「こんな時のための一言」をすぐに探せるようになっていて、本書があれば「やりたいこと」を「深く考えず」にやることができる。
だからこそ、PHPはプログラミング言語を学ぶのに向かないのだ。考えることを求めず、逆に考えようとすると「なぜこうなっている」のかを知るのは絶望的。PHPは「動かす」報酬を最大化するために、「学ぶ」報酬をばっさり犠牲にしているのだ。
よって、PHPを「学ぼう」とするのは、時間の無駄だと弾言する。学ぼうとするから報われない。ただ必要な時、必要な呪文を、必要なだけ唱えればいいのだ。それ以上をPHPに期待するのは間違いだ。「なぜ」を問うてはならない。
PHPには見向きもしない人も、MediaWikiやWordpressを使いたい場合はあるだろう。場合によってはプラグインを書く場合も。本書はそのような時に役に立つ。PHPは無視するにはあまりに普及している。しかし深く付き合おうとすればすれば、うんざりせざるを得ない。深く付き合わなければいいのだ。あくまで浅くつきあえば。
本書が、それを可能にしてくれる。実にありがたい一冊ではないか。
Dan the Man with Too Many Languages to Speak
この記事へのトラックバックURL
まさに、PHPは実用第一主義だと思います。
プログラマーとしては他の言語を使った方が最終的
な生産性はあがると思われるシステムでも、PHPで
「一言で済む」ということを変に知っている人がPM
だと、他の言語で「小さな呪文を組み合わせる」こと
を嫌がる場合が多いので、現場ではPHPが多くなる
と思われます。
>PHPは、プログラミング言語として学ぶべきものではないと。
プログラミング言語として学ぶべきものを
ご教示いただけるとありがたいです。
(私は C言語とLispとSmalltalkが学ぶべき言語では
ないかと思っております)
いつも楽しく拝見させて頂いてます。
子飼さんはPHPに関して良い印象をお持ちでないというのが良く伝わってきましたw
Webプログラミングをする時、PHPくらいしか触れないので悲しい気分になることもありますw
Googleで
site:blog.livedoor.jp/dankogai php
というキーワードで検索してみると、子飼さんがPHPに関して言及されている記事がたくさん出てきますねw
今日の記事だけを拝見すると、なぜPHPに関して否定的なのか少し分かりにくい気がしました。
個人的な妄想として聞き流して頂けると嬉しいんですがw、過去に書かれた内容を箇条書きにしてまとめたページがあったら嬉しいなぁなんて思っています。
このエントリを読んで、なぜ否定的なのかわからないようでしたら、精神構造がぴったりPHP向きということですから、他人の言葉に惑わされることなくPHPを使い続けたらよいと思いますよ。
クソ食って死んだほうが良いと思いますよ。
またコメント欄にキチガイがたくさん湧きそうですね!
じゃあ「こう言語を設計するべき」という言語って何よ?
低レベル言語(ハードウェアよりって意味)とか、スキル差、個性が出るようなの。
デザイナー兼とか、なんちゃってPGが多い、言語仕様の汚さで、PHPは煙たがれるような気がします。
#元来職人気質の強い人間が多い職業だからってのもある
なんで[[key, value]]で返すのだろうか
最近phpで作られたsymfonyってフレームワークを使ってみたらこれがすごい。
Ruby on railsもSeasar2も使ってたけど、一番わかりやすくスッキリな設計されているのは
symfonyだった。
まぁphpじゃなくてsymfonyを作ってる人達がすごいのかも知れないけど。
Pythonはそうでもなさそうな感じだったけど。
単純に「キーでソートしたい!」って思ったときに、決まり切った文句をlamdaなりブロックに入れなきゃいけないし、ましてや結果が多次元配列だし。
そして、その配列をeachしたら、value[0]とvalue[1]でアクセスしなくちゃいけないってのがなんだかなぁと。
どうして言語開発者は他人を見下して自分を立てることをするのですか?
それでいて話題になる別の言語のweb開発者と対談したり
使う言語に応じて人を選ぶ、まるで話す言葉が違うアジア人同士が
醜い争いをしているのと同じに見えました。
この一文が全てを物語ってる気がする。
偽物を本物だと勘違いしそれに気付くチャンスも与えられずそれが世の常識と異を唱えたり広めようとする。
つぎはぎだらけのものになっちゃいそうな気がします。
PerlやRubyのような場合は逆引き本だけで作ってもイイ感じになるんでしょうか?
言語ってそれで十分じゃないかと思います。
少なくともWeb系でシステム作るにあたって、PHPに”勝てる”言語ってあるんですかね。
>この一文が全てを物語ってる気がする。
>偽物を本物だと勘違いしそれに気付くチャンスも与えられずそれが世の常識と異を唱えたり広めようとする。
「ハッシュをソートしたものは、ハッシュで返してほしい」って考えが偽物ってことですかね?
暴言かもしれませんが、その言い回しだとLL言語全部が”偽物”になると思いますけど?
(何かを作る為の)実用の為の言語は別だと思っています。
一つの言語で両方を一緒にこなそうとするから、
言語に文句をつけることになるわけで。
さっさと動くものを作りたいのならPHPを使え。
でも、プログラミングの基礎を知りたいのなら、アセンブラやC言語を学べ、
でも、さっさと動くものにそれらの言語を使うな。
(もちろん組み込み系などで使用できる言語が限られている場合は除く)
両方やるのは時間の無駄?
急がば回れというでしょうw


