1週間ほど前からPHPに関する話題をチラホラ見かけています。
元は、Ruby開発者のまつもとゆきひろさんの
んで、それに呼応するような形で
「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い @ 404 Blog Not Found
や
と、他にも著名なブログでも幾つか取り上げられていました。
私も社内SEとして開発に主立ってPHPという言語を選択してきましたので、PHPの良し悪しについて書いてみたいと思います。
1. ダメプログラマーを救ってくれたPHP
私は、情報系の大学に通い、その頃からプログラミングというものに触れてきましたが、ほとんどの言語で挫折し、社会人になった当時はまともに扱えるプログラミング言語と言うものはありませんでした。
大学の頃、C言語を習ってはポインタと構造体がさっぱりで、Javaの授業では宣言の長さにウンザリして理解も進みませんでした。
社会人になり、社内のWebアプリケーション構築という業務に携わり、(最初に触れたのはPerlでしたが)PHPという言語を触れて、その学びやすさと書きやすさに共感してその後、多くの時間をこのPHPに費やしてきました。
初めてまともに、プログラミングができたという瞬間を感じさせてくれた言語がPHPでしたし、作ったWebアプリケーションを多くの人が利用してくれて、作る事の喜びを感じたのもPHPがあったからこそと思います。
不思議なもので、多くのプログラミング言語と異なる構造を持つPHPを勉強しただけで、その他の言語の基本構造も理解できるようになったのです。
大学の頃に受けた基本情報処理試験(その当時は、第2種情報処理試験)は、午後の選択式のプログラミングの試験がネックになって何度受けても合格はしませんでしたが、社会人になって初めて受けてみたらすんなり合格できてしまいました。
私はPHPでプログラミングの基本構造を理解できた事を、C言語を勉強した経験にフィードバックする事で、この言語の基本構造を理解する事に役立てることができたわけです。
2. PHPが見せた錯覚
プログラミングができるようになった私は、業務で多くのWebアプリケーション構築を行ってきましたが、その時は多少傲慢になりすぎていたようにも思えます。
「プログラミングは極めた。後はどの言語も同じだろ」とさえ思っていたことがあります。
業務の目的が、業務の課題を解決するためのWebアプリケーションを構築する事と考えていた私は、仕様にそった開発を心がけ、「動けばよい」とだけ考えるようになりました。
中身はあまり気にしない。自分が保守すれば良いし、とりあえず動くものを納品すれば目的は達成できる、と。
このとき、私にとっては
PHP = プログラムの世界
という状態になっていました。
この考えが、今回の議論の中核にあるようにも思えます。
動けばいいじゃん(or 動くからいいじゃん)という考え方です。
PHPはそう錯覚させてしまう言語で、私もその錯覚の中に迷い込んでしまった一人でした。
3. PHP以前にあるもの
確かに仕様を満たすロジックを組み込む事で、目的とした動作はしてくれます。
しかし、それはあくまで自分が構築するアプリケーションの目的だけであって、アプリケーション自体の基本的な達成すべき目的が満たせているかと言うと、そうでは無いということになります。
例えば
・ そのアプリケーションは安全か?
・ 保守は容易か?
などです。
安全か?という問いに、それはPHP自体が満たしてくれているはずと考える人も多くいると思いますが、そうではありません。
そもそも、プログラマーが自由に書くことができる言語で100%安全なコードを最終的に作り上げられる言語は存在しません。
安全なんて何処にでも穴を開ける事ができるわけです。
これはPHPに限った話ではありません。ですが、先ほども言ったようにPHPが起こす錯覚に取り込まれて、そう感じてしまう(または意識しない or 気にしない)人が多く出ていることは事実です。
そして、保守性の話は自分も経験としてあるのですが、PHPという言語を通して開発を行っていく中で、規模が大きくなってくると、膨大な量のソースを書かないといけなくなりましたし、保守をするのにも多くの時間を費やさなければならないと言う事に気づきました。
私は、少しずつ開発メンバーが統一した規則に沿って開発が行えるように、開発上の規則をまとめたり、共通で使用できる関数郡をまとめていったり、そして最後にはPHPのフレームワークの導入するに至りました。
これに関しても、何もPHPに関することだけではありません。
その他の言語でも開発する上で起こりえる問題です。
しかし、この問題をPHPで解決することはあまり望ましいものではないという意見が多くある事は事実です。
理由は、開発規則を定義してもPHPは簡単に破る事ができる事。
次に、フレームワークの導入では多くの場合、MVCモデルなどオブジェクト指向の概念が取り入れられていますが
PHPのオブジェクト指向は、後付名ところもありあまり綺麗に扱えるものではありません。
また、オブジェクト指向を取り扱うのなら、最初からオブジェクト指向な言語を扱えばよいというのが、多くの識者の意見では無いでしょうか。
であれば、そこまでしてPHPで開発を進めることのうまみがなくなってしまったということになります。
ここでようやく私は、
PHP ≠ プログラムの世界
という事に気がつくことができました。
4. PHPが与えてくれたもの
かくして先人たちが、プログラミングの世界で試行錯誤して築き上げてきた歴史を、私は小さな世界で体験する事になりました。
取り合えず動けばよいというところから、如何に効率的に開発が行えるかやプログラミングでやってはいけない事、そしてそれを回避する(させる)にはどうしたらよいかなど。
私の場合、そういったプログラミングの基礎知識を身につける土台としての役割をPHPが果たしてくれました。
しかし、こうしてPHPの善し悪し考えることができるのは、その他の言語の開発経験があったからです。
その他の言語のいいところ、悪いところを見てみて初めてPHPのダメなところもわかります。
マイナーなバージョンアップで関数の仕様がころころ変わることもありますし、不可解な仕様 があることも知っています。
以前に参加したセミナーで、多くの経験を積んだプログラマーと新人のプログラマーが1年間に書くことができるソースコードの量は同じだと聞いたことがあります。
であれば、両者の違いは何かというと、中身の濃さになります。
PHPで大量のソースコードを書くのも、その他の言語で小さくまとめることができても、最終的に書くことができるソースコードの量が同じであれば、もっと効率的に書くことができるその他の言語を選択したほうがよいのではないかという意見もあるかと思います。
PHPは、豊富な関数郡が用意されているために、ソースコード量を抑えて効率的に開発できるという考えをもっている人もいるかもしれませんが、前述した不可解な仕様のために、余計なコードを追加しないといけないことが多い為、全体としては非効率さが目立ってしまいます。
ただ、最終的にはZAPAさんのエントリで、プログラミングは宗教のようなものと書かれているように、自分に合う、
合わないとか、思想、コミュニティの入りやすさなどが選択肢として大きく左右される要素だと思います。
まっすぐスマートにデパートに買い物を行こうとも、回り道をしてゆっくり行こうとも達成できる目的が同じであれば
その人の自由です。
一方から見ると、なんでわざわざ時間をかけてやっているんだと思う場合もあるでしょうけど、その人から見ればその途中にある道が好きだったり、のんびりと進みたかったりと理由はそれぞれです。
自分に合ったプログラミング言語を探してみたいということであれば、その選択肢の一つとしてPHPを選んでみてそこからプログラミングの基礎というものを学ぼうとすることは全然問題のあることではないかと思います。
重要なことは、言語の仕様ではなく、プログラミング自体の構造を理解することにあるのだと。
私は、PHPを通してそれが行えたのだから、PHP自体から大きな恩恵を受けたことは確かであるといえます。