プログラムはほとんどやったことがないが、興味があるという初心者に向けて、過去30年に渡ってコンピューターと向き合い、インターネットにつながってきた平凡なユーザーの立場から、プログラム言語の歴史的な経緯や動向を伝えたい。それぞれのプログラム言語の名前をみて、
「あぁあぁ聞いたことあるね」
という状態になることが、この少文の目標だ。
C言語以前
私が初めて「C言語」に触れたのは、1990年より少し前、平成が始まった頃だ。情報工学系統、つまり、ソフトウェアを専門とする教育課程の中に身をおいたために、当時としては希少だった、プログラムの書き方を先生から教えてもらえるという体験をした。
最初に教えられたのは「Pascal」という言語だった。これは先生方の慧眼だったなといまでも思うぐらい、教育にピッタリの言語だった。「Pascal」を学んでいたから、そのあと「C言語」にすんなり入っていけたことは間違いない事実だ。
当時はまだ「C言語」が世界を圧倒しているわけではなかった。主に技術計算用に使われた「FORTRAN」、大学ではみることはできなかったがいまでも銀行系統に残っていると噂の「COBOL」、その10年前から庶民の買えるパソコンで動いた「BASIC」、私自身はEmacsというエディターのカスタマイズにしか使わなかった「Lisp」、開発現場ではごく普通に利用されていた「アセンブラ」(厳密にはプログラム言語ではないかもしれないが)などなど、「C言語に似ていない」プログラム言語がたくさんあった。
C、C++
いまブームとなっている人工知能(AI)は、ディープ・ラーニングによる機械学習だが、当時私が通った大学の研究室でも人工知能をやっていた。30年前の当時はニューラル・ネットワークと呼ばれ、いまとまったく同じように人間の脳をマネするように考えられた数学を、コンピューターで計算することで成り立つ技術だった。
C言語で書かれたニューラル・ネットワークのプログラムを先輩から受け継ぎ、少なくとも百万円の単位でしか買えないコンピューター(ワークステーション、あるいは、スーパーコンピュータ)を何日もぶん回して学習させる。私が卒業論文としたのは音声認識だったが、その内容は、新幹線の駅名を十数人に言わせてその音声データを学習させる、というものだった。
このように、大学の研究室レベルではC言語は普通に使われていたが、C++はまだ一部限られたヒトの技術だった。
「え、C++で書いてるの、すごいね(デキるヒトだ)」
というイメージだった。
C++はオブジェクト指向を取り入れていて、新しい考え方だったし、私自身がオブジェクト指向を理解することになるのは紆余曲折を経てその10年後だったので、高嶺の花という感じであり使うことはできなかった。
スクリプト言語
C言語は、「コンパイル」という変換作業を行わないと実行できない。これはめんどくさいよね、ということで「コンパイル」という変換作業をしなくてよい「スクリプト言語」が登場し、いまも出続けている。
当時、UNIX系統(Linux、FreeBSDなどの先祖)で普通に利用していたのは「シェルスクリプト」だった。「シェル」というプログラムの説明はここでは省略するが、そのシェル(sh,bash,csh,tcsh,kshなどなど)に合わせて似たような言語がたくさんあった。
また、「Perl」も登場していた。その後、Webサーバ側で動く「CGI:Common Gateway Interface)」に利用されるプログラム言語として主流となり、大流行した。
「Perl」のあとを継ぐかのように「Ruby」という言語も生まれた。「Ruby on Rails」などで利用されている現場はまだたくさんあるようだ。
スクリプト言語でおそらく現在一番たくさん利用されている「PHP」が生まれたのは1995年頃で、WWW、ホームページが出現した初期の頃に、CやPerlなどを使っていたヒトたちに受け入れられて普及した。
Java、JavaScript
この2つを並べるなんて素人だなと思われたかもしれない。逆に言うと、この2つを混同していると、話すのも無駄な素人だと思われるので注意が必要だ。
「Java」はバリバリのオブジェクト指向で、CやC++をがっつり踏襲した重量級のエリート言語だ。つまり、「コンパイル」が必要だが、コンパイルしたあとのプログラムは「仮想マシン」という現代の技術の底流に流れている考え方をベースに動いた。 “Write once, run anywhere” という当初のコンセプトは夢に終わったのかもしれないが、「Java」はいまでも超バリバリの現役で、いろいろなところで利用されている。
「JavaScript」は、最初は「Netscape Navigator」というブラウザ上で動く小さなスクリプト言語だった。ネスケを作っていたヒトたちは、JavaScriptなしで動いているページなんてもはや存在しなくなっているいまの状況を想像できなかっただろう。
特定のプラットフォーム専用の言語
Microsoftは、自社のOS「Windows」で動くソフトウェアをつくるためのソフト「開発環境」をずっと出し続けている。私が「Windows」で動くプログラム開発にいそしんでいた当時、「VC++」
(Microsoft Visual C++ の略称、ブイシープラプラと呼んでいた) が主流だった。その名のとおり、Windows用アプリを開発するためだけのC++に似た言語だ。
当時、「VC++」を書いていると、Microsoft社の開発能力の巨大さを肌で感じることができた。何かをやろうとすると、常に4種類ぐらいの実現方法があるのだ。新旧の別やそれぞれの経緯はあるものの、いろいろな開発手法を貪欲に取り入れてどんどん実現していることが、ぼんやりした私の頭でもよくわかった。
いまは、「C#(Visual C#)」という言語に置きかわっていく流れになり、スマホゲーム開発の世界でシェアを伸ばしたりしている。変化の先端を走っている。
「VB」(Microsoft Visual Basic) というのもあった。前述の「BASIC」とはあまり似ていなかったが、「VC++」よりはとっつきやすく、WordやExcelなどOffice系アプリのカスタマイズでも利用されたので、見たことがあるヒトは多いのかもしれない。
一気に時代をジャンプして、スティーブ・ジョブズがiPhoneを発売すると、Apple社はその上で動くiPhoneアプリを開発するための言語も、同時に登場させた。「Objective-C」というもともとあったらしいがほとんど誰も知らなかった言語だ。最近では「Swift」というもっと手軽に使える言語も出している。
iPhoneをみて恐れをなしたGoogle社は「Android OS」を無料でばらまいた。Androidで動くアプリを開発するために選んだのは「Java」だった。開発環境もすべて垂直統合で他社の入る余地のないApple・iPhone・iOSに対抗して、Android陣営は公式な開発環境を選びはするもののいろいろなメーカーや組織が横から入れるオープンな形を選んだ。最近では「Kotlin」という言語を登場させ、「Swift」なんかに負けないぞという意思を表明している。
Go、R、Python
人工知能とディープ・ラーニングの大流行、あるいは、スマホの普及の流れの中で登場し、生き残りそうな雰囲気が漂い始めたのが、「Python」や「R」だ。
「Python」は昔の「Perl」のような地位に成り上がりそうな雰囲気で、「Jupyter」を代表とする、プロンプトにプログラムをぶっこむとすぐ実行してくれる開発環境の流行とぴったりマッチしている。「Jupyter」的な機能はクラウドサービスでもよく提供されていて手軽に使える。コード書きと環境設定がいっしょにやれちゃう感覚は新鮮で、メモしなくても履歴がそのまんま残る。結構感動した。
「Go」や「R」は、クラウドの向こう側で大量のデータを人工知能に食わせる仕事をするヒトに便利なツールとして定着段階に入っている。
SQL
C言語が登場した頃にはすでにあり、それからずっと存在し続けていまでも利用されているのが「SQL」だ。なんと「SQL」は頭文字をとった略語ではないらしい。これはプログラム言語ではないという意見もあるが、私にとってはデータベースを扱うための専用言語だ。
「SQL」は、システムの皮を一枚めくると、すぐに見ることができる。たとえば、「WordPress」はPHPを介し「SQL」を利用してデータベースを制御する。「NoSQL」というSQL全否定のキワードがいくら流行したところで、PHPとWordPressのシェアをみれば安心だ。
マークアップ言語
マークアップ言語は、すっかり数が減ってしまった。いま見かけるのは、HTML、XML、XHTML、SGMLのせいぜい4つぐらいだ。
「すべてはXMLになっちゃうのだ!」と言われた時代もあった気がするが、サーバサイドではもっと手軽に高速に動かしたいニーズから「XML」よりは「JSON」という形式でやりとりするのが一般的になり、HTMLは進化して「HTML5」となりその名前が生き残った。
C言語に似たものばかり
ここまで紹介した言語をいちいちググってみたまじめな初心者の方がもしいたら、C言語以後のプログラムが、ほとんどすべて書き方がそっくりで、並べられてクイズにされたら当てられないぐらい似ていることがわかっただろう。
なぜ似ているのか。
プログラム言語は、「みんな」が使えないと、すたれて消えていってしまうからである。
革新的なプログラム言語は出てこれない。革新的に新しいと、使うのにすごく苦労する。学習に時間がかかるために、使う人が増えない。使う人が増えないと、使えるプラットフォームや環境が増えず、消えていってしまう。
「PHP」はその逆を行った典型例と言える。CやPerlをやっていた人なら、本当にスグに使えた。それに加えて、その前にあったサーバサイド言語へのプログラマの不満を解決してくれる言語だった。
業界で生き残るには
ここまで読んでくださった方は、ネット業界に、あるいは、プログラマとして生き残るには、どうするべきかもわかったかもしれない。
1つは、変わっていってしまうので、新しいものをいかに早く「つかえる」ようになるかどうかで、報酬が上下し、あるいは、生き残れるかどうかが変わるということ。
もう1つは、古いものを知っていると、新しいものを理解するスピードがすごく速い、ということ。似たものしか出てこないから、古い知識の蓄積が、実は生きる。
コンピュータやインターネットの世界で生きていくことを志すヒトに、お役に立てば幸いです。
コメント