がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

ちょっと気になるので突っ込んでみる

元ネタ
典型的PHPerの13の悪癖
http://anlyznews.blogspot.com/2011/03/phper13.html


これの元ネタの「典型的PHPerの13の悪癖 http://anond.hatelabo.jp/20110329150439 」のほうも見ていたんだけど…ちょっと気になったので、突っ込み。
いつもながら当然ながら、以下、すべて「私見」です。


序文。
…おいちゃんは、はたしてPHPerなのだらうか?
仮説1:Yes
最近扱っている(っつか書いている)言語としては、PHPが一番多い。したがってこの瞬間という時間軸において、PHPerであると考えられる。
仮説2:No
PHPerとは「PHP言語のみを扱うプログラマ」のことである(要出典)。C、C++PerlJavaC#VBJavaScriptActionScriptObjective-CCOBOL については少なくとも業務経験があり、それ以外にもZ80aアセンブラ、N88-BASIC、ファミリーベーシックrubyPythonSmalltalkLISPHaskell、なでしこ、Brainfackなどについて、多少なり経験があるようなてめーが「単一言語を扱う」とかってピュアな世界に踏み込んでくるんぢゃねぇ。


…なんていうどうでもいい考察で頭をならしつつ。start。

1. パスワード認証sshでサーバーにログインし、vimemacsで開発をする。
PHPerは、生産性が低く、セキュリティ的に問題のある開発環境を愛用しているケースが多々ある。セキュリティ向上の為にはsshは公開鍵認証で使うべきだし、生産性向上のためには、一般的にはローカルに開発環境を用意して、Eclipse/PDT等の統合開発環境を使うべきであろう。

そもそもとして「IDEって本当に生産性が高いの?」って部分で色々懸念はあるのだけど、「開発環境でセキュリティ的に問題がある」って、なんだろう?
sshの話であるのなら、それは「接続環境」って言わない? 「パスワード認証 ダメ! ゼッタイ!!」は、特に違和感もなく賛同するけど。
IDEは…「IDEを使わない開発で相応の腕を磨いたあとで」使うならともかく。見ている限り「いきなりIDEから始める」と、九分九厘「IDEに使われ、振り回されてる」からなぁ。おいちゃんはわりと反対派。
生産性の向上云々いいますが。おいちゃんの開発は、概ね
PuTTYで公開鍵認証
SVNコマンドライン
・vi + コマンドライン
または
・WinSPで公開鍵認証
SVNは亀さん
・てけとうなテキストエディタ(最近はTeraPadかなぁ。Windows環境で、いいvi系エディタが見つけられてなくて orz)
で、大体5〜10倍くらいの生産性をはじき出してますがなにか?
IDEを使えば生産性が向上するの!!」なんていう銀の弾丸信仰やめて、「本当にボトルネックになってる場所」を一度、きちんと考察してみたらどないでしょ?

2. SVNなどのバージョン管理システムで、使い方が分からないのでブランチを切った事が無い。
開発ツールの学習に無頓着なPHPerは少なくない。例えば、バージョン管理システムを単なるファイル共有・履歴閲覧システムとして利用しているケースがある。リリースをしてもブランチを切らないプロジェクトは多々見かけるし、驚くべきことにソースコードを巻き戻すときに、履歴を閲覧してプログラマがコードを修正するケースさえある。

ブランチを「なぜ切るのか」をまずちゃんと明確にしてから、じゃないかなぁ?
実際問題、管理とかか引継ぎとかのことを考えると「わざわざ切るメリットも少ないねぇ」ってケースも少なくないので。

3. ウェブしか開発したことが無いのに、ソフトウェア技術全般を語る。
世の中には多種多様なソフトウェアあるので、PHPの常識が通用するとは限らないが、PHPerはPHPの常識に固執するときがある。デスクトップやケータイのアプリケーション、デバイスドライバ、OSやミドルウェアの開発は、ウェブ・アプリケーションの開発とは大きく異なる面もある。また、 Javaや.NETによるウェブ開発は、PHPによるそれとは大きく様相が異なる。

「PHPerはPHPの常識に固執するときがある」は、どの「単一言語er」でも一緒。
で、ほぼまったく同様のことがJavaerにも言えるのだが、彼らにこのことを話すると、大抵、烈火のごとく怒る(いやまぁその辺PHPerも似てるのだけど…PHPerは虐待されることになれてるからw)。
んで、真面目な話。例えば「Linuxで動かすdaemon系のブツ」を作る時は、PHPはもってのほかとして、Jaavだって使いたいとは1ミクロンたりとも思わないしなぁ、正直。
「きっちり」いきたいんならC、「ちょっとインテリジェンスなところがあるから効率は多少犠牲」にするならC++、が、おいちゃん的には選択肢の範囲内、かなぁ。

4. RDBは難しいからと言って、簡単なSQLしか、もしくは簡単なSQLも書かない。
RDBは、原則として正規形のテーブル設計で利用するものだ。RDBは、データの寿命がアプリケーションの寿命より長い事が前提となっており(DOA)、アプリケーションにあわせてテーブル設計をしてはいけない。ただし、速度的に問題が出るケースは、結合回数を減らすために正規形を崩すときはある。

そもそもとして「RDB語るなら、ちゃんと"リレーショナルデータベース、という数学(集合論)"を学んでからどうぞ」って思うんですがどうでしょ?
厳密に言うなら「そもそも、RDBに"テーブル"なんてないよ? あるのはリレーション(関係)だよ?」
RDBは概論としてはさほど難しくないと思うし、そもそも「RDBが難しいから簡単なSQLしか書かない」って、それ、日本語として成り立ってない。

5. PHPなどのスクリプト言語しか知らないのに、プログラミング言語の優劣を語る。
PHPは手続き型、もしくはオブジェクト指向型に分類される言語で、世の中にはLispErlangのような関数型言語も存在する。PerlPHPPythonRubyを比較しても、オブジェクトが使えるスクリプト言語の範囲は出ないので、狭い範囲の比較にしかならない。

そもそも「何をもって優れてるのか」っていう判断基準が意味不明だしねぇ。

6. PHPの遅さを知らないのに「最近のマシンは速いからプログラミング言語に速度は求められていない」と言い切る。
PHPはビルトインAPIの速度は高速だが、PHPコード自体の実行速度は速くない。他のスクリプト言語と比較しても遅い方だ(Computer Language Benchmarks Game)。CやC++Javaと比較すると処理によっては100倍以上も遅くなるので、最近の計算機を用いていてもPHPはパフォーマンスに注意しないといけない時がある。

まず「速度が求められていない」は、状況によってはtrueなので、そのあたりは真摯に向かい合うことが必要。
次に、速度以上にもうちょっとみんな「メモリ」を気にしようよ orz
サーバ管理してて、マジできついから orz

7. クソ重いPHPLightweight Languageと言ってしまう。
LLと言ってPerlRubyPython使いも友達だと主張しているように感じるが、LLという形容は不適切だ。PHPの実行速度は遅く、メモリ消費量も少なく無いので、手軽(easygoing)であっても軽量(lightweight)であることはない。LLと言う単語を使うたびに、軽薄な印象を周囲のソフトウェア・エンジニアに与えるかも知れないので注意が必要だ。

そもそもとして、LLの「Lightweight」って「マシンリソースに対する重量」ではなくて「開発者の開発負荷に対する重量」だったのでは?
http://ja.wikipedia.org/wiki/%E8%BB%BD%E9%87%8F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E
> 取り回しに優れ、コードの作成や修正が容易と見なされるプログラミング言語のことを指す
まぁ正直、あんまり興味ないしど〜でもいいっちゃぁど〜でもいいのだが。
おいちゃん的言語きり分けとしては「キッシュ系言語」だしw
> LLと言う単語を使うたびに、軽薄な印象を周囲のソフトウェア・エンジニアに与えるかも知れないので
…んな阿呆なエンジニア、いるのだろうか? いや書いてあるからにはいるんだろうけど……… orz

8. クソ重いPHPで、デザパタとか言い出す。
PHPコードの実行速度は遅いので、その中でも他のプログラミング言語と比較して遅いメソッド呼び出しが増えるGoFデザインパターンは、本質的にはPHPに向かない。一つのソースコードの整理手段としてはあり得るが、無闇にデザインパターンを推奨できるプログラミング言語ではない。

なんていうか…見解が違いすぎて(苦笑
そんなに実行速度を重要視するなら「全部CかC++にすればいいのに(でもいやまぁ実際そうなると、今よりは楽園だなぁとは真剣に思う B-p)」。
そもそも、OOPにする時点である程度「実行速度とメモリなどの、ようはマシンリソースを犠牲にしてでもほしい何かがある」んでしょ?

9. クソ重いPHPで、クソ重いフレームワークCakePHPsymfonyZend Framework)にこだわる。
PHPコードの実行速度は遅いので、メソッド呼び出しが増え、実行コード量が肥大するフレームワークは、本質的にはPHPには向かない。ライブラリがセットになっているため生産性が向上し、ソースコードの整理にもなるためフレームワークの採用が一般化しているが、オーバーヘッドも認識しておくべきであろう。

8番と一緒。

10. クソ重いconcrete 5やWordPressMovableTypeで何でも書き出す、ショッピングサイトも作り出す。
PHPコードの実行速度は遅いので、PHPで書かれたミドルウェアは速度的に問題が出やすい。OpenPNEのパフォーマンスに苦しんだ人は少なく無いはずだ。しかし、なぜかPHPで書かれたミドルウェアは増加の一途であり、そしてそれらを拡張するコードも氾濫している。

あぁ…まぁ「ひどいの」多いよねぇ。とはいえ、別段PHPに限ったことではなくて。例えばJavaで書かれたいくつかのブツで、同じくらい「重くて遅い」のに、散々いやな思いはさせられましたが(苦笑
VBは………それ以前な気もする(苦笑

11. 仕様が曖昧で急激に変化するPHPで、テストファーストとか言い出す。
TDDは有効な開発手法だし、PHPでも用いられている。しかし、PHP自体の仕様が曖昧な面もあり、PHPのバージョンアップで後方互換性が失われるケースが多々ある。PHPは古くからあるビルトイン関数の挙動・仕様が変化することもあり、テスト・ケースを充実させても、将来のバージョンのPHPでは挙動を保証できない。

PHP自体の仕様が曖昧」については…落ち着いてきた部分もあるけど、でも、まだねぇ(苦笑)。まぁ、厳密には「言語」ではなくて「提供されているライブラリ」だと思うんだけど…そういう意味では、ひとつ疑問。別のほかの言語だってそれなりに「仕様変更」はあるんだけど、実際のところ「言語そのものの仕様変更」の量ってどれくらい違うんだろ?
あと。TDDは「将来のバージョンのPHPでは挙動を保証できない」からこそむしろ重要なんじゃないか、って思う。新幹線だったのが飛行機に「仕様変更」されたとしても、結果的に「大阪に到着できる」んなら、対象クラスは「問題なく動く」っていえるんだし。


12. 勉強会でリファレンスに書いてあるような、分かりきった事を発表する。もしくは理解できていない事、誤った内容を発表する。
特にPHPerに限った話ではないが、試行錯誤でアプリケーションが書けるPHP育ちのプログラマは、何か誤解したまま突っ走しる傾向はあるような気はする。若さなのだと思うが、彼らのPCが赤く無いので大目に見るのは難しい。

普通に面白い話"も"聞けると思う。っつか、上述を言い切るなら、相応の期間の調査とその結果が必要じゃない?
> 試行錯誤でアプリケーションが書けるPHP育ちのプログラマは、何か誤解したまま突っ走しる傾向はあるような気はする
これも別にPHPによらない。他の言語でもまったく一緒だと思う。

13. ブログで自らの無知をさらけ出す。
PHPの事が書いてある分にはそうではないが、独善的で主観的なPHPerのブログは多々あるように感じられる。典型例として、自分が使うツールの重要性や利便性を強調し、必須ツールとしているケースが思い浮かぶが、そういう場合に同種ツールとの比較検証が詳細にされる事はほとんど無い。

これは…Javaerのほうが多く見えるんだけど気のせい?


なんだろ…うん全体的にみて、なんとなく「違和感と嫌悪感」を、山盛りで感じる。
多分、その根幹の一つは、ここ。

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

いやべつに「おいちゃんがPHPを愛しているか」ってのはおいといて。
おいちゃんの場合は少なくとも
・他のプログラミング言語を、業務で使う程度のレベルまではやった上で
いくつかの言語については切り捨てているし(具体的にはVBC#Java)、
・開発ツールをある程度つかって、検証した上で
使わないっていうかむしろ使えないなぁ、って思ってる(Eclipseとか)。いや「好みにカスタマイズすると」なんとかはなるんだけど、そこまでの労力をはらうメリットが見出せない(苦笑)。
あぁちなみにEclipseを「他人が使う分」には「いいんじゃない?」って思ってる。おいちゃんの肌と思想に合わないだけだから。


…なんだけど、まぁ典型的にはJava屋さんの若いあたりに上述のような話をすると大抵、面白いくらい否定的な反応をしてくれる。
ちなみに「古くからのJava屋さん」で一人「…そうなんだよねぇ昔はメモ帳でもいけるような言語だったのにねぇ」と、しみじみ嘆いてた人がいたなぁ、ってのは余談。


んと…つまり。
「無知を改めましょう」という知識の啓蒙に見えてその実「自分の見解を相手に押し付けようとする」雰囲気が見て取れるのが、あるいは少なくとも「自分が是と思えないものはすべて非なんだ」っていう感覚の押し付けが見て取れるのが、イヤなんだと思う。


という感想。


あんど余談。
………もしかして、これが「竹の花が咲くと襲ってくる」 と言い伝えられている、PHP"dis"er、なのかしらん?w