綺麗に死ぬITエンジニア

プログラミング言語の種類が大量に存在する理由

2016-01-27

現在、世の中には大量のプログラミング言語が存在します。

それらのプログラミング言語が統一され、1つのプログラミング言語で全てのシステムに対応できるようになれば、学習コストも低減し、一見メリットが多いようにも感じます。

今回は、なぜ世の中にこれほどまでのプログラミング言語が存在するのか、考えてみます。

現在のプログラミング言語の多さ

まず前提として、現状のプログラミング言語の多さについて。

現在実務で使われているメジャーなプログラミング言語は、大体以下のようになっています。

  • 組み込み系ならC言語、Java
  • WebならPHP、Java、Ruby、Python
  • ブラウザ上ではJavaScript、CoffeeScript、TypeScript
  • ゲーム開発ならC++、C#、Java
  • スマホアプリ開発ならObjective-C、Java
  • 研究用途ならR言語、Python、FORTRAN、Haskell

これ以外にも、世の中には数百種類のプログラミング言語が存在すると言われています。

なぜ、こんなにも大量のプログラミング言語が存在するのでしょうか。

プログラミング言語への需要の増加

こうなった背景には、プログラミング言語、もっと言えばコンピューターやシステムへの需要が大幅に増加したことがあると考えられます。

需要が増加し、システムによって解決すべき問題の種類も多様化したため、対象となる分野が広がり、問題解決へのアプローチ方法も多種多様化してきました。

例えば、それぞれのシステムや開発プロジェクトによって、以下のうちどれを重要視するかは全く異なります。

  • 信頼性(バグや脆弱性の低減)
  • 性能(応答速度の向上)
  • 可読性・拡張性(コーディングし易さ)
  • 納期(低予算での実現、高速開発、学習コスト)

しかし、現状ではそれら全てに柔軟に対応できる言語が開発されていません。というのも、現実的には今この瞬間にも特定の要求に対応した新たな言語が生み出されているかもしれないのです。

つまり、今はまだプログラミング言語全体で全ての需要に応えられるような状態になっておらず、まだまだ成長する余地があることを意味しています。

プログラミング言語のみならず、IT技術全般で同じことが言える

例えば、OSでも同じことが言えて、WindowsやLinuxなど様々なOSがあり、さらに一口にLinuxと言っても様々なディストリビューションが存在します。

そしてそれぞれに一長一短があり、1つのOSで全ての分野に対して完璧に対応でき、全てのエンジニアに好かれるような状況にはなっていないのです。

そのため、1つの技術に集約することができない現状があります。

今後、全てに対応できる究極のOSやプログラミング言語が登場すれば、1つの技術に集約することがあるかもしれません。しかし、それはまだまだ先(何百年何千年後)の話だと思っています。

例えば量子コンピューターが開発されてハードウェアの性能が理論的に頭打ちになり、ソフトウェアに要求されるもの(需要)が全て出尽くしたとき、ようやく1つに全機能を集約できるプログラミング言語の要件が定義できるようになりますから、そこで初めてその究極の言語を作り始めることができるようになります。

よって、様々なOSやプログラミング言語などのIT技術が分散しているということは、IT業界はまだまだこの先成長する業界であることを意味しているのだと思います。

かつて、言語を統一しようとする動きもあった

なお、調べてみたところ、かつて言語を統一しようとする動きがあったそうです。

その言語は、PL/Iという言語だそうです。

相当昔ですが、当時三大言語と呼ばれていた「FORTRAN」「COBOL」「ALGOL」を統合したものであったそうです。現在でも使われているそうです。

今後も、もしかするとある程度プログラミング言語自体の進化が止まった時点で、言語統合の動きがあるかもしれません。とはいえ、IT技術の流れはまだまだ早いので、どうなるのかはさっぱりわかりませんが。

まとめ

IT技術がたくさん分散しているということは、 IT業界がそれだけ成長する余地があるということです。この地球も、様々な生物が混在していることで、優秀な生物だけが生き残り、文明が発展してきました。その原理に似ています。

ひとまず現在のプログラミング言語において言えることは、今後その成長する業界で取り残されないように、様々な言語についてバランスよく理解しておくべきだということでしょう。もしかすると10年後には、今はまだない新しい究極の言語が、この業界を支配している……かもしれません。