ほぼ独学でPHPerになったつもりでも...

「ほぼ独学でPHPerになったITかあさんが言いたい、PHPのオススメ勉強法」 http://www.kaasan.info/archives/2623
エイプリルフールネタにも見えるが,そうじゃないと書いてあるのだからそうじゃないんだろう.*1

なぜかブクマされてたので一応突っ込んでおく.

なぜPHPはよくdisられてしまうか

他の代表的なサーバーサイドスクリプト
JavaPerlRubyなどがありますが、どの言語も汎用性があり、WEB以外にも使うことが出来ます。それに対しPHPはWEB専用であり、PHPを使ってソフトウェアを開発することは出来ません。
あくまでもWEBアプリケーションしか作れないのです。

Javaは「サーバーサイドスクリプト」じゃないな.PerlRubyにしてもスクリプト言語と呼ばれるけど,それら自体のことを指して「サーバーサイドスクリプト」とは言わないと思う.「スクリプト」と「プログラミング言語」の区別が付いていないのではないか.

「ソフトウェアを開発することは出来ません」.ソフトウェアとハードウェア,ファームウェアという単語くらい知っとけ.ぐぐっただけでも,そのくらいの単語の答はすぐに見つかるはずだ.*2 *3


そしてPHPが批判されるのは「WEB専用言語」だからではない.「言語仕様が糞過ぎる」からだ.

専用言語だから批判されるのであれば,PHPよりもSQLの方が「DB専用」でより適用範囲が狭いので,より強く批判されるはずだ.JavaScriptもブラウザ専用という点ではPHPと同程度には狭いだろう.*4

しかもPHPは他言語に比べて習得が容易であることからも『え?あなたPHPしか出来ないの?』とたまにdisられてしまうんです。

「習得が容易」なだけでなく「落とし穴が非常に多い」糞言語であることも重要.そして初心者は落とし穴があることにさえ気付かない.


PHPしかできないプログラマー」への批判はその通りだと思う.他のまともな言語を使うだけのスキルがないわけだから.

Javaしか使えなくてC/C++が使えない」人さえも,プログラマーとしてスキルが足りないという疑いが持たれたりする.PHPだけなら当然だろう.

配列が分からない・・

参考書の構文解説などで配列について項目がありますが、私は配列が本当に分からなかったです。
特に連想配列の意味が分からない

連想配列の意味が分からず、ここは苦労しました。

連想配列というか,要するに(順序つき)ハッシュテーブルのはず.*5

そういう意味では「『PHPの配列』は,『配列』では無い」.それを説明してないのは,質の悪い参考書を選んだからでは.一見簡単そうに見える入門書には,内容が間違っている物がとても多い.

配列だけ解説したところで非常に地味なので本としてはつまらないので売れないからだと思います。

ハッシュテーブルなんて,全てのアルゴリズム本に載ってる.載ってなければその本はゴミだから,すぐに捨てた方が良い.


この人がその辺りを理解できなかったのは,プログラミングの基礎である「アルゴリズムとデータ構造」の勉強をサボったからというのもあるのだろう.そしてそのことを教えてもらえる師匠に巡り会えなかったことも,この人の不幸の一つだ.PHP業界だとアルゴリズムとデータ構造を勉強した人が一人もいない会社などというのも,珍しくないのかもしれない.*6

PHPの構文はたくさんありますが、基本3つが使えればOKです。

正確には「制御構文」かな?

if文
foreach文
for文
while文・・・たま〜に使う、くらいかな〜

アレ?switch 〜 caseは?PHPにだってそれくらいはあるはずだよね?*7

switch 〜 caseは無くても書けることは書けるけど,コレ無しというのは論外でしょ.*8 *9

フレームワークを使うとMVC(モデル・ビュー・コントローラ)の概念が出来、フレームワークの仕様に乗っ取って「クラス」や「独自関数」も書くようになります。

それらの概念はフレームワークに関係無い.
クラスだってフレームワークとは直接の関係は無いぞ.自作したことはないってこと?

配列を制す者はPHPを制す!

私に以前こう言って下さった凄腕のプログラマーがいました。

それ,単に設計が悪いんじゃないか?*10 PHPにだって「一応」オブジェクト指向は導入されてるのだから.なんでもかんでも配列にするのは「悪い臭い」だと思う.

だからその「凄腕のプログラマー」とやらのスキルも,本当に凄腕だったのかは大いに疑問だ.


さて,この人のブログで「(SQL)インジェクション」とか「継承」とかで検索しても一つもかからないけど,ひょっとして全く知らないでPHPアプリ書いているのだろうか.ActiveRecordに全部任せてる可能性もあるけど,それにしても先が思いやられる.

まあそんな程度の人でも,まがりなりにも動く(ただし脆弱性の塊の)Webアプリが作れるというのは,良くも悪くも,悪くも悪くもPHPのスゴイ所ではある.


トラックバックがないのでコメントでリンクを貼り付けたのだが,承認待ちのままで公開する気は無いようだ.今までも自分の耳に痛い,批判的な意見を無視して,勉強をサボってきたツケが,このブログなのかもね.

Twitter

全く同感.


手軽にできるならレンタルサーバーもいいかと思ったけど,脆弱性のことを考えると確かに初心者むけではないな.いずれにせよインストールと環境設定も勉強すべきだから,ローカルにひとつ環境を作って弄り倒す方が勉強にもなってよろしい.

http://ja.phptherightway.com/
ほう,こんなのがあったのか.あのページをブクマしている初学者は,どうせならコッチの方をブクマすれば良いと思う.*11


でも初心者ほどマトモな入門書より,一見簡単そうに見えるけど怪しげな駄本・屑本を手に取る率が高い.そういう意味でも本当は師匠の存在は重要.書籍選びで名著ど屑本を区別するくらいはしてくれるから.*12

「配列」もPHPの変態設計の一つだと思う.これを「配列」と称しているなんて...

違う.

「自分より下手」ではなくて,「入門者以前のレベル」なのを問題視している.ソフトウエアとハードウエアという単語さえ知らないのは,今までどういう勉強してきたのか謎なレベル.「なんでも配列で書けるから配列を使えば良い」「switch〜caseは不要」的な所とか,怪しげなオレオレ哲学も散見される.

そしてPHP界隈にはそういう人が非常に多い手応えを感じる.


http://b.hatena.ne.jp/entry/www.kaasan.info/archives/2623

  • id:sucelie なんかツッコミどころ満載だな
  • id:techboon コンソールで動く言語に自分の狭い知識だけで堂々とこんな事言ってるからゆとり言語だと言われ続ける。割と本気で嫌悪する。
  • id:aquarla 読んでいると、PHP界隈には出来るだけ関わりたくないという気持ちがモリモリ湧いてくる

異議無し.

  • id:n46PHPを使ってソフトウェアを開発することは出来ません」ソフトウェアとはいったい・・・うごごご!|まともに学ぼうとしないから、こんな素っ頓狂な台詞が飛び出すんだ。

うおぅ.見逃していた.これはヒドイwww

  • id:hamukatumix なぜPHPがdisられるかというと、たぶんPHPしか知らずにプログラマを自認する人が多いからではないか。PHPの配列がメモリ上でどうなってるか、を意識するのがプログラマの入り口のひとつじゃないかと。頑張って欲しい。
  • id:UDONCHAN PHP意外の言語を習得してから学習すると良い
  • id:takigawa401 個人的にはJavaを勉強してからPHPを覚えることをオススメしたいです。PHPはユルいからどんな書き方もできてしまって気持ち悪いプログラム書く人がいるので…。
  • id:takun71 突っ込み所満載だが、まずはフレームワーク関係なく掲示板とか作ってみて、少しは理解してから使った方がいいと思う。多分この人フレームワーク上でのコピペしか出来ないだろ。
  • id:sakuratandotbiz PHPが嫌われてるのはこういう素人プログラマ風の人を大量生産したからだと思うけど
  • id:hamaco php これだから「これだからPHPerは」とか言われるんじゃないか的な内容。
  • id:tockri この方の理解モデルを想像することで、プログラミング初心者の間違い方の研究になるいいテキストだと思う。新人さんに教えのに役立ちそう。

入門書にありがちな「PHPには型がありません」「PHPは型を自動変換するから,型のことを気にしなくて良い」というのを鵜呑みにして,型のことを考えずに無茶苦茶書く人もいるんですよねえ...「PHPはエラーが出にくい」を「PHPはバグが出にくい」と誤解していたり.

んなわけないじゃん.

  • id:oukisyougun 「配列を制す者はPHPを制す!」・・・これ笑うところ? PHP勧める前に他の言語勉強しろよ。
  • id:luccafort 配列は確かにPHPですごく便利な部分ではあるけどそれを制したからといってPHPを制することは難しいのでは? むしろそこからが本当の地獄の始まりなわけで………
  • id:rryu 配列はそれを倒すとオープニングムービーが始まる系の存在だけど、PHPにはそれ以上のものがないからなあ。

半分くらいは同意.

PHPはライブラリやフレームワークまで糞揃いで,他に選択肢がないだけかもしれんし.

*1:エイプリルフールネタだったら,とても良く出来たネタなんだが,だったらそれと分かるようにしておかないとネタとして取り上げて貰えなくて,PHP初心者に誤解が広まってしまう.

*2:ブコメ見るまでスルーしてたわ.

*3: http://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2

*4:Excel上で使うVBスクリプトなども,そうかもしれない.

*5:実装については一応触れてないのかな? http://php.net/manual/ja/language.types.array.php

*6:日本では「Javaできます」な人を十人集めても,分かるのは私一人というのもあり得るくらいだし...頭が痛い.orz

*7:http://php.net/manual/ja/control-structures.switch.php

*8:switch〜caseを使ってないということは,コードを綺麗に書くという習慣もないということだろう.つまりは「動けば良い」タイプの人間ということ.

*9:自分も小学生の時には,似たようなことやったけどさ...「switch〜caseなしが許されるのは小学生までよね〜」「キャハハ」なアレの世界だ.

*10:「ポインタを制す者はC言語を制す」なら,まだしも分からなくもない.C言語は良くも悪くもポインタに頼り切った言語だから.

*11:にしても,いきなり5.4を勧めるのは賛否両論ある部分だな. http://developers.slashdot.jp/story/13/03/26/0247229/

*12:日本には屑本があふれてる.
http://d.hatena.ne.jp/JavaBlack/20080401/p1
http://d.hatena.ne.jp/JavaBlack/20090130/p1
http://d.hatena.ne.jp/minekoa/20080503/1209799681