〒186-0002
東京都国立市東2-21-3

TEL : 042-843-0268

製品進化とマネジメント風景 第108話 プログラミング言語の進化と選択のマネジメント

世の中の製品、技術を概観すると、最初はハードウェアとして誕生します。しかし、その製品の機能を拡充し、より人間が扱いやすいものにしようとしてソフトウェアが入ってきます。そして、ソフトウェア上で機能の拡充が続きます。

しかし、ソフトウェア上での機能拡充が続くと、ハードウェアの反応速度が低下してくるため、使っている人間はいらいら感を募らせるようになります。そうなると、いらいら感を解消するために、ハードウェアを改良するアップグレードが行われるようになります。これを繰り返しているうちに、ハードウェアの改良に限界に達し、最終的に人間の要求を満たせなくなります。

その場面において、一段高いレベルの新しいコンセプトやアーキテクチャが生み出されます。この革新は、通常、ハードウェアから始まります。そして上記と同じ経過を辿りながら進化をしていくのです。ただ、個人用製品と産業用製品では、進化の道筋が少し異なっていました。

家電系はもともとマイクロコントローラやコンピュータを組み込んで制御する方向で進んできました。これに対して産業用の大規模機械の制御では、動かす力が大きいため、大きな電力を扱えるリレー回路を組み込んで制御していました。リレー回路はその後、PLC(Programmable Logic Controller)に形を変えて生き残りました。

しかし、半導体の微細化が進み、マイクロコントローラやパソコンが非常に安価になったため、扱う電力、電圧が小さければコンピュータ制御に置き換えられるケースが増え始めました。現在、PLC制御とパソコン制御のシェアは半々くらいと言われています。

コンピュータ制御が増えてきた理由は、安さに加えてその演算能力が大幅に向上したことが影響していると考えられます。今のスマホやパソコンの能力は昔のスーパーコンピュータ並みとなりました。マイクロコンピュータやマイクロコントローラは、スマホやパソコンの下位に位置していますが、これらの演算能力も大幅に向上しました。

今のマイクロコントローラやマイクロコンピュータは演算能力も上がりましたが、大きな変化は通信機能も追加されたことです。その結果、安価にIoTやエッジAIとして使えるようになったのです。この所の半導体不足で価格がかなり上がりましたが、それでも数千円から1万円も出せばかなり立派なものを購入できます。

このように、半導体をベースにしたコンピュータは、上はスーパーコンピュータ、下はマイクロコントローラと、幅広い分野で使われるようになりました。コンピュータを使用する時に必ず必要となるのがプログラム言語です。

コンピュータも、ハードウェアとソフトウェアの両方から構成される製品であり、冒頭で述べたようにハード、ソフトの両面で進化を繰り返してきました。ハードウェアのコンセプトやアーキテクチャがステップ的に進化した時には、使えるプログラム言語が変わってしまう可能性があります。どの言語は短命で、どの言語は長く使えるのか、それは製造系、技術系の技術者にとってはかなり重要な問題ではないでしょうか?

これまでに生まれた言語は、一説によれば200~300あると言われています。個人的に名前を聞いたことのある言語だけでも30くらいはあるので、その10倍くらいの言語が生まれ、知らないうちに消えていったとしても不思議ありません。

たくさんのプログラム言語が生まれたのかもしれませんが、実施に我々の目に触れるものはだいたい10個、せいぜい20個です。それはつまり、たくさんのプログラム言語が生まれたが、生き残ったのは少数だということです。

ではなぜ、使われつづける言語と使われなくなる言語に分かれてしまうのでしょうか? この理由が分かれば、未来に生き残るプログラム言語を推定でき、使われなくなる運命が待つ言語をわざわざ学ばなくても済むかもしれませんね。

プログラム言語の歴史をひもとくと、コンピュータが生まれた1940年代はマシン語を使って動かしていました。マシン語というのは要するに0と1だけから構成される言語です。コンピュータは2進法で動き、極端に言えば0と1しか理解できませんが、人間には非常にわかりにくい言語です。これでは一部のマニアしか習得できず、コンピュータの利用者は増えません。

そこで、このマシン語をもう少し人間が分かりやすい言葉にしようとして出てきたのがアセンブリ言語でした。1980年代後半、私が大学生の時代、流れ場の実験においてコンピュータによってアクチュエータやセンサを制御してデータを取得していましたが、この時にコンピュータを制御するために使われていたのがこのアセンブリ言語でした。マシン語と違い、命令を見ればだいたいの意味は分かりますが、それでもかなり面倒で扱いにくい言語でした。

先人たちもこの面倒さ、扱いにくさが嫌だったのでしょう。1950年代になると、普通の人間でも理解でき、しかも、コンピュータの機種に依存しない高級言語が開発されました。その代表格はFortran, LISP, COBOLです。高級言語は人間にはわかりやすいのですが、コンピュータは理解できないので、高級言語をマシン語に翻訳するソフトウェアが付属していました。

この翻訳機には2つのタイプあります。コンパイラとインタープリタです。コンパイラは高級言語で書かれた内容を最適なマシン語に変換するものです。インタープリタは1行ずつマシン語に変換して進むので、プログラムの間違いを見つけやすいという長所がありますが、演算速度の面ではコンパイラ方式に大きく劣ります。

Fortranはコンパイラを使った方式であり、科学技術計算で一世を風靡しました。今でもまだ、科学技術計算の分野では使われています。ただ、事務処理は苦手であり、その穴をうめるべくCOBOLが生み出され、銀行ATMなどに適用されました。今日のATMでは他のプログラム言語に置き換えが進んでいると聞きましたが、一部にまだ残っていて、それがシステムトラブルの原因になったこともあるそうです。LISPは記号処理の得意な言語であり、昔の人工知能開発に使われていましたが、最近では全く見かけません。

1970年代になるとPascalやC言語が出てきました。Pascalは教育用として開発され、『プログラムとはデータ構造+アルゴリズムである』ということを生徒に知らしめました。この言語も一世を風靡しましたが、今では見かけません。C言語は、オペレーティングシステムを開発するために作られたので、高級言語ではあるものの、アセンブリ言語に近い命令も含んでいます。そのため、習得するのが少し難しいのですが、高速で拡張性と保守性にも優れ、広く普及しました。コンパイラ技術の向上とセットで、CPU性能を最も発揮できる言語として現在も現役であり、多数の派生言語を生み出しました。

1980年代になるとオブジェクト指向の言語が現れはじました。その代表はC++です。要するにC言語をオブジェクト指向化したものです。1990年代になると、インターネットの普及に合わせてJavaやJavaScript、PHP、Pythonなどが出てきました。

JavaはC++と書き方が似ていますが、一番の特徴はJava仮想マシン上で実行するので、どのCPUでも動かすことができることです。JavaScriptの名前はJavaと似ていますが全くの別物であり、Web言語として使われています。PHPもWeb言語です。

Pythonはマルチユースの言語です。科学技術計算、画像処理、Web作成など、何でもできます。中身はC言語とpythonで書かれていますが、学ぶのが易しいのが特徴です。それは、ライブラリーが豊富なため、短いプログラムでも多機能を発揮できるからでしょう。ただし、インタープリタ方式なので演算速度はあまり出ません。

2010年代になるとJuliaやTypescriptが出てきました。JuliaはJust-in-timeコンパイラを備え、高速が持ち味であり、Fortran後継の筆頭です。加えて、C言語、FortranおよびPythonの呼び出し機能を備えています。TypescriptはJavaScriptの進化系と言われ、最近、その使用が増えてきました。

ここまではいわゆる、コンピュータ上で動くプログラム言語の話をしてきましたが、現実の世界では機械を自動で動かす用途がたくさんあります。産業機械ではずっと昔(少なくとも50年以上前)から自動化のためにリレー回路を使っていました。そして、ソフトウェア化の流れから、これがPLCに進化しました。PLCでは主にラダー言語が使われていますが、各社で命令が異なるため、群雄割拠状態となっています。

言語が異なることは参入障壁になりますが、一方で生産性向上を抑制します。時代が進むにつれてパソコンやマイクロコントローラの価格が大きく下がってきたため、同じ用途をBasic言語やC言語で置き換える動きが起こりました。その結果、現在は、産業用であってもラダー言語ではないパソコン系言語を使うケースが増え、市場は二分される状況になりました。

産業機械の一部としてロボットがありますが、2010年にROS(Robot Operation System)が世に出されました。オペレーションシステムという名前がついていますが、コンピュータのOS上で動くミドルウェアです。

ロボット開発専用のシステムでありC言語とPythonが標準装備されています。支援ソフトウェアが豊富であり、ロボットの動作シミュレーションや移動するロボットの位置検出などもできます。プログラムの設計・検証のPDCAサイクルを短縮できる点が一番の特徴でしょう。パソコンも安くなりましたが、それ以上に安いマイクロコントローラやマクロコンピュータをロボット制御に使えるため、人気上昇中です。

このようにプログラム言語は時代とともに移り変わってきました。これを人気ランキングとしてまとめた動画がユーチューブにありました。その内容の妥当性は精査していませんが、感覚的にはおかしくありませんでした。また、ここ数年のランキングについては、他のサイトとも比較して検証し、妥当だと判断しました。

この動画によれば、グローバルに使われるようになった最初の言語はFortranでした。私自身も昔、この言語でさんざんプログラムを書きました。Fortranは1965~1979年の長期に渡ってトップに君臨しました。1980~1984年はPascalがトップの座に付きました。教育用の言語として採用されるとシェアが拡大するということなのでしょう。その後のトップは、1985~2000年がC言語、2001~2017年がJava、そして2018~現在がPythonです。Pythonは学ぶのが易しく、しかも教育用の言語に採用されたので、急速にシェアを拡大しています。

過去のランキングを見ると、トップの最長記録はJavaの17年間でした。ちなみに現在のトップ8は、python、JavaScript、Java、C#、PHP、C++、Typescript、Cとなっていました。C#はC++の後継と言われておりマルチユースです。C++よりも学ぶのが易しいとも言われています。トップ8を眺めると、C言語の派生が多いことに気付かれるでしょう。

最後に、これからも長く使える言語、他の言語に置き換えられる言語について、少しだけ考察します。前提として、当分の間、AIブームとIoTブームが続くと考えています。

AIで求められるのは計算力であり、ハードウェアとしてはGPUの使用が盛んであることから、高速かつ並列処理が得意な言語でなければなりません。そう考えると、Juliaが今のPythonを抜いてトップになる日が数年後には来るのではないかと推測します。

Webコミュニケーションの現在の主流はJava、Javascript、PHPですが、これにTypescriptが加わりました。Typescriptは他の言語を吸収できるので、これに統合されていく可能性があります。

IoT系については静止系と運動系があり、運動系については据え置き型と移動型があります。移動型は、生産性の高さからROSベースになると考えます。そうなると、プログラム言語としてCとPythonが当分の間、使えるでしょう。

一方、静止系と据え置き型については、大型の機械が多いのでPLCは残るでしょう。しかし、言語はラダー系からCやPythonに変わるのではないでしょうか。なぜなら、今の若い世代は、マイコンやマイクロコンピュータを使ってモノを動かす訓練をしており、CとPythonに馴染んでいるからです。

とは言え、Cの後継としてC#、Pythonの後継としてJuliaがサポートされるようになると、そちらに主流が移っていく可能性も否定できません。

以上は個人的な予想であり、外れる可能性もあります。ただし、これからは、製品開発だけでなく、経営においてもプログラム言語の選択を無視できない時代になると考えています。会議で日本語を使うのか、あるいは英語を使うのかを選ぶ場合があると聞きますが、それと似たような話です。その点は過小評価しない方が良いと思います。