2011年3月30日水曜日

典型的PHPerの13の悪癖

このエントリーをはてなブックマークに追加
Pocket

はてな匿名ダイアリーで不穏なことが書かれていたが、職場などで見かけない事も無いので解説をつけて内容を転載しておく。

典型的な“嫌なタイプ”のPHP使いの特徴を「典型的PHPerの13の悪癖」というタイトルでまとめてあるものだ。PHP育ちの叩き上げの人が陥りやすい問題も含まれていると思うので、紹介したい。

1. パスワード認証sshでサーバーにログインし、vimやemacsで開発をする。
PHPerは、生産性が低く、セキュリティ的に問題のある開発環境を愛用しているケースが多々ある。セキュリティ向上の為にはsshは公開鍵認証で使うべきだし、生産性向上のためには、一般的にはローカルに開発環境を用意して、Eclipse/PDT等の統合開発環境を使うべきであろう。
2. SVNなどのバージョン管理システムで、使い方が分からないのでブランチを切った事が無い。
開発ツールの学習に無頓着なPHPerは少なくない。例えば、バージョン管理システムを単なるファイル共有・履歴閲覧システムとして利用しているケースがある。リリースをしてもブランチを切らないプロジェクトは多々見かけるし、驚くべきことにソースコードを巻き戻すときに、履歴を閲覧してプログラマがコードを修正するケースさえある。
3. ウェブしか開発したことが無いのに、ソフトウェア技術全般を語る。
世の中には多種多様なソフトウェアあるので、PHPの常識が通用するとは限らないが、PHPerはPHPの常識に固執するときがある。デスクトップやケータイのアプリケーション、デバイスドライバ、OSやミドルウェアの開発は、ウェブ・アプリケーションの開発とは大きく異なる面もある。また、Javaや.NETによるウェブ開発は、PHPによるそれとは大きく様相が異なる。
4. RDBは難しいからと言って、簡単なSQLしか、もしくは簡単なSQLも書かない。
RDBは、原則として正規形のテーブル設計で利用するものだ。RDBは、データの寿命がアプリケーションの寿命より長い事が前提となっており(DOA)、アプリケーションにあわせてテーブル設計をしてはいけない。ただし、速度的に問題が出るケースは、結合回数を減らすために正規形を崩すときはある。
5. PHPなどのスクリプト言語しか知らないのに、プログラミング言語の優劣を語る。
PHPは手続き型、もしくはオブジェクト指向型に分類される言語で、世の中にはLispやErlangのような関数型言語も存在する。Perl、PHP、Python、Rubyを比較しても、オブジェクトが使えるスクリプト言語の範囲は出ないので、狭い範囲の比較にしかならない。
6. PHPの遅さを知らないのに「最近のマシンは速いからプログラミング言語に速度は求められていない」と言い切る。
PHPはビルトインAPIの速度は高速だが、PHPコード自体の実行速度は速くない。他のスクリプト言語と比較しても遅い方だ(Computer Language Benchmarks Game)。CやC++、Javaと比較すると処理によっては100倍以上も遅くなるので、最近の計算機を用いていてもPHPはパフォーマンスに注意しないといけない時がある。
7. クソ重いPHPをLightweight Languageと言ってしまう。
LLと言ってPerlやRuby、Python使いも友達だと主張しているように感じるが、LLという形容は不適切だ。PHPの実行速度は遅く、メモリ消費量も少なく無いので、手軽(easygoing)であっても軽量(lightweight)であることはない。LLと言う単語を使うたびに、軽薄な印象を周囲のソフトウェア・エンジニアに与えるかも知れないので注意が必要だ。
8. クソ重いPHPで、デザパタとか言い出す。
PHPコードの実行速度は遅いので、その中でも他のプログラミング言語と比較して遅いメソッド呼び出しが増えるGoFデザインパターンは、本質的にはPHPに向かない。一つのソースコードの整理手段としてはあり得るが、無闇にデザインパターンを推奨できるプログラミング言語ではない。
9. クソ重いPHPで、クソ重いフレームワーク(CakePHP、symfony、Zend Framework)にこだわる。
PHPコードの実行速度は遅いので、メソッド呼び出しが増え、実行コード量が肥大するフレームワークは、本質的にはPHPには向かない。ライブラリがセットになっているため生産性が向上し、ソースコードの整理にもなるためフレームワークの採用が一般化しているが、オーバーヘッドも認識しておくべきであろう。
10. クソ重いconcrete 5やWordPress、MovableTypeで何でも書き出す、ショッピングサイトも作り出す。
PHPコードの実行速度は遅いので、PHPで書かれたミドルウェアは速度的に問題が出やすい。OpenPNEのパフォーマンスに苦しんだ人は少なく無いはずだ。しかし、なぜかPHPで書かれたミドルウェアは増加の一途であり、そしてそれらを拡張するコードも氾濫している。
11. 仕様が曖昧で急激に変化するPHPで、テストファーストとか言い出す。
TDDは有効な開発手法だし、PHPでも用いられている。しかし、PHP自体の仕様が曖昧な面もあり、PHPのバージョンアップで後方互換性が失われるケースが多々ある。PHPは古くからあるビルトイン関数の挙動・仕様が変化することもあり、テスト・ケースを充実させても、将来のバージョンのPHPでは挙動を保証できない。
12. 勉強会でリファレンスに書いてあるような、分かりきった事を発表する。もしくは理解できていない事、誤った内容を発表する。
特にPHPerに限った話ではないが、試行錯誤でアプリケーションが書けるPHP育ちのプログラマは、何か誤解したまま突っ走しる傾向はあるような気はする。若さなのだと思うが、彼らのPCが赤く無いので大目に見るのは難しい。
13. ブログで自らの無知をさらけ出す。
PHPの事が書いてある分にはそうではないが、独善的で主観的なPHPerのブログは多々あるように感じられる。典型例として、自分が使うツールの重要性や利便性を強調し、必須ツールとしているケースが思い浮かぶが、そういう場合に同種ツールとの比較検証が詳細にされる事はほとんど無い。

以上の13項目のうち7つ以上があてはまる場合、周囲からPHPer臭が漂うプログラマだと思われている可能性が高い。「地獄のミサワ」とニックネームをつけられる前に、言動を見直した方が良いであろう。

叩き上げのPHPプログラマで、PHPを愛してやまない一方で、他のプログラミング言語や開発ツールには興味関心が無い人々が、上にあげられた人物像にあてはまる気がする。道具に愛着を持つ事は良いことだが、視野が狭くなると周囲には煙たがられるので注意が必要だ。

0 コメント:

コメントを投稿