なぜプログラミング言語はこんなにたくさんあるのか?
こんにちは、エンジニアのgamiです。最近は、統計解析がやりたくてPythonの勉強を細々としています。
僕がプログラミングの世界に触れたとき、気付いたことがありました。それは、「プログラミング言語というのは想像の何倍も数がある」ということです。たとえば次のQiitaの記事では、200種類のプログラミング言語が紹介されています。
もちろん、「実はすでに多くが淘汰されこの中の5つくらいしか使われていません」と言われれば納得感もあります。しかし、たとえばStack Overflow Developer Survey 2020という調査のMost Popular Technologiesに掲載された言語のランキングを見ると、プログラミング言語の人気としても割と分散しているように見えます。
(Stack Overflow Developer Survey 2020。ちなみにHTML/CSSやSQLはプログラミング言語ではない)
プログラミングを仕事にしない人にとっても、「なぜプログラミング言語はこんなに多いのか?」を理解することは重要です。たとえばシステム開発において、そのシステムをどのプログラミング言語で開発するかを選択することは、その後の生産性を大きく左右します。また、プログラミング言語をたくさん生み出してきたエンジニアコミュニティの実態を知ることは、エンジニア採用にも関わります。
今回は、「なぜプログラミング言語はこんなにたくさんあるのか?」について一緒に考えましょう。
プログラミング言語は作れる
「なぜプログラミング言語はこんなにたくさんあるのか?」という疑問は、主に次の2つの疑問に分解できます。
この2つの疑問は一部関連していますが、ニュアンスが少し違います。言い換えると、前者は「最初からプログラミング言語は1つ(または少数)で良かったのでは?」という疑問であり、後者は「最強のプログラミング言語が1つに決まるなら他は淘汰されるのでは?」という疑問です。
まずは、「なぜプログラミング言語は増えるのか?」という疑問を考えましょう。
実は、「プログラミング言語」というものは企業や個人が新しく作ることができます。プログラミング言語を日本語とか英語と同じようなものだと理解してしまうと、これは意外に思うかもしれません。人間が会話で使うような言語を人工的に作った例は、少なくとも僕はエスペラント語しか知りません。
しかし、「プログラミング言語」はもともと自然言語ではなく人工言語であり、頑張れば誰でも作ることができます。たとえば現在でも広くで使わるRubyというプログラミング言語は、1995年に日本人のまつもとゆきひろさんが開発しました。また、ここ数年で採用事例が増えているGoは、Google社内で作られ2012年に一般公開された言語です。
プログラミング言語をものすごく雑に説明すれば、「どう書いたらどう解釈させるか」のルールを決めてそのルールを実現するためのプログラムを記述したものです。つまりは、プログラムを書くのに使うプログラミング言語自体もまた1つのプログラムであり、頑張れば個人でも勝手に作り始めることができるということです。極端な例だと、世の中には日本語プログラミング言語というものがあり、次のようなプログラムが動いたりします。
プログラミング言語は日々進歩する
開発者がプログラミング言語を開発するきっかけは、たくさんあります。その1つは、目の前のプログラミング言語を見て「もっと良いプログラミング言語が作れるはずだ」と考えることです。
他の多くのソフトウェアと同様に、プログラミング言語も「リリースして終わり」ではありません。「PHP」や「Python」といったプログラミング言語の名前の後には、よくバージョン番号が付けられています。多くのプログラミング言語は、日々改良され、より使いやすい新バージョンが定期的にリリースされます。1つのプログラミング言語を使い続けて、新しいバージョンに追従しているだけでも、生産性は上がっていくかもしれません。
しかし、あるプログラミング言語の根本的な設計思想や根幹の仕様を後から変更するというのは、一般的には難しいです。ある程度の人気があるプログラミング言語は、すでに世界中のソフトウェアの実装に使われています。そのプログラミング言語に後方互換性の無い大きな仕様変更をすることは、それらのソフトウェアのメンテナンスを困難にしてしまうからです。
そんな中で、新しいプログラミング言語は生まれます。そしてたくさん生まれた言語の一部は、広く世界中の開発者の支持を集めて、多くのソフトウェア開発に使われるようになります。たとえば、Perl(1987〜)と、その影響を受けて開発されたRuby(1995〜)のトレンドを比較すると、明らかに世代交代が起こっています。
(Googleトレンドで作成。もちろん、Perlもいまだに開発が続けられている人気の強い言語です)
このように、プログラミング言語にはライフサイクルがあります。
まだイメージできない人は、企業に喩えて理解するのもいいかもしれません。企業が大きくなると、やれることは増えますが、既存顧客からのしがらみも多くなります。あるとき、そんな大企業から抜け出してスタートアップを立ち上げる人が出てきます。最初はスタートアップでも、良いアイデアとメンバーと顧客が揃えば、次第に大企業の顧客を奪っていきます。
プラットフォームによって使える言語が決められていることがある
「なぜプログラミング言語は増えるのか?」がわかったところで、2つ目の疑問である「なぜプログラミング言語は複数必要なのか?」も考えていきましょう。
ある要件のソフトウェアを開発したいとき、「複数あるプログラミング言語のどれを使っても実現できる」という状況は、実はかなり多くあります。特にサーバーサイドのプログラムの場合は、比較的自由にプログラミング言語を選ぶことができます。たとえば「HTTPリクエストが来たら仕様通りのレスポンスを返せばよい」というだけであれば、大抵のプログラミング言語で実現することができます。
一方、特にクライアントサイド(フロントエンド)では、「プラットフォーム側で開発に使えるプログラミング言語が決まっている」という状況も多々あります。たとえばWebページの表示に使われるWebブラウザでは、基本的にはJavaScriptまたはWebAssemblyというプログラミング言語で書かれたプログラムしか動きません。また、iPhoneアプリ開発をする場合、基本的にはAppleさんの決定に従ってSwiftまたはObjective-Cのいずれかを使うことになります。同様に、普通はAndroidアプリならJavaかKotlin、ゲームエンジンのUnityならC#を使うことになります。
このように、あるプラットフォーム向けの開発をするのに使用できるプログラミング言語が予め決められている、ということがあります。これが、プログラミング言語がいくつも必要になる理由の1つです。極論を言えば、世の中の主要なプラットフォームが同じ1つの言語だけを採用すればこの世のプログラミング言語は1つで済むかもしれません。しかし、各社が個々のプラットフォームに最適なプログラミング言語を自由に決めてそれをサポートしたいというのは自然であり、それを制限するのは現実的には難しいでしょう。
ちなみに細かいことをいうと、最近では使える言語が決まっているプラットフォームであっても、開発自体は別の言語でできるようにするツールが普及したりしています。たとえばReact Nativeを使うと、基本的にはJavaScriptを使ってiPhoneやAndroidのアプリを開発することができます。ただし最終的にはそのプラットフォームが解釈できる形に変換されるので、プラットフォーム側の制約から完全に自由に開発できるというわけではありません。
プログラミング言語によって、解決したい課題が異なる
プログラミング言語の選択が自由な場合であっても、選べるプログラミング言語が複数あるというのは重要なことです。それは、一般にプログラミング言語によってそれぞれ得意な領域や解決したい課題も異なるからです。だからこそ開発者は、いま作ろうとしているソフトウェアに最適なプログラミング言語を選ぶことができます。
たとえばRubyを開発したまつもとゆきひろさんは、「Rubyは楽しさに焦点を当てて作りました」と語っています。
(『Ruby プログラミング入門』まえがき by まつもとゆきひろ さん)
またGo言語は、現代の大規模ソフトウェア開発に関わる問題解決のために作られたといわれています。
このように、プログラミング言語には、それぞれ異なる課題意識や設計思想があります。
さらに、こうした課題意識や思想の違い、そこから来る機能差分によって、そのプログラミング言語がどのような分野でよく使われるかが異なってきます。たとえばJavaはエンタープライズ大規模システム開発で広く使われています。PHPは古くからWebアプリケーションの開発を支えてきました。Pythonはデータサイエンスの分野で最も使われているプログラミング言語です。
使われる分野に偏りが生まれると、そのプログラミング言語の周辺に生まれるエコシステムにも偏りが出てきます。Pythonの例でいえば、Pythonユーザーにはデータサイエンティストも多く、検索すれば統計解析や機械学習のためのPythonのサンプルコードがたくさん見つかります。また、Pythonで使える数値計算のためのライブラリも、他の主要な言語に比べて群を抜いて豊富にあります。僕はJavaScriptが得意ですが、最近は統計解析の勉強のためにPythonを学び始めました。もちろんJavaScriptを使って統計解析をすることは不可能ではないですが、書籍やライブラリの充実具合を考えると、Pythonを学んだ方が早いという判断です。
解決すべき課題が異なり、得意分野も違うのであれば、プログラミング言語は複数ある方が望ましいはずです。企業の喩えで言えば、どんなにGoogleが素晴らしいソフトウェア開発会社だとしても、「世の中のソフトウェアは全てGoogleが作ればいい」とはならないのと同じです。
どのプログラミング言語を採用すべきか?
以上が、「なぜプログラミング言語はこんなにたくさんあるのか?」の答えです。
プログラムを書きたいシチュエーションというのは、想像以上に多様です。その多様な状況に対して、1つの大統一プログラミング言語のようなもので対処しようとするのは、今のところ難しいようです。そうなると、「じゃあ最適なプログラミング言語を選ぶためにはどうしよう?」と考えるのが建設的です。
ある組織がどのプログラミング言語を選択するかは、生産性やエンジニア採用の観点で非常に重要な問題です。この点について、最後に軽く触れておきます。(読みたい人だけ読んでください。)
たとえばある組織やプロジェクトが採用するプログラミング言語を選ぶとき、考えるべき観点はいくつかあります。
前提として、そもそもその言語自体の生産性が高いか、という問題があります。たとえばCOBOLというゾンビのように死なない古代の言語(個人の偏見です)がありますが、これまでソフトウェア産業が発見してきたプログラミング言語設計の知見を十分に取り込めているとは思えません。ある程度世の中に広く使われていて、活発に改善がされている言語を選ぶべきです。
その上で、前述したようなプログラミング言語の向き不向きを考えていく必要があります。この点は奥が深いので僕も語りきれないですが、たとえば開発したいソフトウェアにすぐに使えそうな周辺ライブラリが充実しているか、などを調べたりすることは多いです。
忘れがちな観点として、開発者の採用にどの程度有利かという問題もあります。たとえばScalaという少しマイナーですがコアなファンが多い言語があります。(この説明はScalaコミュニティに怒られるかもしれない。。。)開発言語としてScalaを採用することは、世の中にScala開発者が少ないという意味で、採用候補者の母集団を狭めてしまうかもしれません。一方で、Scalaを採用しているプロジェクトが少ないからこそ、競合となる企業も減って、Scala好きの優秀なエンジニアを採用しやすくなるということがあったりもします。もちろん、採用後に新しいプログラミング言語を学んでもらうというケースも往々にしてあります。一方で、「自分はこのプログラミング言語が好きで、仕事でもずっと書いていたい」という開発者が一定数いるのも事実です。
さらに難しい点として、そのプログラミング言語の「現在」の状況だけを見て評価を決めると、判断を誤る可能性があります。それは、プログラミング言語にはトレンドの移り変わりがあるからです。どのプログラミング言語を採用するかは、ある種の投資であり、そのプログラミング言語の市場価値が上がれば得をします。具体的には、素晴らしいライブラリが登場して開発が楽になったり、エンジニア採用がしやすくなったりします。もちろん「流行っているから使おう」というのが常に正解とは限りません。一方で、「今まで使ってきたからこのプログラミング言語を使い続けよう」と保守的な意思決定を続けていると、いずれトレンドが変わって苦労することになるかもしれません。
プログラミング言語の多様性と言語選択の世界はとても奥が深く、機械的に決まらないのが面白いところです。
ここから先は
仕事を楽しくするデジタルリテラシー読本
【初月無料】デジタル時代の歩き方について考えたことを発信します。ソフトウェアの時代とは何か。エンジニアの頭の中はどうなっているのか。NoC…
サポートをいただけると、喜びドリブンで発信量が増えます!初月無料のマガジン『仕事を楽しくするデジタルリテラシー読本』もおすすめです!