PHP

新人プログラマがPHPを学ぶべき理由

PHPは優れた言語だ!

それも、他の言語の追従を許さない程に優れている言語なのである!!

私がそう考えている理由についてお伝え出来ればと思って、この記事を書く事にした。

無限に雇用を生み続ける魔法

かつて、C++が複雑怪奇な言語仕様を内在させる事によって開発期間を長期化させ、労働者たちの安定雇用を創出した。

PHPは雇用創出に対してのもう一つの答えを提示してくれたのである。
定期的なアップデート、それも後方互換が無いアップデートによって仕事を創出し続けているのである!!

もちろん、アップデート以外にも雇用創出する為の工夫が随所に施されているので、その紹介もしていきたいと思う。

素晴らしき雇用創出の方法

貧弱な構文

バージョンアップによって構文は少しずつ改善されている。
言語が出来てから20年経過し、ついに定数に配列が使えるようになったのだ!!
そう、2015年以前のPHPでは定数に配列を使う事さえも出来ないような環境だったのだ!!!

// 2015年以前に定数で配列を表現する様
define("CONSTANT1", 1);
define("CONSTANT2", 2);
....

// PHP7以降
define('CONSTANTS', array(1, 2, 3));

ああ、素晴らしい改善だ!!
たとえ定数に配列が欲しいと思っていたとしても、言語仕様が変わるまで待ち続けるしかない!!!

貧弱な構文にしておく事によって、プログラマのタイピング量は増加する。
タイプ量が多ければ、それだけ周囲の人間からは仕事をしているように見えるという、素晴らしい効果が発生するのだ。

一貫性の無い関数

配列を操作する関数を見てみようじゃないか。
例えば、array_filterとarray_map。
filterやmap関数は、適応する関数と、適応される配列の2つを引数に受け取るのが定番だ。
それがPHPではどうなるか、見てみよう。

// PHPでは…

// 適応する関数は第二引数に渡す
array_filter([1, 2, 3, 4, 5], 
  function($var){
    return $var & 1; });

// 適応する関数は第一引数に渡す(!?)
array_map(function($var){
  return $var * $var; }, [1, 2, 3, 4, 5]);

驚いたかな?mapでは第一引数で関数を受け取り、filterでは第二引数で関数を受け取るのだ。
こういった細かな関数のインターフェースを変える事によって、PHP習得までに必要な学習期間を増加させる事によって参入障壁を構築しているのだ!

誰にでも簡単に習得されてしまっては、あなたの仕事が危機に晒されてしまう。
もしもこれがClojureなんて言語だった場合には...

;; Clojureでは、これだけのコードにしかならない
(filter odd? [1 2 3 4 5])
(map #(* % %) [1 2 3 4 5])

たったコレだけのコード量にしかならない。
第一引数には関数を、第二引数には配列を、といった整備が行われてしまっているから、誰でも簡単に習得出来てしまう…
コード量も少ないので記述は一瞬で終わってしまい、周りの人間からはあまりタイピングをしていない、仕事をサボっているプログラマのように見えてしまうのだ!

これは、本当に危険な事なんだ。プログラミングの分からない人間がプログラマを評価しようとしたら、普段から一所懸命にタイピングをしているかどうかで判断されることがままあるのだ。

気まぐれな帰り値

array_mapは、関数を適応した結果データが帰り値となる。
sortは成功したかどうかの結果をboolを返す。
array_pushは処理した後の配列の長さをintで返す。

普通の言語であれば、関数を適応した配列データを帰り値としているが、PHPではそんな事はしない。

これらの関数仕様によって、PHPを普通の言語から一線を画する存在へと引き上げているのだ。
これらもまた、学習コストを引き上げ、参入障壁を構築してくれている。

PHPプログラマは、配列操作の引数の順番と、帰り値の詳細を全て暗記する必要性があるんだ。

基本構文に織り込まれたバグ

foreachを使ったとしよう。

foreach([1, 2, 3, 4, 5] as $id){
  echo $id; }

foreachが終わった後、$idはどうなると思う?

echo $id; // => 5

驚いた事に、開放されずに残り続けるのだ!

C#やJavaからやってきた連中を罠にハメて、よそ者を寄せ付けないような素敵な工夫まで施されている。

// 驚き最小の原則に従うならば、こう記述する
foreach([1, 2, 3, 4, 5] as $id){
  echo $id; }
unset($id);

上部だけの構文アップデート

構文が改善されてしまうと仕事効率が上がってしまう。
仕事効率があがるとタイピング量が減ってしまう。
タイピング量が減ると、仕事評価が低下してしまう!!

これは大問題だ。だからPHPでは上辺だけの構文に手を入れる事によってお茶を濁すのだ。

宇宙船演算子<=>を導入した!!それで仕事効率が上がるか?
そう、効率がよくなるような構文は取り入れられないのである。

例えば、Elixirではパイプライン演算子が導入されている。
だが、これを持ち込んでしまうと、foreachで作られたピラミッド群が消失して、仕事の総量が減ってしまう!!
そんな変更は危険すぎる!!だからPHPにはこういった構文の変更は取り入れられず、上辺だけの演算子でお茶を濁すのです!!!

結論

PHPはとてもディスられやすい言語であるように思うが、それはものの見方が歪んでいるだけ。
雇用の創造という意味では、これ以上にすぐれた言語は無い。
就職先が見つけられるか不安に思っている情報学部生は、ぜひともPHPに取り組むべきだと私は思う。