プログラミング初心者にはnode.jsよりPHPを勧めたい理由
「言語いくつも覚えたくないからサーバ側もnode.jsでJavaScriptに統一したい」
読者の方から、相談メールが届きました。
ということで、こちらに回答していきます!
Contents
node.jsはシングルスレッドノンブロッキングIOなのでコードが難しい
例えばPHPでファイルを読む時に以下のような書き方ができます。
$data = read("ファイル名");
ブロッキングIOの書き方です。分かりやすいですよね。
それに対して、node.jsの場合、ノンブロッキングIOの書き方をしなければなりません。
read("ファイル名", function(data) { });
ファイルを読んで取得したデータをコールバック関数の引数として受け取らなければならないんです。初心者には難しいですよね?
ファイルを一つ読むだけなら大した違いに見えないかもしれませんが、3つのファイルを読む場合、
PHPならば、
$data1 = read("ファイル名1"); $data2 = read("ファイル名2"); $data3 = read("ファイル名3");
と書けるところを、node.jsでは、
read("ファイル名1", function(data1) { read("ファイル名2", function(data2) { read("ファイル名3", function(data3) { }); }); });
というふうにコールバック関数がネストする形で書かなければなりません。いわゆるコールバック地獄というやつです。これは熟練者でもしんどいので、初心者にとっては言わずもがなです。
node.jsよりPHPの方が日本語の情報が多い
日本語の書籍もWebサイトもPHPの方が圧倒的に多いです。
node.jsの場合、ちょっとしたエラーが出て、原因を調べるだけでも日本語ページがなく、stackoverflow.comなどの英語サイトしか出てこないことがよくあります。
JavaScriptとPHPは文法が似てるから覚えるのがかんたん
//JavaScriptのif文 例 var a = 3; if (a == 3) { } //PHPのif文 例 $a = 3; if ($a == 3) { } //JavaScriptのfor文 例 for (i = 0; i < 10; i++) { } //PHPのfor文 例 for ($i = 0; $i < 10; $i++) { }
ほとんど同じですよね?このように文法の大部分は共通しているので、JavaScriptを知ってる人にとってPHPを学ぶのは簡単です。
PHPにかぎらず、多くのプログラミング言語の基礎的な構文は共通部分が多いので、一つ言語を学べば、次の言語を学ぶのは以前よりもずっと簡単になります。学べば学ぶほど、学ぶのが楽になっていくのがプログラミングなんです。
node.jsは安いレンタルサーバで動かせない
プログラミング学習のモチベーションを保つ秘訣の一つは、作りたいものを作ってインターネット上に公開することです。
PC上で開発するだけでもいいのですが、ネット上に公開するところまでやると達成感があります。
うまくいけば、ユーザーから使ってもらえて、感想や要望などのフィードバックがもらえるかもしれません。そうなれば、さらなる改善をしていくことになり、学習も捗ります。
ところが、node.jsの場合、インターネット上に公開するのが少々難しいんです。一番手軽な方法である「安いレンタルサーバ」を使えないためです。
安いレンタルサーバの多くは、
- PHP
- Ruby
- Python
- Perl
を動かせますが、node.jsは動かせません。
もちろんVPSやクラウドを借りれば、node.jsを動かせますが、レンタル料も高くなりますし、環境のセットアップもしなければなりません。
その点、レンタルサーバは既に環境がセットアップされたものを使えるのでかんたんです。
上記4つの言語の中でも、PHPはファイルを公開ディレクトリに置くだけで動かすことができるので一番簡単です。
それから、Ruby, Python, Perlは動かせてもCGIモードに限定されてるサーバが多いです。
CGIの場合、リクエストごとにプロセスを起動するので、フレームワークを使うと、読み込むモジュールが多いため、処理が重くなってしまいます。ですから、安いレンタルサーバでRuby on Railsのようなフレームワークを動作させることは困難なのです。
それに対してPHPは、安いレンタルサーバでも多くの場合Apacheの内部モジュールモードで動かすことができるので、フレームワークを使ったシステムでも高速に動作します。
node.jsの方が新しいので初心者でもベテランに追いつきやすいのでは?
そうともいえますが、node.jsも登場してからもう何年も経っています。その頃からやってる人はずっと先を行っています。
PHPは古い言語ですが、PHPのフレームワークはどんどん新しいものが出てます。新しいフレームワークを学べば、そのフレームワークの使い手としてベテランエンジニアと並ぶことは比較的かんたんです。
node.jsの方がPHPより高い給料もらえるんじゃないの?
エンジニアとして企業に就職するなら、PHPよりnode.jsを学んだ方がエンジニア数が少なく希少なので高い給料がもらえるかもしれません。
しかし、PHPの一流エンジニアはnode.jsの初心者よりもずっと高い給料をもらっています。
給料は、技術の種類 × 習熟度で決まります。
ですから、node.jsの一流エンジニアになれば、PHPの一流エンジニアよりもさらにレアだから高い給料もらえるはずとも考えられます。
ただ、これもケースバイケースです。
例えば、FacebookはPHPで作られていて、めちゃ儲かっています。LinkedIn(モバイル版)はnode.jsで作られています。LinkedInも今後伸びるかもしれませんが、今のところ、売上高はFacebookの方がずっと上です。PHPの一流エンジニアになってFacebookに就職したほうが高い給料もらえる可能性が高いとも考えられますよね。
そんなわけで、node.jsはJavaScriptなので、文法を新たに学ばなくてもいいですが、上記で述べた難しさ・デメリットがあるので、私は初心者にはnode.jsよりもPHPをおすすめしています!