一気にわかるプログラミング言語の歴史図鑑︰大航海時代からChatGPTまで

一気にわかるプログラミング言語の歴史図鑑︰大航海時代からChatGPTまで プログラミング

コンピュータとプログラミング言語の歴史を「ざっくり全体像からつかみたい」人向けにまとめています。技術用語は出てきますが、できる限り比喩や具体例を交えて説明しているので、専門家でなくても歴史の流れを追いやすくなっています。

見どころ

  • 技術史が「戦争」と「ビジネス」と密接に絡む様子︰★★★★★
  • FORTRANからPython・Rust・TypeScriptまでの系譜が一本でつながる感覚︰★★★★☆
  • OccamやGHC、Elixir、Solidityなど「通好みな言語」もきちんと押さえている点︰★★★★★

1 大航海時代から始まる「コンピュータ前史」

1-1 鉄砲と花札とパスカリーヌ

動画はまず15世紀の大航海時代からスタートします。ヨーロッパ人がアメリカ大陸へ進出し、日本には種子島経由で鉄砲が伝来しました。織田信長や豊臣秀吉、徳川家康が戦乱の世をまとめ、260年続く江戸時代が始まります。日本では平和が続いたことで、花札のような絵の多い娯楽文化が発達していきました。

一方ヨーロッパでは、より実用的な技術が発展します。フランスのパスカルは、税金計算を手伝うために最古級の計算機パスカリーヌを発明しました。ここで重要なのは、元々「コンピュータ」という言葉は機械ではなく「計算する人間」を指していたという点です。機械が人間の仕事を奪ったというより、まず「仕事の名前」が機械に移っていったと考えるとイメージしやすいです。

豆知識︰コンピュータの語源は「to compute︰計算する」であり、最初は人間の職業名でした。機械にその名前が移ったのは20世紀になってからです。

1-2 電信と電話︰「遠くの相手」と会話したい欲求

アメリカが独立し、西へ西へと領土を伸ばしていくと、遠距離連絡のニーズが急激に高まります。そこで登場するのがモールス信号による電信です。ここで誤解しやすいのは、動画内の表現だと単に「電信機が発明された」とざっくり語られていますが、実際にはそれ以前から原型はあり、サミュエル・モールスらが大幅に改良したという位置づけです。

その後、グラハム・ベルらによる電話へ発展し、声をそのまま送れるようになります。電信と電話は、後のインターネットやプログラミングと直接つながる「情報伝達インフラの第一世代」と言えます。

2 世界大戦とコンピュータ誕生︰戦争が生んだ計算機

2-1 暗号戦とチューリングの役割の「正しい」位置づけ

第一次世界大戦、そして第二次世界大戦が技術の爆発的進歩を加速させます。ドイツのエニグマ暗号は人間の手計算では太刀打ちできず、イギリスのアラン・チューリングが中心となって解読に挑みました。

ここでよく混同されるのが「チューリングマシン」と実際の解読機械です。動画内ではチューリングマシンで解読したかのように語られますが、正しくはボンベという専用機械を用いています。チューリングマシンは理論上のモデルであり、直接エニグマを解いたわけではありません。

豆知識︰チューリングは「COBOLのおばちゃま」と呼ばれたグレース・ホッパーとは別人物です。グレース・ホッパーは後述のCOBOLの生みの親として知られます。

2-2 ENIACとノイマン型コンピュータ

アメリカでは原爆投下のための弾道計算をきっかけに、世界初の汎用電子式コンピュータ ENIAC が登場します。ジョン・フォン・ノイマンが提唱した「プログラムをメモリに格納する」というアイデアは、現在のコンピュータの基本構造として定着しました。

この時期、ベル研究所ではトランジスタも発明され、大型コンピュータは次第に小型化されていきます。コンピュータは戦争のために生まれ、その後ビジネスと科学の道具として平時の社会に拡散していきます。

3 プログラミング言語の黎明期︰FORTRAN・COBOL・LISP

3-1 FORTRANと「第3世代言語」の登場

1950年代、IBMのジョン・バッカスがFORTRANを開発します。これが現在も残る最初期の高水準言語の一つです。ALGOL、COBOL、LISPといった言語がほぼ同時期に登場し、機械語やアセンブリに頼らない「構造化プログラミング」への道が開けました。

動画ではPL/Iを「ピーエルアイ」と読んでいましたが、実際にはピーエルワンと読むのが一般的です。このような細かい読み方の違いも、歴史を真面目に辿るときには押さえておきたいポイントです。

3-2 LISPとProlog︰AIの祖先たち

アメリカではLISPが、ヨーロッパではPrologがAI研究の土台言語として使われていきます。動画では「PrologはLISPを参考に作られた」と紹介されていましたが、より正確には資産共有や影響はあるものの系統は別です。LISPは関数型、Prologは論理型という異なるパラダイムに属します。

豆知識︰日本の通産省が進めた第5世代コンピュータプロジェクトでは、Prolog系統のGHCという言語が使われました。国が言語を作ってOSやハードとセットで攻める、という今では珍しいアプローチです。

4 オブジェクト指向と多様化︰SmalltalkからC++、Objective-Cへ

4-1 Smalltalkと「オブジェクト指向」という発明

ゼロックスのパロアルト研究所では、Smalltalkが生まれ、ここでオブジェクト指向という概念がはっきり言語化されます。動画中の地図ではXerox本社寄りにピンが置かれていましたが、実際に研究所があったのはカリフォルニア州パロアルトです。

同時期に、ノルウェーではSimula、フランスではEiffelが登場し、オブジェクト指向の理論と実装が整っていきます。Eiffelの設計者はベルトラン・メイヤーと紹介されがちですが、英語表記としてはBertrand Meyerが正しい形です。

4-2 C、C++、Objective-C︰Cをどう拡張するか

ベル研究所で生まれたC言語は、UNIXとともに拡大していきます。その後ビャーネ・ストロヴストルップによるC++、ブラッド・コックスによるObjective-Cが登場し、「Cにオブジェクト指向をどうくっつけるか」という試行錯誤が続きました。

興味深いのは、C++とObjective-Cは拡張の仕方がうまく噛み合ってしまったため、Objective-C++として共存できることです。言語同士が物理的に混ざるというレアなケースと言えます。

豆知識︰同じ頃、並行計算理論CSPに基づくOccam言語も実用レベルになっています。クイックソートで有名なホーアの理論が、言語として形になった例です。

5 インターネットとWebの時代︰ブラウザ戦争とスクリプト言語

5-1 ARPANETからWWWへ

アメリカのARPANET、大学間ネットワークCSNETやBITNET、ヨーロッパのEUNET、日本のJUNETなどがつながり、やがてティム・バーナーズ=リーによるWorld Wide WebとHTMLが登場します。動画では「ARPANET」の読みが曖昧でしたが、一般にはアーパネットと呼ばれます。

ブラウザ競争はNetscape NavigatorとInternet Explorerの第一次ブラウザ戦争に始まり、後にFirefox、Safari、Chromeを巻き込んだ第二次ブラウザ戦争へと続きます。途中、FlashがJavaScriptの代替のように使われた時期もありますが、Flash内部で使われていたのはActionScriptでありJavaScriptではありません。

5-2 LAMPとスクリプト言語の台頭

サーバー側ではLinux、Apache、MySQL、PHPのLAMP環境が確立されます。ここでLinuxが普及した理由を「ライセンスが無料だから」とだけ言い切ってしまうと片手落ちで、実際にはUNIX互換性、柔軟な構成、コミュニティの強さなど複合要因が大きいです。OSとして表現する際にはGNUツール群と組み合わせたGNU/Linuxと呼ぶ方が正確です。

Perl、Python、Ruby、Lua、Rといったスクリプト系・解析系の言語もこの時代に一気に広がります。Ruby on RailsやDjangoのようなフレームワークは、Webサービスの開発速度を一桁変えるインパクトを与えました。

豆知識︰日本ではMindというForth系の日本語プログラミング言語や、HyperCard用のHyperTalkといった「ローカル色の強い言語」も生まれています。世界のメジャー言語だけを追っていると見落としがちな系統です。

6 JavaScript、TypeScript、クラウド︰Webが「プラットフォーム」になる

6-1 JavaScriptからAltJS、そしてTypeScriptへ

JavaScriptは当初「おまけ言語」のように見なされていましたが、Google MapsがAjaxを駆使して世界を驚かせたことで評価が一変します。その一方で書き心地の悪さも指摘され、CoffeeScriptやDartといったAltJSが提案されました。

最終的に生き残ったのは、MicrosoftのTypeScriptです。JavaScriptを否定せず、そのまま型の仕組みをかぶせる「控えめな拡張」が成功要因でした。FacebookのJSXと組み合わさり、React、Node.js、MongoDB、Expressを束ねたMERNスタックにより、「JavaScriptだけでWebアプリを完結させる」時代が到来します。

6-2 クラウドとマイクロサービス、GoとRust

AmazonやMicrosoft、Googleがクラウドを提供し、DockerやKubernetesの普及でマイクロサービスが一般化します。ここで高速かつシンプルなGoや、大規模システムでも安全性を重視したRustが脚光を浴びました。Rustに対抗する形でZigも登場し、「C/C++の安全な後継」を巡る競争が続いています。

豆知識︰FacebookはPHPの資産を捨てずに型と高速実行を両立するためにHackを開発し、AppleはObjective-CからSwiftへ移行しました。どちらも「巨大な既存コードをどう進化させるか」という企業レベルの悩みの産物です。

7 ブロックチェーン・AI・量子コンピュータ︰これからの言語たち

7-1 ブロックチェーンとスマートコントラクト

サトシ・ナカモトによるビットコイン実装はC++で書かれました。その後、Ethereum上で動くスマートコントラクトのための言語Solidityが登場し、「コードがそのまま契約になる」世界が現実のものになっています。

7-2 Elixir、Julia、量子コンピュータ系言語

ErlangのVMと分散処理モデルを活かしつつ、Rubyに似た書き心地を持たせたElixir、数値計算に特化したJuliaなど、新しい世代の言語も続々と出てきました。まだPythonを一気に置き換えるほどの「決定打」にはなっていませんが、量子コンピュータ向けのQiskitやCirqなどとともに、次のブレイク候補として注目されています。

豆知識︰1980年代には東京大学の坂村健による国産OSTRONプロジェクトも始まっています。量的には目立たなくても、各国に「自前でOSや言語を持ちたい」という欲求があったことがわかります。

8 道具の歴史を知ることは、自分の目的を知ること

「プログラミング言語は時代ごとの課題に対する回答である」という点です。戦争、通信、ビジネス、Web、スマホ、クラウド、AI。課題が変わるたびに、新しい言語やフレームワークが生まれ、古いものは役割を変えながらも生き残っていきます。

また、発明や公開の時期は必ずしもきれいな年表どおりではなく、動画内でも説明の順番に合わせて前後しています。そのため、本記事では訂正一覧にあった事実関係をできる限り反映しつつ、あえて「ストーリーとして理解しやすい順」に並べ直しました。

どの言語が「正解」かという話ではなく、自分が何を作りたいのか、そのためにどの道具を選ぶのか。その視点で歴史を振り返ると、今使っている言語の立ち位置もはっきり見えてきます。あなたが好きな言語の背景には、必ずそれを必要とした誰かの物語があります。

コメント

タイトルとURLをコピーしました