プログラミング言語の選び方は美しさ or 実用性の2通りある
プログラミング言語を選ぶのはプログラミングの「考え方」を選ぶのと同義です。
人は言葉を使って思考をします。プログラムロジックを考える際に使う言葉がプログラミング言語です。
- 手続き型言語ならば、手続きの積み重ねとしてロジックを考えます。
- オブジェクト指向言語ならば、オブジェクト間でメッセージをやりとりするイメージでロジックを考えます。
簡潔で美しい構文を持つ言語を使ってる人は、ロジックを考える時も簡潔で美しいロジックが浮かびます。
冗長で煩雑な構文を持つ言語を使ってる人は、冗長で煩雑な思考をしてしまいがちです。
だからといって、必ずしも構文が美しい言語を選べばいいわけではありません。
構文がいくら美しくても、実用性の低い言語が存在します。
構文が煩雑で言語として美しくなくても実用性が高い言語もまた存在します。
そこで今回は、プログラミング言語の2通りの選び方(美しさ or 実用性)を紹介します。
美しい言語を選ぶべき理由
美しいプログラミング言語というと何を思い浮かべますか?
私の場合Rubyが浮かびました。
Rubyは構文に無駄がなくソースコードが美しいですし、さくさく書けて書いていて楽しいですが、Windowsだとうまく動かないケースが多いという欠点があります。Rubyが標準で持ってるFTPの機能がWindowsではうまく動かなかったことがあります。それとShift_JISのファイルを読んでString#subで比較したら文字コードエラーが起こりました。ソースコードの文字コードとファイルを読む時に指定する文字コードも合わせて読み込んだファイルも確かにShift_JISであることを確認したのですが解決しませんでした。
同じ処理をPHPで書き直したら何の問題もなく動きました。
じゃあPHPを使った方が良いかというとそうとも言い切れません。
使う言語によって学べる考え方が異なる
Rubyで配列の中から3の倍数の要素を収集する場合以下のように書けます。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] results = numbers.select {|item| item % 3 == 0 }
同様の処理をPHPで書くと
$numbers = array(1, 2, 3, 4, 5, 6, 7, 8, 9); foreach ($number as $numbers) { if ($number % 3 == 0) $results[] = $number; }
となります。Rubyは高階関数を使った簡潔な書き方が出来ますが、PHPだとべたにfor文で繰り返し処理を書きます。といってもPHPもバージョン5.3からは高階関数をサポートするようになったので現在はRubyと同じような書き方が出来ます。
とはいえRubyはとうの昔から高階関数をサポートしていたので、Rubyプログラマーの方がPHPプログラマーよりも洗練された表現でロジックを書くことが出来ました。
これはC#とJavaの関係も同じです。C#もまたRubyのように早い段階で高階関数をサポートしていました。Javaが高階関数をサポートしたのはJava8(2014年)なので、それまでの間Javaプログラマーは高階関数を使ったロジックの組み方が出来なかったんです。これを揶揄してJavaプログラマーをforおじさんと蔑む呼び名がネットで流行っています。
前述したとおり、使っている言語によって思考は影響を受けます。RubyやC#を使っていた方がPHPやJavaを使っているよりもスマートな思考をしやすくなるんです。
これが美しい言語を選ぶべき理由です。
実用性の高い言語を選ぶべき理由
動作しなければ意味がない
前述したとおりRubyで書いてうまく動かなかったプログラムをPHPで書き直したら動いたということがありました。
RubyはもともとUnix/Linux上で動くことを設計されたものなので、Windowsでの動作は不安定なようです。
どんなに美しい構文を持つ言語でもプログラムが動作しなければ使えません。
実用性と求人数
Rubyプログラマーの求人よりもPHPプログラマーの求人の方が圧倒的にたくさんあります。
実用性の高い言語の方が求人数は多くなります。
もちろんRubyプログラマーの求人も少なくない、かつ、Rubyプログラマー数がPHPプログラマー数に比べてずっと少ないので需給バランスで考えると就職は十分可能ですけどね。
美しい言語と実用性の高い言語をバランスよく使おう!
仕事ではPHPを使うけど、趣味ではRubyを使うといったように、どちらか一方にならず両方使うことで、両方の良い所を学ぶことが出来ます。
もし今自分が使っている言語がどちらか一方の言語に偏っている場合は、利用言語のポートフォリオを見直してみると良いかもしれません。