プログラミング言語で一番有名なのはCだと思います。 そしてCに次いで有名なのがおそらくJava。 しかしプログラミング言語にはこのCとJavaの他にも、たくさんの種類の言語が存在しています。

今日はなぜプログラミング言語がたくさんあるのかについて書いてみます。

プログラミング言語も進化する

「なぜ、こんなにもプログラミング言語が存在するのか?」

この答えは「言語も人間同様に進化するから」です。 さらに、「言語にも得意・不得意な分野というのが存在するから」とも続きます。

例えば計算は速いけれど柔軟性がなかったり、逆に柔軟性はあるけれども計算が遅かったり、あるいはとにかく省メモリで実行できたり、言語によって得意なことが異なっているんです。

とはいっても分かりにくいと思うので、せっかくなので言語についての簡単な歴史とともに解説していきたいと思います。

プログラミング言語の歴史

機械語

コンピュータは0と1からなる機械語によって動きます。

プログラミング言語というのはあくまで人間が命令しやすいように書かれているだけで、中身を突き詰めると機械語に変換されています。 コンパイルというのがその変換作業を指す言葉ですね。

アセンブリ言語

機械語の0と1を直接操作するのは人間にとっては不可能な領域です。 そのためプログラミング言語としては、アセンブリ言語がまず作られました。 アセンブリ言語によってコンピュータに対して人間が人間的な方法で命令をすることが可能になり、「バンザイ」と言いたいところなんですが、やはり問題がありました。

アセンブリ言語は機械語と1:1の関係にある言語だったのです。 とても使いやすい言語とは言えず、複雑な処理をするにはまだまだ効率が悪い言語だったんですね。 そのため、機械語・アセンブリ言語までを低水準言語と呼び、このあと登場する手続き型言語以降を高水準言語と呼んだりもします。

手続き型言語

手続き型言語はFORTRANやCOBOL、そしてCのような現在でも金融機関等で使われている言語です。

この手続き型の一番の特徴としては、実行すべき計算を一つの大きな塊にすることが可能になり、それをいつでも呼び出すことを可能にした点にあると思います。 僕らがいま関数と呼んでいる機能です。 関数の登場によって、アセンブリ言語では面倒だった処理が簡単に書けるようになった訳です。

今でこそ手続き型というのはよくスパゲッティコードをたくさん生み出したことで揶揄されたりしますが、アセンブリ言語と比べればかなりの進化です。

オブジェクト指向型言語

1980年にC言語が誕生し、あまり差もなくオブジェクト指向という概念が生まれました。 そしてこの概念を取り込んだのがC++であり、日本のSEの方々にとってはおなじみのJavaになります。

Javaの開発チームは当初はC++を拡張しようとしたそうですが、ハードウェアに依存しない言語を生み出すのが目的だったために新言語(Java)の開発へ舵を切ったそうです。

オブジェクト指向について

プログラミングの勉強では、オブジェクト指向というのは本の中盤以降で扱われ、おそらく初学者にとって一番理解が難しい分野になると思います。

クラスは関数と違って内部に値を保持させたり、継承によって別のクラスのメソッドを使えるように設計できるのが便利なところだと思うんですが、それなりの規模のプログラムを書いてみないと、その良さもおそらく分からないと思います。

ゲームのキャラクターのように、似た機能を持つインスタンスを複数展開する必要が出てこない限りは、始めのうちはスルーしちゃってもいいセクションかもしれません。

スクリプト言語(軽量言語)

最近はスクリプト言語に人気が集まっています。 PerlやJavascript、Python、PHP、Rubyなどです。 (当然ですが、これらの多くはオブジェクト指向の概念を取り込んでいます。)

これまでの言語ではプログラムの実行には事前にコンパイルしておくことが必要でしたが、スクリプト言語ではこの作業が不要になっており、その代わり、1行ずつ順に機械語への翻訳が行われるようになっています。 また、スクリプト言語の多くには動的型付けという概念が備わっていることが多く、コーディング量がかなり削減されるため、初心者だけでなくプロフェッショナルのプログラマーからも人気のある言語です。

しかしこれらの特性故に、実行速度がコンパイル言語と比べると圧倒的に遅くなってしまい、また、型を明示しなくても動くことからバグの温床になりやすかったりもして、処理速度や正確性が重視される金融や科学の分野においては今でも以前のようなコンパイルありきの静的型付け言語が用いられています。

プログラミング言語は新しい方が良いの?

ここまでプログラミング言語の進化(改良)の歴史について軽く触れてきましたが、実は必ずしも新しい言語を使うべきとは言えない事情もあります。 もちろん新しい言語であるほど言語設計がスマートになっていることが多いので、コーディングのしやすさという面では新言語を選ぶ意義はあると思います。

しかしプログラミングには、第三者によるライブラリを使うことで、できることが大きく広がっていくという性質が内包されています。 コミュニティドリブンというやつです。 なので新しすぎる言語には、ユーザー不足により必要なライブラリが揃っていないというデメリットも付いて回る訳です。

ちなみに、AI(機械学習)用途で人気絶頂にあるPythonは1991年に誕生した言語です。 言うほど新しい言語でもないんですね。

僕がPythonを使い始めたのが2012年なんですが、その頃の国内の様子はPythonなんかよりRubyやPHPの方が圧倒的に人気でして、Pythonは殆ど話題に登らないような言語だった記憶があります。

この先: WEB3.0

今も言語の進化は続いています。 既存の言語の改良はもちろんですが、新しい言語がランキング上位に食い込んできていたりします。

僕もまだまだ勉強途中ですが、JavascriptとRustはこれからのWEB3.0時代、かなり役に立ちそうな気がしています。

言語の選定について

プログラム言語のランキングというのがありまして、新しく学ぶ言語の選定をする際には個人的によく参考にします。

ランキングは色んなサイトで集計・公開されていますが、僕としてはGithub内の活動データを元にランク付けしているGitHut2.0が好みです。 GitHut2.0 |Github Language Stats