久しぶりに真面目な記事を書いてみる。前の記事いつだ、え、去年の夏……
数年前に後輩のデザイナーちゃん*1に 「プログラミング言語って何であんなにいろいろあるんですか」という質問を受けたのをふと思い出し、今後の自分の説明用に整理してみようと思いました。
プログラミング言語とは何か
「コンピューターへの作業指示をするための言葉」です。
とりあえずバイリンガルとか複数公用語の都合を無視すると人間相手でも日本人には日本語、アメリカやイギリスの人には英語、ベトナムの人にはベトナム語で言わないと(大体の場合は)伝わらないと思いますが、それと同じ理屈でとりあえず今のところはコンピューターにもコンピューターの言葉で指示をしないと伝わらず*2、そのために使う文章の規則を「プログラミング言語」と呼んでいます。
…が、厳密に言うと実際にコンピューターが理解できるのは「機械語」と呼ばれる0と1の塊だけなんですね。 というわけで、世の中のプログラミング言語(のシステム)の多くは「人間でもちょっと頑張れば読める*3文法に従った作業指示手順」をなんらかの方法で機械語に翻訳することで成り立っています。機械語に翻訳する仕組みが「コンパイラ」や「インタプリタ」と呼ばれるものなのですが、まぁ話の本筋からずれるので今回は割愛。
なんでこんなに沢山のプログラミング言語があるのか
(1) 「言葉」である以上仕方ない
まぁ、人間の使う言語も初めから今の形を取っていたわけではない、と言うのは古典の授業を受けているとよく分かるところ*4だと思いますので、まずは同じようなことがプログラミング言語でも起こっていると理解していただければと思います。
実際、人間の使う言語も新しく増えたり作られたりしてますしね。人間にもそこそこ読みやすく、後はコンピューターに理解させられれば良い、と考えると人間向けの言語よりずっとシンプルなので、新しく生み出しやすいという側面もあると思います。
(2) 学問として(他の分野に比べて)まだ成熟した分野ではない
なんかもう学士しかとってない私が言うとものすごい怒られそうなんですけど。
何せコンピュータサイエンス自体が学問としては若い分野でまだ成立してから100年も経っておらず、何万年も前から始まっている数学なんかと比べたらまだ一瞬レベルの時間しか経っていないのです。ていうか数学史やばくないですか。
その数十年の間にどんどんハードウェアが進化し、(言い方はアレですが)コンピューター側に押し付けられることが増えてきたため、ひとつの流れとして「もっと人間が分かりやすい形にしようぜ」という動きが起きるのは人情というか何と言うか…
ちなみに、「プログラミング言語を機械語に翻訳する」方法の議論は「言語処理系論」として授業が成立するくらいのボリュームがある分野なんですよね*5。
(3) 特定の目的に特化した言語の存在
前2つを真面目に説明すると無駄に長くなると思っているので、普段はここだけ説明しちゃうかな。
科学技術計算に特化したFORTRAN、「Webサイトを作るのに便利な関数セット(意訳)」として開発されたPHP、人工知能と親和性の高いと言われるProlog、「仮想マシン」という概念であらゆるデバイスで動作することを目指したJavaなど、さまざまな目的を持ってプログラミング言語が作られています*6。
(4) 言語開発者の趣味意向
身も蓋もないですが、ネタ言語を抜きにしても実際あると思います。
半端な気持ちで作れるものではないんですけどね……
まとめ
雑にまとめてみたけれど、こんな感じであってるかなぁ。ガチ有識者のツッコミが怖い。
*1:当時の案件の後輩と言う話で私がデザインをしていたわけでは決してない
*2:無茶なネタ振りにも小粋なレスを返してくれると評判のSiriさんやGoogleアシスタントさんも直接言葉を理解しているというよりは、「○○して」っていう言葉を認識したらこの処理をする、みたいな指示がプログラミングされているはずです
*4:まー、古語と現代語の違いはどちらかというと同言語のバージョン違いに近い
*5:実際授業を受けて単位も取りましたが、私がそれを正しく理解できたかどうかは聞かないであげてください…