年代と問題解決で切り取る、教養としてのプログラミング言語全史
目次[非表示]
- 1.まえがき
- 2.戦後のプログラミング言語年表
- 2.1.スクリプト言語以前
- 2.1.1.19世紀末:人口増加のアメリカ、パンチホールで国勢調査
- 2.1.2.1940年代初頭:イギリスのエニグマ暗号解読とアメリカの爆弾軌道計算
- 2.1.3.1946年:第二次世界大戦終結後、ENIACの登場とトランジスタによる小型化
- 2.1.4.1940年代後半:製品ごとに乱立するアセンブリ言語たち
- 2.1.5.1950年:東西冷戦開始、核兵器開発競争から始まる大プログラミング時代
- 2.1.6.1954年:コンピュータと話したいから、高水準言語「FORTRAN」登場
- 2.1.7.1958年:もっと書きやすい構文で。ALGOL58、構造化プログラミング誕生
- 2.1.8.1958年:LISP、カッコで囲む数学の記法がプログラミング言語に
- 2.1.9.1959年:米海軍のコンピュータおばあちゃん、もっと自然な言語を求めてCOBOLを作る
- 2.1.10.1959年:IBM、初の第4世代言語RPGを作る
- 2.1.11.1960年代:第一次人工知能ブームとプログラミング言語の普及
- 2.1.12.1964年:FORTRANは難しすぎるから初心者向けのBASICを作ろう
- 2.1.13.1965年:ALGOL、FORTRAN、COBOLの3つの完全上位互換を作りたいIBM、PL/Iを作る
- 2.1.14.1967年:ALGOLの次を目指した中で生まれたオブジェクト指向と波括弧、時代が追いつかずに消える
- 2.1.15.1970年:ゼロックス社パロアルト研究所設立。西海岸の優秀な研究者の受け皿となる
- 2.1.16.1970年:シンプル、汎用を目指したPascal
- 2.1.17.1970年:軍事ネットワークARPANET
- 2.1.18.1970年:IBM、リレーショナル型DBの問い合わせ言語を作る
- 2.1.19.1970年:マルチタスクOSのプロジェクトから撤退したベル研究所のはぐれもの、設計書をもとにUNIXを作る
- 2.1.20.1972年:イギリスから輸入されたBCPL、アメリカでC言語になる
- 2.1.21.1972年:SimulaとLISPにオブジェクト指向を加えたSmalltalk
- 2.1.22.1973年:C言語で書き直されたUNIX、覇権を握る
- 2.1.23.1975、76年:西海岸のベンチャー、シリコンバレーの兆し
- 2.1.24.1976年:SEQUEL2、商標問題でやむなくSQLに表記変更
- 2.1.25.1977年:Apple IIがヒット、パーソナルコンピュータの時代
- 2.1.26.1981年:ハッタリが生んだMicrosoftのOS事業
- 2.1.27.パソコン時代最初期のPascal, BASIC, LISPのニッチ
- 2.1.28.1981年:軍事ネットワークにはアクセスできないアメリカの大学、CSNETやBITNETに参画
- 2.1.29.1983年:Cで大規模開発したい。C++とObjective C、別々に生まれるも偶然統合可能に
- 2.1.30.1984年:日本の大学群、JUNETで相互通信可能に
- 2.1.31.1984年:初めてコンピュータに触れた人たちによる「第二次人工知能ブーム」
- 2.1.32.1985年:新言語Eiffel(エッフェル)、Smalltalkと並んでオブジェクト指向の教科書になる
- 2.1.33.1984,85年:一般人にはCUIは難しいから、GUI時代の幕開け
- 2.1.34.1986年:アメリカと日本のNETが接続、インターネット時代が幕開け
- 2.1.35.1987年:ようやく覇権をとったC言語、その後の言語の原料になる
- 2.1.36.1989年:日常的な国際通信対応のため、ドメイン名「.jp」誕生
- 2.1.37.スクリプト言語以前まとめ
- 2.2.冷戦終結、インターネットの大きな広がり
- 2.2.1.1989〜91年:冷戦終結、インターネット・バブル前夜
- 2.2.2.1991年:書きやすいけど人によってばらつきがない言語がほしい。Python誕生
- 2.2.3.1991年:Windowsに役割特化のVisual Basic
- 2.2.4.1991年:学生が作ったLINUX、オープンソースで無償なので大流行
- 2.2.5.1991年:みんなに自由に使ってほしいから、World Wide Webの概念とHTMLを無償公開
- 2.2.6.1993年:アメリカでインターネットの商用利用許可、Web時代の幕明け
- 2.2.7.1994〜95年:インターネットの覇権を取りたい。第一次ブラウザ戦争、Netscape vs Internet Explorer
- 2.2.8.1995年:機種ごとに実装するのめんどくさいから、JavaはJVMで環境問わず一度に実装可能に
- 2.2.9.1995年:ブラウザ上でJavaアプリを動かしたいから、JavaとNetscape提携。サン製Java Appletとネスケ製JavaScript登場
- 2.2.10.1995年:もっとWebに特化したサーバーサイド言語を求めて、PHP誕生
- 2.2.11.1995年:フロントエンドからDBまでライセンス料なしで実装するLAMP環境
- 2.2.12.1995年:尻尾の生えたP言語、Rubyで楽しくプログラミング
- 2.2.13.1996年:ジョブズのアップル復帰、Objective Cの台頭
- 2.2.14.1997年:ブラウザごとに環境や言語が違うと開発しにくいから、ECMAScript誕生
- 2.2.15.1998年:OS標準搭載、数の暴力でブラウザの覇権はIEのものに
- 2.2.16.1998年:JavaScriptつかいにくいから、Flashで動かそう
- 2.2.17.2000年:2000年問題、幸い大事には至らず
- 2.2.18.2001年:ITバブル崩壊
- 2.2.19.90年代まとめ
- 2.3.新世紀、言語より簡単なフレームワークたち
- 2.3.1.2001年:マイクロソフト、優秀なプログラミング言語を保持したくてC#を作成
- 2.3.2.2004年:Rubyというシンプルな言語で更にシンプルにWebアプリケーションを作れる、Ruby on Rails、スタートアップは大助かり
- 2.3.3.2005年:Railsに続け、Pythonを元にDjango誕生
- 2.3.4.2005年:ゲーム開発はハードル高いから、Unity誕生
- 2.3.5.2005年:Google Mapsで技術力の高さを見せつけた結果、JavaScriptとPythonに注目が集まる
- 2.3.6.2006年:普及しすぎたIE、ウイルスの標的となる
- 2.3.7.2006年:Amazon、サーバーを固定資産から従量課金へ。AWS EC2とS3誕生、クラウド時代の産声
- 2.3.8.2000年代前半まとめ:どんどん便利に、どんどんブラックボックス化していく言語やフレームワークたち
- 2.4.スマホ時代の幕開け、OSを超えた覇権争い
- 2.4.1.2007年:初代iPhone発表、スマホ時代の幕開け
- 2.4.2.2008年:WebページだったFacebookとTwitter、スマホ向けネイティブアプリとなって大流行
- 2.4.3.2008年:現状維持のECMAScript4、Chrome登場、ブラウザ戦争の行方
- 2.4.4.2009年:C++は好きじゃないから、もっと使いやすいGo登場
- 2.4.5.2009年:V8エンジンをブラウザに頼らず動かしたい。node.js
- 2.4.6.2010、11年:JavaScriptを書きたくないから、AltJSが次々誕生
- 2.4.7.2010年にはRubyのようなコードを書いてJavaScriptに変換するCoffee Scriptが登場
- 2.4.8.2011年:東日本大震災でデータセンタ被災。クラウド化が日本の大企業でも始まる
- 2.4.9.2011年:Javaも使いにくくなったから、Kotlin誕生
- 2.4.10.2011年:言語は古いけど、新フレームワーク登場で生き残ったPHP
- 2.4.11.2011年:Facebook、複雑になったコードの保守管理のためにReactを作る
- 2.4.12.2012年:Chrome、全OS対応で覇権を握る
- 2.4.13.2013年:囲い込みだけだとジリ貧のマイクロソフト、他社向けのオープンな技術開発の一貫でTypeScriptを作る
- 2.4.14.2013年:Instagramを買収したFacebook、Reactをオープンソース化
- 2.4.15.2013年:jsxとTypeScript、合わせてtsxになる
- 2.4.16.2013年:JavaScriptだけでWebアプリを作成。MERNスタック完成
- 2.4.17.2013年:MERNスタックの足りない部分、クラウドで補う
- 2.4.18.2013年:一つのサーバ上で複数の開発環境を独立管理したい。共有したい。Dockerによる仮想環境構築、コンテナオーケストレーション
- 2.4.19.2013年:機能ごとに細分化した技術とサービスを最適に組み合わせよう。モノリシックとマイクロサービスの使い分け
- 2.4.20.2014年:レガシーの代名詞Java、マイクロサービスとクラウドに合わせたフレームワーク「Spring Boot」で息を吹き返す
- 2.4.21.2014年:Apple、古くなったObjective Cに変わる言語、Swiftを発表
- 2.4.22.2015年:Mozilla、今度こそCを置き換える言語を作るぞ!!とRustを開発
- 2.4.23.2015年:様々な新機能を盛り込んだECMAScript2015制定、JavaScriptが進化してAltJSは廃れる
- 2.4.24.2015年:iPhoneとAndroid両方一気に実装したいから、React Nativeのクロスプラットフォーム開発
- 2.4.25.スマホ時代まとめ:苦戦する振興勢力、時代に合わせるレガシー言語、スタンダードを作るGAFA
- 2.5.AI時代
- 2.5.1.2015年:第三次人工知能ブーム、AIが結実し始める
- 2.5.2.2015年:Google等が使っていたPython、AIブームに乗じて更に人気に
- 2.5.3.2015年:OpenAI、汎用AIを目指して設立
- 2.5.4.2016年:拡張現実(AR)ゲームの先駆け。NIANTIC、Pokemon GOをリリース
- 2.5.5.2017年:不人気言語のDart、Flutterのためだけに最適化する
- 2.5.6.2017年:簡単になりすぎたアプリケーション開発。どうせならプログラミングなしで開発したいから、ノーコード/ローコードツール
- 2.5.7.2017年:Javaは古くなったけど技術者は置き去りにしたくない。GoogleのKotlin採用
- 2.5.8.2018年:OracleがJavaの開発元を買収。有償化の噂でJava離れが起こる。受け皿はPython
- 2.5.9.2020年:技術の遅れを取り戻せ!!日本のプログラミング義務教育化
- 2.5.10.2020年:コロナ禍、2ヶ月でリモートワーク体制を整えなきゃ!!スクラッチ開発からSaaSへの開発手法移行
- 2.5.11.2022年:OpenAIのChatGPT、自然言語処理の精度で他社を圧倒
- 2.5.12.2015年以降まとめ:AI開発戦争の真っ只中。見えてきた汎用AI、徐々に置き換わるレガシー言語
- 2.6.AI開発戦争の先には何が待つのか
- 3.温故知新を当てはめる、フルスタックエンジニアにつながるメンタルモデル
- 4.終わりに
- 5.採用情報
- 6.参考資料
まえがき
みなさんこんにちは、DIVXエンジニアの安部です。
DIVXアドベントカレンダー2023、17日目となりました。
今回は、プログラミングが担ってきた問題解決の歴史を振り返り、教養としてざっくり把握する内容にしてみました。
個人的には、歴史を振り返ることで問題解決法の引き出しが増えると考えているので、温故知新の精神で読み進めていただければ、役立つ内容になるのではないかと思います。
キャンプ道具好きなんだよね。原理を知れるような気がして
私はキャンプにいくことはあまりありませんが、キャンプギアの紹介動画を見るのが好きです。
魔法瓶、クーラーボックス、コーヒーミル、ガスバーナーなど。
「なんで好きなんだろう?」と理由を色々と考えてみた結果、「問題解決の方法が見えやすいからだ!!」と思い至りました。
冷房、電子レンジ、洗濯機、冷蔵庫など、普段私達が当たり前に使っている電化製品って、どういう原理で動いているかわからないものが多いんですよね。
「電気」というエネルギーで動くものって、中身がブラックボックスになっていて自分でコントロールしてる感が少ないんです。
でも、アウトドア向けのコーヒーメーカーや折りたたみテーブル、ペグ、マルチツールや焚き火台は電気エネルギーを使っていません。その代わりに、素材ごとの適正を考えて作ったパーツ同士の組み合わせ、重量のバランスや、空間を有効活用した折りたたみ機構の携帯性など、直感的に分かりやすいアプローチで問題を解決してくれています。
電気エネルギーを使わない原始的なアプローチを現代の技術で発展させている、ある意味不便な問題解決も、それはそれで尊いものだと思っています。プロセスがホワイトボックスなので、自分でも理解できることが嬉しいんですよね。
リモコンの仕組みを知らなくても、リモコンを使えている人の図
世の中が便利になればなるほど、内部構造はブラックボックスになっていくと思います。もちろん普段の生活ではその便利さを享受しています。リモコンがどうやってエアコンを動かすのかを理解していなくても、ボタンを押せば便利さを享受できるわけなので。
でもたまには、原理を知り、 直感的にわかりやすい「電気エネルギーを使わない」問題解決をしたくなることもあるんですよね。
この記事で伝えたいこと
なぜキャンプ道具の話をしたかと言うと、プログラミングの世界も、便利になることと引き換えにブラックボックスな領域が拡大してきたと感じるからです。
普段の仕事ではPythonがなぜ動くのか、Laravelのセキュリティの原理などを理解していなくても、実務で使う分には問題ありません。
しかし、エンジニアというのは他のすべての職業と同じく、専門知識で顧客の「問題解決」をしていくのが仕事です。自分が使っている道具の歴史や性質を知ることは、決して無駄にはならないでしょう。
キャンプでテントを設営するときに、どんな形のペグをどこに穿つか、どの方角に入口を向けるかを考えるためにテントの説明書を読むようなものですね。
問題解決の道具としてプログラミング言語を捉えるとき、その道具の歴史には「なにをどう解決しようとしたのか」が必ず含まれているわけです。
それを紐解いていくことが、この記事の目的です。
戦後のプログラミング言語年表
前置きが大変長くなってしまいましたが、19世紀末から今日までのプログラミングの歴史を振り返り、最後には未来予想もしてみましょう。
本記事の作成に当たっては、以下の動画が大変参考になりました。
https://www.youtube.com/watch?v=jBksc8SdUF8
上記の動画の流れに加え、参考資料や文献を元に、加筆しています。
年表は基本的に「[年代]:[解決したい問題][解決した技術]」というルールで書いています。
プログラミング言語登場以前は、解決したい問題のみ書いていることもあります。
とてもボリュームがありますが、おおよその年代ごとに見出しを分け、最後にはまとめも書いているので、必要に応じて読み飛ばしてください。
各年代は「だ・である調」、まとめは「です・ます調」で書きます。参考元記載のない画像やコードは私の独自作成となります。
スクリプト言語以前
19世紀末:人口増加のアメリカ、パンチホールで国勢調査
19世紀末、急激な人口増加によってそれまでの国勢調査の方式では求められる速度と品質が実現できなくなります。
そのとき、CTRという会社が「パンチカードシステム」を導入し、手書きや郵送よりも正確で素早い調査が可能になりました。CTRはこの年、IBMに社名変更する。
ちなみに同じ頃、グラハム・ベルらが開発した電話が徐々に普及していく。ベル研究所とIBMは、後のコンピュータの歴史に大きな影響を及ぼすことになる。
1940年代初頭:イギリスのエニグマ暗号解読とアメリカの爆弾軌道計算
1940年代初頭、解読不可能と言われたドイツのエニグマ暗号を解読するため、イギリスのアラン・チューリングが「チューリングマシン」と呼ばれる機械を使用した。
同じ頃、ジョン・フォン・ノイマンがアメリカで爆弾の起動や着弾予測、被害規模の予想のためにコンピュータを発明しようと試みる。
実際に落とされた原子爆弾の投下時にも、ノイマンの数式は使われていた。
チューリングマシンのレプリカ fabcross for エンジニアより
ジョン・フォン・ノイマン(1903-1957) Wikipediaより
1946年:第二次世界大戦終結後、ENIACの登場とトランジスタによる小型化
戦争終結後、ノイマンが発明したプログラミング可能な汎用コンピュータ「ENIAC」。この頃はまだ部屋に収まりきらない大きさだった。後に、ベル研究所が開発したトランジスタ等の発明で、コンピュータは大幅に小型化していくことになる。
ENIACをプログラミングする様子。 HPC wire JAPAN「ENIAC 75周年:世界初のスーパーコンピュータを記念して」より
1940年代後半:製品ごとに乱立するアセンブリ言語たち
最初期のコンピュータはパンチホール式のアドレスを内部的に2進法に変換するなど、訓練を受けた人間が理解できる文字列を打ち込み、コンピュータに内蔵された機械を通して機械語に翻訳され実行されていた。このような翻訳機をアセンブラといい、利用するコンピュータごとにそれぞれの言語、文字列が設定されていた。
1950年:東西冷戦開始、核兵器開発競争から始まる大プログラミング時代
戦後、ソ連とアメリカおよびヨーロッパの間で長期に渡る緊張関係が生まれ、後に東西冷戦と呼ばれる。核兵器開発競争のさなか、欧州原子核研究機構(CERN)をはじめ、その後のプログラミングの歴史に影響を与える多くの機関が誕生した。
CERNのロゴ 公式サイトより
1954年:コンピュータと話したいから、高水準言語「FORTRAN」登場
IBMのジョン・バッカスが開発した言語「FORTRAN」は、普及した中では世界初の高水準言語となる。高水準言語とは、機械語と自然言語のうち、自然言語により近いプログラミング言語のこと。
FORTRANで書いた”Hello, world!”プログラム。
1958年:もっと書きやすい構文で。ALGOL58、構造化プログラミング誕生
スイスのチューリッヒ工科大で開発された「ALGOL58」は、BEGINやEND、IF等の構文でプログラムを書き込む「構造化プログラミング」の端緒とも言える言語。
その後のC言語やPL/Iなどは、ALGOL系言語とも呼ばれる。
ALGOLで書いた”Hello, world!”プログラム。begin endで囲っているのが特徴。
1958年:LISP、カッコで囲む数学の記法がプログラミング言語に
ヨーロッパでALGOL58が産声を上げた同年、アメリカのMITでは数学者数名がLISPを開発。
数学の論理に基づいてカッコで囲む記法は、その後も◯◯-LISPとして派生していく。
フィボナッチ数列の最初の10項を出力するLISP。カッコで囲む記法が特徴的。
1959年:米海軍のコンピュータおばあちゃん、もっと自然な言語を求めてCOBOLを作る
アメリカ海軍のグレース・ホッパー中将は、「もっと英語に近い書き方でプログラミングできるべきだ!!」との考えの元、COBOLを開発。
現在でも、金融機関や公共サービスでは使われている言語である。
COBOLで書いた”Hello, world!”プログラム。複雑ながら、英語圏の人には分かりやすいコード。
1959年:IBM、初の第4世代言語RPGを作る
IBMがクエリ用ツールとして設計、自社製品向けに開発したRPGは、これまでの言語に比べて更に英語に近い記法で書けるのが特徴。
機械語を第1世代、アセンブリ言語を第2世代とするとき、FORTRAN, LISP, ALGOL, COBOLは第3世代で、RPGは初の第4世代言語となった。
RPGで書いた”Hello, world!”プログラム。IBM製品の入力フォームを生成することを目的にしており、初学者には少しわかりにくい。
ここまでで登場したFORTRAN, LISP, ALGOL, COBOLは最初期のプログラミング言語でありながら、現在でも使われている。
1960年代:第一次人工知能ブームとプログラミング言語の普及
その後、5年ほどで科学技術分野にはFORTRAN、事務作業にはCOBOLが普及した。
また、プログラミング言語をはじめとした科学分野の急速な発展と普及は、科学者たちに人工知能の夢を見せ、この時代が、第一次人工知能ブームと呼ばれている。
1964年:FORTRANは難しすぎるから初心者向けのBASICを作ろう
科学技術分野に普及したFORTRANですが、学生たちが1から学習するには難しい言語でした。
アメリカのダートマス大学ではFORTRANを元に初心者向けの言語「BASIC」が作られます。BASICのBはBeginnerの頭文字です。
BASICはエジソンが創業した会社であるGE(General Electric)と提携して学外にも普及します。
あまりに便利だったので、その後色々な形に派生します。
BASICで書いた”Hello, world!”プログラム。10,20は行番号で、制御フローの実行順になる。また、ジャンプ命令で行番号まで飛んで実行することもできる。CLI時代にはよく使われていた。
1965年:ALGOL、FORTRAN、COBOLの3つの完全上位互換を作りたいIBM、PL/Iを作る
普及していたFORTRANやCOBOLと同じことを一つの言語で実現したいと考えたIBMは、データ処理や構造化プログラミングに対応した新言語「PL/I」を開発。ピーエルアイ派とピーエルワン派がいる。
PL/Iで書いた”Hello, world!”プログラム。ややFORTRANに近い。
1967年:ALGOLの次を目指した中で生まれたオブジェクト指向と波括弧、時代が追いつかずに消える
ノルウェーでは、ALGOLの拡張としてSimulaが作られ、主にシミュレーション等に使われていた。後に汎用言語として北欧を中心に一部普及するが、最大の特徴は初の「オブジェクト指向プログラミング言語」であったこと。
同じ頃、イギリスではALGOLを元にCPLを開発、その後BCPLに発展した。色々と先進的な言語だったが、コンパイラのスペック不足で普及しなかった。こちらは、ブロック構造を表す際に最初に波括弧を使った言語である。
上記のいずれも後のプログラミング言語に多大な影響を与えたが、それそのものは時代が追いつかずに普及せず消えていった。
1970年:ゼロックス社パロアルト研究所設立。西海岸の優秀な研究者の受け皿となる
ゼロックス社は大規模研究施設の第二弾として、西海岸のカリフォルニア州パロアルトに研究所を建てる。本社のある東海岸から遠く、自由に研究できる独立性も担保されていた。
近くのスタンフォード研究所やオーグメンテイション研究センターはNASAやアメリカ空軍の資金援助をもとに研究をしていたが、規模縮小等で優秀な研究者が多くおり、パロアルト研究所はその受け皿となった
1970年:シンプル、汎用を目指したPascal
スイスでALGOLを元に、より教育のためにシンプルで書きやすいプログラミング言語を目指して開発された新言語。Pascalという名前は「人間は考える葦である」でお馴染みの数学者・哲学者のパスカルにちなんでいる。
Pascalで書いた”Hello, world!”プログラム。モダンなプログラミング言語にかなり近くなってきた。
1970年:軍事ネットワークARPANET
アメリカでは国内の軍事的連携のためのネットワーク「ARPANET」が構築される。
アメリカ大陸の東西をつなぐ。
1970年:IBM、リレーショナル型DBの問い合わせ言語を作る
またしてもIBM、リレーショナル型データベースを管理するために構造化された問い合わせ言語「SEQUEL」を作ります。Structured English Query Language(構造化されてて英語で書かれてるクエリ言語)の略語で、シークエルと読みます。
1970年:マルチタスクOSのプロジェクトから撤退したベル研究所のはぐれもの、設計書をもとにUNIXを作る
1969年、メインフレームコンピュータ向けのマルチタスクOSプロジェクト「Multics」に参画していたベル研究所。他にはMITやGEも参画していた。
Multicsの開発進捗が遅かったのでプロジェクトから撤退したが、未実装のOS設計書が社内に多数残った。Multicsのファイルシステム担当であったケン・トンプソンはプロジェクトがポシャって暇だったのでゲームを作ってOS上で動かしていたが、当時はコンピュータリソースも貴重だったので経営陣から隠すために低スペックな別のマシンにゲームを移植した。
同僚のデニス・リッチーと設計段階のMulticsのファイル管理機能を低スペックなマシン上で実装していった結果、現在に多大な影響を与える階層型ファイルシステム、プロセスとデバイスファイルの概念、コマンドラインインタプリタを含むシステムができあがった。その後、アセンブラ、エディタ、シェルなどを作り上げ、OSとして完成させた。
低スペックマシン上で実装したため、出来上がったOSは単一のタスクしかこなせない。そのため、Multicsに対してUnicsと名付け、後にUNIX表記になった(経緯は不明らしい)。
1972年:イギリスから輸入されたBCPL、アメリカでC言語になる
アメリカのベル研究所では先述のBCPLを改良して「B言語」が作られる。更に改良を加え、現在まで続く伝説の言語「C言語」が誕生。Pascalと並んで、後の言語に大きく影響を及ぼすことになる。
C言語で書かれた"Hello, world!”プログラム。1行目に標準入出力関数のインポート、3行目に型定義など、やや複雑だが現在まで続くプログラミング言語の特徴が見える。
1972年:SimulaとLISPにオブジェクト指向を加えたSmalltalk
先述のパロアルト研究所に所属していたアラン・ケイは、オブジェクト指向の考え方を取り入れた新言語であるSmalltalkを開発。
当初はゼロックス社の製品用OSに使われる予定だったが、計画の頓挫とアラン・ケイの退所などの紆余曲折を経て、統合開発環境の色を帯びる。結局、世に出るまでに10年ほどがかかる。
Smalltalkで書かれた、1〜10までの累計和が30になるまで繰り返し処理をするプログラム。
1973年:C言語で書き直されたUNIX、覇権を握る
OSは当時、機械語やアセンブリ言語で書かれるのが一般的でとても開発しにくかった。
また、コンピュータの機種ごとに実装され、移植性や拡張性も低かった。
しかし、UNIXを高級言語であるC言語で書き直した結果、移植性や拡張性が拡大。先述のOS開発の難易度もあり、UNIXはC言語ともども普及し、覇権を握ることになる。
1975、76年:西海岸のベンチャー、シリコンバレーの兆し
IBMやベル研究所はニューヨークなどがある東海岸に集中していた。
一方、西海岸では第二次世界大戦やベトナム戦争時の軍需産業やスタンフォード大学などの卒業生、パロアルト研究所やヒューレット・パッカード社が受け皿となってベンチャー企業が立ち並ぶ気風が育っていた。
特に大きな出来事は、1975年のマイクロソフト、翌年のAppleの創業と言える。
1976年:SEQUEL2、商標問題でやむなくSQLに表記変更
IBMはSEQUELを改良してSEQUEL2を発表しようとしますが、同名で商標登録済み。やむなく、SQLという表記に変更。SQLと書いてエスキューエルと読む派と、シークエルと読む派に分かれているが、歴史を見るとどちらも正しい。
1977年:Apple IIがヒット、パーソナルコンピュータの時代
西海岸では先述のApple IIが一般向けに大ヒット。研究機関や一部の学生だけでなく、一般家庭にコンピュータが普及する時代に。
iPhone Mania 「70年代発売の「Apple II」は今でも愛されている?新作ゲームタイトルも発表」より
1981年:ハッタリが生んだMicrosoftのOS事業
Apple IIのヒットを後追いする形でIBMがIBM-PCの発売を急ぐ。しかし予算面の折り合いがつかず、OS開発予定だった会社がプロジェクトから撤退。そこに進行のマイクロソフトが営業をかけ、見事受注。それまでOS開発をしたことがなかったマイクロソフトは、SCPから購入した86-DOSというOSを改良してMS-DOSを開発・納品した。
MS-DOSの起動画面。CNET「フォトレポート:時代を振り返る--「MS-DOS 4」のインストール」より。
パソコン時代最初期のPascal, BASIC, LISPのニッチ
一般人にはパソコンに付属するBASICが人気。
研究者・開発者の間では多機能で構造的で分かりやすいPascalが人気。
数学者の間では数学の理屈で動くLISPが人気。
1981年:軍事ネットワークにはアクセスできないアメリカの大学、CSNETやBITNETに参画
大学に所属する研究者や学生は軍事ネットワークを利用することが出来なかったため、大学間ネットワークとしてCSNETやBITNETに参画していきます。
1983年:Cで大規模開発したい。C++とObjective C、別々に生まれるも偶然統合可能に
先述のSimulaやBCPLをヒントに、C言語をより大規模開発に使えるよう改善しようという動きが起こる。
ベル研究所はC言語にオブジェクト指向の考え方を導入したC++を開発。
同年、ブラッド・コックスとトム・ラブがObjective Cを開発。
この2つは同年に生まれただけでなく、拡張範囲が衝突していなかったため「Objective C++」として統合することも可能であった。
1984年:日本の大学群、JUNETで相互通信可能に
ヨーロッパのEUNET、アメリカのCSNETやBITNETと合わせ、先進諸国の地域内では通信が可能になる。まだ、地域をまたいだ通信は出来ていない。
1984年:初めてコンピュータに触れた人たちによる「第二次人工知能ブーム」
上述のJUNET整備やAppleII等のパソコン普及で初めてコンピュータに触れる人が増え、市井を中心に世界規模で第二次人工知能ブームが起こる。
1985年:新言語Eiffel(エッフェル)、Smalltalkと並んでオブジェクト指向の教科書になる
フランスのバートランド・メイヤーがSimulaやPascalをもとに開発したEiffel。その後、オブジェクト指向を詳しく解説した書籍を出版したことで、EiffelはSmalltalkと並んでオブジェクト指向の教科書的存在になる。
1984,85年:一般人にはCUIは難しいから、GUI時代の幕開け
1984年、Appleが世界初のGUIベースの家庭用PC Macintosh 128Kを発売。翌年、MicrosoftもOS単品としてWindowsを発売。現在まで続くPC向けOSの二大巨頭が登場した。
それまでは文字を書いて実行するCUI(Character User Interface)が主流だったが、ここからはグラフィックをマウスでクリックして実行するGUI(Graphical User Interface)が主流になる。
ただ、当初はどちらの販売も振るわず、Appleは創業者のジョブズが退任する。
1986年:アメリカと日本のNETが接続、インターネット時代が幕開け
日本のJUNETとアメリカのCSNETが相互通信可能となり、いよいよインターネット時代が幕を開ける。
1987年:ようやく覇権をとったC言語、その後の言語の原料になる
ハードウェアと通信の双方が低廉化し、ようやくC言語がプログラミング言語として覇権を握る。
するとCに変わる言語を作るのではなく、Cで新しい言語を作る動きが活発になる。
Perl等のスクリプト言語のもとになっている。あらかじめ様々な処理を設定し、簡単に呼び出すことができるスクリプト言語は、コンパイラ言語と比べて動きは遅いが書きやすいというメリットが有る。
色々なものの材料になるC言語。
1989年:日常的な国際通信対応のため、ドメイン名「.jp」誕生
それまでは「.junet」というドメインで大学のメールアドレス等に使われていたが、インターネットの普及等に伴いトップレベルドメインを「.jp」に移管した。
JUNETのUは「大学(University)」という意味であり、このドメイン変更は「インターネットが大学間を超えて一般に広まった」と捉えても良いかも知れない。
スクリプト言語以前まとめ
軍事目的で発展してきたプログラミング言語とネットワークが、教育機関での研究を経て、一般に普及した。
一般への普及に伴ってGUIが誕生し、インターネットで世界中と通信ができるようになっていく。
ここから、一般企業や個人向けのWebサービスが乱立していくことになる。
冷戦終結、インターネットの大きな広がり
1989〜91年:冷戦終結、インターネット・バブル前夜
ソ連の崩壊やベルリンの壁崩壊で、米ソ冷戦は終結。それまで関わりを持てなかった人たちの間で技術交流が盛んになる。
1991年:書きやすいけど人によってばらつきがない言語がほしい。Python誕生
Pythonは極めてシンプルで書きやすい一方、Perlのように書く人によってばらつくという問題が発生しにくい設計になっている。
よく言われる「バッテリー同梱の言語」とは、「おもちゃと電池がセットになってて、箱から出してすぐに動く」という例え話で、標準ライブラリが充実していてすぐ使えるPythonのメリットを表している。
Pythonで書かれた"Hello, world!”プログラム。
1991年:Windowsに役割特化のVisual Basic
マイクロソフトはWindowsアプリケーション向けに特化したプログラミング言語 Visual Basicを発表。その後、VB .NETやVBAに続いていく。
1991年:学生が作ったLINUX、オープンソースで無償なので大流行
フィンランドの学生リーナス・トーバルズはLINUXというOSを自作。オープンソースとして無償公開した。WindowsやUNIXは有償であり、無償で使えるLINUXはその後のITの歴史に大きく影響することになる。
1991年:みんなに自由に使ってほしいから、World Wide Webの概念とHTMLを無償公開
CERNのティム・バーナーズ・リーはインターネット上で繋がっているページを公開し、World Wide Webと名付けた。今でもwwwとして、インターネットになくてはならない概念になっている。
また、ページを作成するための言語HTMLも、彼の考えが元になって開発された。
「みんなに自由にインターネットを使ってほしい」と、特許を取得せずに公開している。
1993年:アメリカでインターネットの商用利用許可、Web時代の幕明け
アメリカでインターネットの商用利用が許可され、Web時代が幕を開ける。
Yahoo(1994)、Amazon(1996)などが創業する。
1994〜95年:インターネットの覇権を取りたい。第一次ブラウザ戦争、Netscape vs Internet Explorer
インターネット上に公開されたWebページを見るためには、Webブラウザが必要だった。
いち早くブラウザを公開したNetscapeと、Windows95に同梱されたInternet Explorerの2強だった。
NetscapeとInternet Explorer
1995年:機種ごとに実装するのめんどくさいから、JavaはJVMで環境問わず一度に実装可能に
サン・マイクロシステムズ社が発表したJavaとJVMは、メーカーや機種ごとに異なる実装をするという手間を大幅に削減。
開発者はこの手間の少なさに感動し、Javaはプログラミング言語の覇権を一気に握る事になった。
OSやハードウェアごとにソースコードを用意する方式から、コンパイル後にJVMでOSに対応させるJava。
1995年:ブラウザ上でJavaアプリを動かしたいから、JavaとNetscape提携。サン製Java Appletとネスケ製JavaScript登場
サン・マイクロシステムズはJava Appletという技術でJavaで構築されたアプリケーションをNetscape上で動作させる。
実はNetscapeもブラウザ上でアプリケーションを動かすためにLive Scriptという言語を作っており、書き方が似ているJavaの人気にあやかってJavaScriptという名前にした。
以前は「Netscape JavaScript」だった。
1995年:もっとWebに特化したサーバーサイド言語を求めて、PHP誕生
Webサーバ、APサーバ、DBサーバなどのサーバごとに異なるプログラミング言語が必要であり、Webサーバ側ではJavaScriptやJavaScriptがその役割を担う。
APサーバ側の言語としてはPerlが広く使われていたが、Web時代以前に作られていたため使いにくいという意見もあった。
そのPerlやCを元にしてよりWebに特化した言語「PHP」が誕生。オープンソースで無償公開された。
1995年:フロントエンドからDBまでライセンス料なしで実装するLAMP環境
WebサーバはApache、APサーバはPHPやPython, PerlとOSのLINUX、DBサーバはMySQLと、この年様々な無償公開されたサービスが出揃う。
結果、フロントエンドからDBサーバまですべてのレベルでライセンス料を支払う必要のない環境ができあがり、頭文字を取って「LAMP環境」と呼ばれている。
また、LAMP環境のAPサーバ側言語は頭文字が「P」ばかりだったので「P言語」と呼ばれている。
1995年:尻尾の生えたP言語、Rubyで楽しくプログラミング
日本産のプログラミング言語「Ruby」は、楽しくオブジェクト指向プログラミングをすることを目的に作られた。
こちらもLAMP環境で利用可能な言語で、RubyのRは「尻尾の生えたP」という設定になっている。
1996年:ジョブズのアップル復帰、Objective Cの台頭
C++と比べて日陰者だったObjective C。実はAppleから放逐されていたジョブズの設立した会社で主要言語として使われていた。
ジョブズのApple復帰に伴ってApple社内の主要開発言語となり、ようやく日の目を見ることになった。
1997年:ブラウザごとに環境や言語が違うと開発しにくいから、ECMAScript誕生
Netscapeが「ブラウザごとに環境や言語が違うと開発しにくいから言語の仕様を揃えよう」とスイスのIT国際標準化機構であるECMAインターナショナルに掛け合う。
JavaScriptの標準規格を示すルールであるECMAScriptが誕生する。事実上、ブラウザで表示するWebページの開発言語としてはJavaScriptがスタンダードとなった。
1998年:OS標準搭載、数の暴力でブラウザの覇権はIEのものに
WindowsOSに標準搭載されるIEに比べて、Netscapeはわざわざ自身でインストールする必要があった。そのため、パソコンの普及とともに徐々に劣勢となり、Netscapeは敗北、IEが覇権を握る事になった。
1998年:JavaScriptつかいにくいから、Flashで動かそう
Webページに動的なコンテンツを組み込む際にはJavaScript以外の選択肢がない状態だったが、JavaScriptをもとに作られた「Flash」という技術でより簡単に組み込む事ができるようになった。
その後、FlashはAdobeに買収され、Adobe Flashとなった。
日本でもフラッシュを使った動画などが流行していた。おもしろフラッシュ総合サイトより(https://29g.net/)
2000年:2000年問題、幸い大事には至らず
西暦の上二桁が19から20に変わることで、それまでのシステムが誤動作するのではないかと懸念された「2000年問題」だが、幸い大事には至らなかった。
2001年:ITバブル崩壊
日本でもアメリカでも、90年代は様々なIT企業が勃興し、新規上場で巨万の富を生むITバブルが起こっていた。
しかしいずれも、2001年前後に株価が暴落している。
1990-2002年のNASDAQ100のチャート。 ACTION「ITバブルはなぜ起きたのか?当時の社会背景と崩壊の理由を解説!」より ****https://money-stock.net/financial-products/itbubble/
90年代まとめ
パソコンとインターネットの普及でより大衆化したIT。学生や在野のエンジニアが作ったオープンソースの技術とWebブラウザの普及で、現在に至る多くの技術や会社が誕生します。
この頃にはシリコンバレーでも多くの新興企業が生まれます。S&P500に含まれる巨大企業も多くあり、ITバブル崩壊後もアメリカ経済を支えています。
新世紀、言語より簡単なフレームワークたち
2001年:マイクロソフト、優秀なプログラミング言語を保持したくてC#を作成
OSとブラウザの覇者となったマイクロソフトは、VBに変わる自社の優秀な言語を作ろうと、C#を開発。意味は「C++++」
2004年:Rubyというシンプルな言語で更にシンプルにWebアプリケーションを作れる、Ruby on Rails、スタートアップは大助かり
デンマークのデイヴィッド・ハンソンはRubyで作ったアプリを整理する中で、Webアプリケーション構築用のフレームワークであるRuby on Railsを作成・公開。
元々簡単な構文のRubyを更にシンプルにしてWebアプリケーションを構築可能となったため、スタートアップの間で大流行した。
2005年:Railsに続け、Pythonを元にDjango誕生
WebアプリケーションフレームワークとしてRuby on Railsが成功したことを受け、PythonベースのWebアプリケーションフレームワーク Djangoも誕生。
2005年:ゲーム開発はハードル高いから、Unity誕生
Webアプリケーションに比べて、ゲーム開発は引き続きハードルが高かった。
デンマークのOver the Edge Entertainmentはゲーム開発エンジンのUnityを公開。
紆余曲折を経て、内部の言語はC#が使われた。
2005年:Google Mapsで技術力の高さを見せつけた結果、JavaScriptとPythonに注目が集まる
ブラウザ用検索エンジンはYahooとGoogleの2強であったが、この頃にはGoogleのほうが検索精度が高いという口コミも広まりつつあった。
2005年、Googleが公開したGoogle Mapsは非同期通信で地図を表示するという画期的なサービス。技術者たちの間では、FlashではなくJavaScriptを使った非同期通信を実装しているという技術力の高さが話題となり、再びJavaScriptが注目される契機となる。
また、Googleがサーバサイドで使っていたPythonも同じく注目される。
現在のGoogle mapのUI
2006年:普及しすぎたIE、ウイルスの標的となる
第一次ブラウザ戦争で覇権をとったマイクロソフトのIEですが、普及しすぎた結果ウイルスの標的となりやすくなりました。また、マイクロソフトも巨大化し、アップデートが追いつかなくなっていく。
人気に陰りが出始めたIEに変わるため、ここに第二次ブラウザ戦争が勃発します。NetscapeはModzillaのFirefoxに名称変更しており、他にはApple、Opera、Googleも参戦。
2006年:Amazon、サーバーを固定資産から従量課金へ。AWS EC2とS3誕生、クラウド時代の産声
Amazonは2004年にAWSのクラウドサービス提供を開始。その後、今日まで続く代表的なクラウドサービスとして、コンピューティングのEC2、ストレージのS3を提供。
それまではデータセンターに設備投資をし、ある程度固定のスペックを選定して固定資産として購入していたデータセンターは、減価償却費等の費用として、企業経営を圧迫しがちだった。
クラウドに置き換わり、スケーリングも容易になったことでデータセンターを従量課金に置き換える事が可能になる。これは小規模事業者だけでなく、大企業にもメリットとなった。
その後、2008年にGoogle Cloud、2010年にMicrosoft Azureも参戦し、クラウド基盤はこの3社が主要なプレイヤーになる。
この頃にはクラウドとモダンなフレームワークの組み合わせでとても簡単にWebアプリケーションの実装ができるようになる。
2000年代前半まとめ:どんどん便利に、どんどんブラックボックス化していく言語やフレームワークたち
この頃にはプログラミングは社会に必要な一つの職種として完全に定着し、技術革新の速度も早まっていきます。
また、良いアイデアはどんどんオープンにしていこうという機運もあり、有用なフレームワークがどんどん誕生していきました。結果として、C言語で作られたプログラミング言語をよりシンプルにしたフレームワーク・・・と技術スタックが上に積み重なっていき、OSやハードウェアの領域では技術者にとってブラックボックスな領域が拡大していきます。
習得が簡単な技術ほどマシン内部の処理や型、メモリ領域管理やSQLなどが動的に制御され、意識せずともアプリを開発できるようになっていきます。AWSの登場は「お金を払ってマシンのパフォーマンスを上げれば対応できる。」という考えを定着させ、この流れに拍車をかけることになります。
スマホ時代の幕開け、OSを超えた覇権争い
2007年:初代iPhone発表、スマホ時代の幕開け
2007年1月にジョブズの有名なプレゼンテーションで、iPhoneが発表される。
同年11月にはGoogleが買収していたAndroidがスマートフォン向けOSとして発表される。
CNET Japan「『iPhone』登場から15年--初代の発表会に参加した記者が当時を振り返る」より
2008年:WebページだったFacebookとTwitter、スマホ向けネイティブアプリとなって大流行
元々WebページだったFacebookとTwitterはスマホ時代の幕開けにいち早く参戦。ネイティブアプリとなった結果、ソーシャルネットワークサービス拡大の端緒となる。
2008年:現状維持のECMAScript4、Chrome登場、ブラウザ戦争の行方
iPhoneの普及とともにシェアを伸ばしていたSafari、遅れて登場したGoogle Chromeの参戦で、ブラウザ戦争の役者は揃う。
ECMAScriptはスマートフォンやSNS等のサービスの登場に関わらず、現状維持の改定となる。
GoogleはChromeのシェア拡大を狙って、Chromeブラウザで使えるJavaScript向けエンジンV8をオープンソース化した。
2009年:C++は好きじゃないから、もっと使いやすいGo登場
V8エンジンの開発者の一人であるロバート・グリースマは、ベル研究所の技術者と共同でGo言語を開発。開発理由は「C++の書き方が好きじゃないから」。
CPUのマルチコアが主流となり、C++ではCPUの並列処理の為にOSの知識や不要なメモリの排他処理が必要だった。 Goではゴルーチンと呼ばれる並列処理によりC++よりも気軽に並列処理を実装できる。
Goで"Hello, World!”を10回出力するプログラム。"go”でsay関数をゴルーチンとして非同期で実行している。
2009年:V8エンジンをブラウザに頼らず動かしたい。node.js
カナダのライアン・ダールはV8エンジンをブラウザに頼らず裸で動かすことに成功。node.jsと呼ばれるこの技術を公開した。
これで、JavaScriptをネイティブアプリ用の言語としても使えるようになる。
ときを同じくして、相性の良いデータベースであるMongoDBやサーバサイドの技術であるExpress,jQueryなども登場し「もう全部JavaScriptでいいんじゃないかな」状態となる。
2010、11年:JavaScriptを書きたくないから、AltJSが次々誕生
Webアプリケーションの周辺技術がどんどん登場するJavaScriptであったが、「JavaScriptは書きにくい」という技術者側の問題で引き続き言語としては敬遠され気味だった。
2010年にはRubyのようなコードを書いてJavaScriptに変換するCoffee Scriptが登場
2011年、GoogleもDartという言語でJavaScriptを置き換えようと試みる。
このようなJavaScriptを完全に置き換える目的の言語は「AltJS」(代替JS)と呼ばれた。
JavaScript、CoffeeScript、Dartでそれぞれ「1〜5までの数字の偶数奇数を出力する」プログラム。
2011年:東日本大震災でデータセンタ被災。クラウド化が日本の大企業でも始まる
海外では2010年以前からクラウド化も徐々に進んでいたが、日本ではあまり進んでいなかった。しかし、東日本大震災で東北や関東を中心にデータセンターが被災。多くの情報が喪失したり、アクセス不可となった。
これを受けて、日本の大企業でもクラウド化の機運が高まる。
被災したサーバー。NHK 災害列島命を守る情報サイト「データよ、生きていてくれ」より
2011年:Javaも使いにくくなったから、Kotlin誕生
チェコのJetBrainsは「Javaも使いにくいなあ」という理由から、置き換えることを目的にした言語Kotlinを発表。
2011年:言語は古いけど、新フレームワーク登場で生き残ったPHP
PHPもJavaと同じく使いにくいという理由で置き換えられるかに見えたが、Laravelというフレームワークが新登場。言語は古いがフレームワークは新しく、使いやすく新しい考え方を多く取り入れていたということで、むしろPHPは復権していく。
2011年:Facebook、複雑になったコードの保守管理のためにReactを作る
Facebookではこの頃、広告管理ツールが複雑になりすぎて保守管理が大変になっていた。
UI構築までJavaScriptで行うライブラリを独自に開発し、Reactと名付けて運用を開始。更に、それまでは別々のファイル形式で作成する必要のあったHTMLとJavaScriptを一つのファイルに統合した拡張機能であるjsxも開発する。
2012年:Chrome、全OS対応で覇権を握る
Googleは2012年にAndroidとiOS向けのChromeアプリを公開。Android搭載スマホに標準搭載されているブラウザということもあり、公開から2年程度で第二次ブラウザ戦争の覇者となる。
主要な全てのOSに対応して天下をとったGoogle Chrome
2013年:囲い込みだけだとジリ貧のマイクロソフト、他社向けのオープンな技術開発の一貫でTypeScriptを作る
第二次ブラウザ戦争で破れ、スマホ時代にも乗り遅れたかつての巨人マイクロソフトは、他社向けのオープンな技術としてTypeScriptを開発。
DartやCoffee Scriptと比べてシンプルで控えめなAltJSとなった。
2013年:Instagramを買収したFacebook、Reactをオープンソース化
2012年にInstagramを買収したFacebookは、Instagramの管理ツールやUIにもReactを適用。
2013年にOSSプロジェクトとして公開し、社内にとどまらず活用される様になった。
2013年:jsxとTypeScript、合わせてtsxになる
Objective C++のように、AltJSであるTypeScriptと拡張機能のjsxもお互いに干渉しない拡張を遂げており、統合可能だった。
そのため、TypeScriptでjsx同様にHTMLを描写できるtsxが誕生する。
2013年:JavaScriptだけでWebアプリを作成。MERNスタック完成
Reactの登場で、MongoDB、Express、React、node.jsを組み合わせることでJavaScriptベースの技術だけでDB、AP、Webすべてのサーバを動かすことが可能になる。
この組み合わせはMERNスタックと呼ばれる。
2013年:MERNスタックの足りない部分、クラウドで補う
LAMP環境と比較するとサーバサイドに足りない要素があるMERNスタックだが、AWS等のクラウドサービスと組み合わせることで補っていた。
Medium.com “Automate deploying MERN Stack on AWS App Runner with AWS Code Pipeline”より
2013年:一つのサーバ上で複数の開発環境を独立管理したい。共有したい。Dockerによる仮想環境構築、コンテナオーケストレーション
LAMP環境やMERNスタックとクラウド基盤を組み合わせることで容易に開発ができるようになった結果、世界中の技術者が様々な条件で共同で作業する状況が生まれた。
また、クラウドサービスの費用を考えると、アプリケーションごとに環境を構築し、それをマシンごとに管理するのは難しい。
Dockerはサーバ上に領域を確保し、仮想環境を構築することを容易にしたプラットフォームである。Dockerがインストールされている環境であれば、Dockerファイルを使って容易に環境の再現が可能で、なおかつ一つのサーバ上に複数のコンテナを独立して配置することが可能である。
この仮想環境はコンテナと呼ばれる。「基盤の上にいくつもの仮想環境が独立している」という様子が、タンカーの上にいくつものコンテナが並ぶ様子に似ているためそう名付けられている。
Dockerファイル、イメージ、コンテナ、各環境。
2013年:機能ごとに細分化した技術とサービスを最適に組み合わせよう。モノリシックとマイクロサービスの使い分け
クラウドサービスが細分化したり、オープンソースライブラリや無償のソフトウェア等で様々な機能を容易に実装できるようになった結果「1つのサービスで要求にすべて答える」というモノリシック(多機能単一モジュール)なアーキテクチャに加え、「既存の複数サービスを組み合わせて、新規実装は最低限にしよう」というマイクロサービスアーキテクチャが広がりを見せ始める。
2014年:レガシーの代名詞Java、マイクロサービスとクラウドに合わせたフレームワーク「Spring Boot」で息を吹き返す
95年に覇権を握って以来、20年近く主要な言語であり続けたJavaも、一部の技術者からは古臭くて触りたくない言語になっていた。
しかし、PHPがLaravelで息を吹き返したように、JavaもSpring Bootフレームワークでマイクロサービスやコンテナ仮想化に最適な機能を追加、上手く時代の波に乗る。
元々Javaでならしたベテランも多く在籍する大企業を中心に、Spring Bootの採用は増えていく。
2014年:Apple、古くなったObjective Cに変わる言語、Swiftを発表
ジョブズ復帰から20年近く経ち、自らが発表したiPhoneで大きく時代を変えたAppleも、時代の変化に対応するためObjective Cに変わる言語を独自開発。様々な言語からヒントを得て、Swiftが誕生する。
開発者のクリス・ラトナーはプログラミング言語開発の名人とも呼べる人物。
2015年:Mozilla、今度こそCを置き換える言語を作るぞ!!とRustを開発
2006年頃からModzilla内でスタートしていたCに変わる言語の開発プロジェクトだが、スタートから10年近く、2010年のVer0リリースから5年掛けてようやく、安定稼働するRust v1.0がリリースされる。
現在はオープンソースプロジェクトとして発展しており、StackOverFlowの最も愛される言語に選ばれる一方、学習コストが高い言語としても有名で、発展途上の段階と言える。
2015年:様々な新機能を盛り込んだECMAScript2015制定、JavaScriptが進化してAltJSは廃れる
長年問題になってきた「JavaScript書きにくい問題」について、各社が足並みを揃えて改善に取り組む。ECMAScript2015の制定で各社のJavaScriptは大幅に進化、書きやすく使いやすく、時代の変化に対応した機能も盛り込まれる。
結果として、CoffeeScript等のAltJSは廃れていく。唯一、JavaScriptの記法をほぼそのまま踏襲していたTypeScriptだけが残った。
2015年:iPhoneとAndroid両方一気に実装したいから、React Nativeのクロスプラットフォーム開発
FacebookはOSS化していたReactをスマートフォンアプリ開発用に改修。一度の実装でiOS、Andoroid、Windows、Macなど多くのOS向けのネイティブアプリを一気に実装可能となった。
この後、Unityもクロスプラットフォーム開発に対応し、GoogleからはFlutterがリリースされることになる。
スマホ時代まとめ:苦戦する振興勢力、時代に合わせるレガシー言語、スタンダードを作るGAFA
2000年代前半と後半を比べると、スマホの登場でマルチプラットフォーム対応が求められたことが大きな違いでしょう。いち早くすべての主要OSに対応したGoogle Chromeが覇権を握り、SNS市場も同様のことが起こります。
このころに確固たる力をつけたGAFAは圧倒的な技術スタックの一部をオープンソース化し、それがスタンダード担っていきます。
JavaScriptやJavaを置き換える試みは、この時点では失敗に終わっています。レガシーと呼ばれる古い言語たちも、フレームワークの登場やバージョンアップで時代に追いつき、結果として代替する言語が普及する前に復権しているというサイクルになっています。
AI時代
2015年:第三次人工知能ブーム、AIが結実し始める
この頃にはチェスやオセロ、囲碁などでAIが人間を負かし、画像認識もスマホサイズに搭載できるまでになる。第二次人工知能ブームまではフィクションの域を出なかったAIが、この頃には一気に現実味を帯びていく。
アルファ碁に敗れる囲碁のプロ。Google DeepMind“The Future of Go Summit, Match Three: Ke Jie & AlphaGo” ****より
2015年:Google等が使っていたPython、AIブームに乗じて更に人気に
この頃のAI研究の多くが、Google等の巨大テック企業やベンチャーでPythonを使って実装され、一部はオープンソースライブラリとして公開された。
結果として、大学での研究等もPythonで行われるようになり、Djangoフレームワーク共々人気になっていく。
2015年:OpenAI、汎用AIを目指して設立
上記のAIの実績は、チェスや碁、画像認識などが専門の「特化型人工知能」がほとんどだった。
イーロン・マスクとサム・アルトマンらが設立したOpenAIは、用途を限定しない「汎用型人工知能」の実現を目指して設立、研究開発を開始する。
2016年:拡張現実(AR)ゲームの先駆け。NIANTIC、Pokemon GOをリリース
GoogleのAI技術をスマホアプリに落とし込むプロジェクトが、2015年に「Niantic」として独立。
Google Map、画像認識等の技術の粋を集め、Nintendoと共同でPokemon GOをリリース。
北米を中心に大流行した。
また、これをきっかけに中心技術のUnityにも再び注目が集まった。
Pokemon GO公式サイトより
2017年:不人気言語のDart、Flutterのためだけに最適化する
先述の通り、Googleも独自の表示システムを持ったクロスプラットフォーム開発環境「Flutter」を公開。採用されたのは、AltJSとしてCoffee Scriptとともに廃れたはずのDartだった。
他で採用されていなかった分、Flutter向けに最適化されていった。
2017年:簡単になりすぎたアプリケーション開発。どうせならプログラミングなしで開発したいから、ノーコード/ローコードツール
この頃にはクロスプラットフォームが成立し、アプリケーション開発は当初と比べて驚くほど簡単になった。結果、クロスプラットフォーム開発より更に簡単なローコード/ノーコードツールも誕生した。
2017年:Javaは古くなったけど技術者は置き去りにしたくない。GoogleのKotlin採用
GoogleもJavaに変わる新言語を探しており、Swiftに統一するという動きもあった。
しかし、Google社内のJava技術者も活かしていきたいと考え、Javaを元にした言語Kotlinを採用した。
2018年:OracleがJavaの開発元を買収。有償化の噂でJava離れが起こる。受け皿はPython
OracleがJavaの開発元であるサン・マイクロシステムズを買収し、それまで無償で提供されていた一部サービスを有償化する。
この際、「Javaも全面的に有償化するのでは?」という誤解が生まれ、一部のプログラマーや開発会社がJavaから他の言語へのリプレースを進める。
思わぬ形でJava離れが起こったが、一部を除いて引き続きJavaは無償で使える。
受け皿として、Pythonが選ばれることが多くなった。
2020年:技術の遅れを取り戻せ!!日本のプログラミング義務教育化
諸外国に遅れを取っていた日本も、プログラミングの義務教育化で巻き返しを図る。
JavaScript、Java、Pythonなどから選択して授業を行う形式で、実用性や将来性の面からPythonが人気とのこと。
2020年:コロナ禍、2ヶ月でリモートワーク体制を整えなきゃ!!スクラッチ開発からSaaSへの開発手法移行
欧米では主流だったSaaSに職務を合わせる手法。日本ではあまり流行っておらず、企業ごとに要件定義を含めて1年〜数年掛けて行うスクラッチ開発が主流だった。
しかし、コロナ禍で2ヶ月でリモートワーク体制を整える、ワクチン受付システムを3週間で完成させるなど、これまでにないスピード感で実装する必要が出てきた。
結果、日本国内でもパッケージ型SaaSの導入が進んできており、反比例してスクラッチ開発は減りつつある。
2022年:OpenAIのChatGPT、自然言語処理の精度で他社を圧倒
実はGoogle等の他社に負けると考えてOpenAIを去っていったイーロン・マスク。しかし、研究開発が結実し、2023年3月にリリースしたChatGPTは自然言語処理やコーディングの分野で他社を圧倒。
2015年以降まとめ:AI開発戦争の真っ只中。見えてきた汎用AI、徐々に置き換わるレガシー言語
2015年から現在までは、スマホ向けアプリ開発から汎用AI開発に戦場が移り、その真っ只中と言えるでしょう。
現時点ではOpenAIが一歩リードしていますが、Google BardやMicrosoft Bing Chatなど、GAFAM各社のAIも精度が上がってきています。
日本は震災やコロナ禍など、具体的な危機を受けて他国より数年遅れて波が来ています。しかし、ChatGPTは日本語版リリースとほぼ同時に爆発的に広がりました。ある意味、危機としてスピード感を持っているのでしょうか。
意外な形でJavaからPythonへとプログラミング言語の覇権が置き換わりつつあります。また、GAFAMが社内向けに採用した新言語の影響で、C言語も徐々に減ってきています。
AI開発戦争の先には何が待つのか
2023年:もっとAIを作りやすく、パフォーマンス高く。PythonベースのMojo登場
AI開発には計算処理のパフォーマンスとこれまでの知見を活かすことが重要で、Pythonには前者が欠けていた。AppleでSwiftを開発したクリス・ラトナーは、Pythonベースの新言語Mojoを発表。
一般的には高水準言語ほどパフォーマンスが下がり、Pythonはかなりの高水準言語なので低パフォーマンスになってしまう。Mojoは理論値でPythonの3.5万倍、C言語並のパフォーマンスを出すことを目指して作られているとともに、これまでの成果を有効活用するためにPythonと互換性を持たせていることも特徴である。
Pythonには速さが足りない。Pythonベースの新言語、JuliaとMojo
上述のMojoに加え、2018年にJuliaが登場。
いずれも、Pythonに比べてパフォーマンスが向上している。
次の戦場は量子コンピュータ。フレームワークのQiskit、Cirq
更に、PythonのフレームワークGoogleのCirq、IBMのQiskitなども登場。これら2つの特徴は、量子コンピュータ開発に最適化されているということ。
量子コンピュータは1980年代から提唱される概念で、最近になったようやく実現が見えてきた分野である。
ノイマン型コンピュータの登場から実に70年以上を経て、コンピュータのアーキテクチャが大きく変わることが考えられる。
IBMの量子コンピュータ。ZDNET「IBM、53量子ビットの新型量子コンピュータを発表」より
2024年以降まとめ:Pythonに変わるハイパフォーマンスな言語と量子コンピュータが、次の戦場
AI開発競争の次には、何が待っているのでしょう。
Javaに変わって主要な言語になりつつあるPythonは、豊富なライブラリや書きやすさというメリットがあるものの、パフォーマンスが低いという弱点があります。JuliaやMojoのような新しいハイパフォーマンスな言語は、Pythonに変わることができるでしょうか。
また、ノイマン型コンピュータが登場してからまもなく80年になります。100年の節目を迎える前に、新しいアーキテクチャが生まれるのでしょうか。
あくまで私の考えですが、上記2つが、次の大きなムーブメントになると予想しています。
温故知新を当てはめる、フルスタックエンジニアにつながるメンタルモデル
ここまで、様々な事例を時系列と解決したい問題に着目して見ていきました。最後には、2024年以降に訪れるムーブメントについても予想しました。
いずれも市井のエンジニアまで技術が普及するのは数十年先の話になるかも知れません。ただ、全ての技術はその背景に解決したい問題と、重厚な歴史があります。次の時代が来る前に、前の時代を振り返ること。温故知新で、市場価値の高いエンジニアになりたいですね。
Javaが使えるベテラン技術者を活かすためのGoogleのKotlin採用、言語としては古いけどモダンなフレームワークが生まれたおかげで復権したPHP、ライセンス料なしで使えるLAMP環境。開発競争に勝つためのスクリプト言語の台頭、本流の進化で衰退したAltJS。
技術は様々な問題を解決する中で複雑に絡み合ったり、流行り廃りを繰り返してきました。
エンジニアは、問題解決をする仕事です。教養は、そのまま当てはめて役立つものではなく、抽象化して帰納的に自分の中に積み上げていくものだと思います。
この記事で「このプログラミング言語はどんな背景で、どんな問題を解決しようとしたのか」を押さえ、その上で適切な問題解決をするための一助となれば幸いです。
終わりに
この記事の構成の7割は、ルビーDogさんの動画の内容です。動画の最後には、以下のようなことを仰っていました。
「言語は所詮目的のための道具に過ぎませんが、道具の歴史を知ることは、ときに真の目的を我々に与えてくれます。」
私も仕事の傍らこの記事を書いている間の数週間だけでも、他の業務の問題解決にこの記事で学んだ教養を活かすことが出来ました。
採用情報
divxでは一緒に働ける仲間を募集しています。
興味があるかたはぜひ採用ページを御覧ください。
参考資料
・ルビーDog「プログラミング言語の歴史【訂正版作成予定】」https://www.youtube.com/watch?v=jBksc8SdUF8
・Weblio辞書「Prologの歴史」https://www.weblio.jp/wkpja/content/Prolog_歴史
・reddit.com「Why did Unity choose C# as a scripting language and not Java?(なぜUnityでCシャープを採用したか)」https://www.reddit.com/r/java/comments/10sj89l/why_did_unity_choose_c_as_a_scripting_language/
・SEむううみんのプログラミングパラダイス「Lispはなぜ神の言語と呼ばれるのか」https://muuumin.net/why-lisp-god-language/
・リクナビネクスト「バブルの死、『コミュニティ』の誕生」https://next.rikunabi.com/tech/docs/ct_s03600.jsp?p=001207
・IBM「アポロ計画成功の裏には、“進化し続ける”コンピューター・システムがあった」https://www.ibm.com/blogs/think/jp-ja/space-ibmz/
・gihyo.jp「RubyKaigi2013レポート まつもとゆきひろさん、Rubyに影響を与えた言語とRuby開発初期を語る。」https://gihyo.jp/news/report/01/rubykaigi2013/0001
・Wikipedia「ジョン・フォン・ノイマン」https://ja.wikipedia.org/wiki/ジョン・フォン・ノイマン
・Wikipedia「パンチカードシステム」https://ja.wikipedia.org/wiki/パンチカードシステム
・fabcross for エンジニア「第二次世界大戦前に開発されたエニグマ暗号解読機のレプリカを製作」https://engineer.fabcross.jp/archeive/200730_bomba-kryptologiczna.html
・HPC wire JAPAN「ENIAC 75周年:世界初のスーパーコンピュータを記念して」https://www.hpcwire.jp/archives/43666
・CERN公式サイト https://home.cern/
・CNET 「フォトレポート:パロアルト研究所(PARC)--先端研究施設の内部に迫る」https://japan.cnet.com/article/20388082/
・CNET「フォトレポート:時代を振り返る--「MS-DOS 4」のインストール」https://japan.cnet.com/article/20377060/
・iPhone Mania「70年代発売の「Apple II」は今でも愛されている?新作ゲームタイトルも発表」 https://iphone-mania.jp/news-350238/
・IT Media「Linuxの父、リーナス・トーバルズ氏がMillennium Technology Prizeを受賞」https://www.itmedia.co.jp/news/articles/1204/20/news035.html
・NHK 災害列島命を守る情報サイト「データよ、生きていてくれ」https://www3.nhk.or.jp/news/special/saigai/select-news/20210409_01.html
・ZDNET「IBM、53量子ビットの新型量子コンピュータを発表」https://japan.zdnet.com/article/35142834/
・おもしろフラッシュ総合サイト https://29g.net/
・ACTION「ITバブルはなぜ起きたのか?当時の社会背景と崩壊の理由を解説!」https://money-stock.net/financial-products/itbubble/
・CNET Japan「『iPhone』登場から15年--初代の発表会に参加した記者が当時を振り返る」よりhttps://japan.cnet.com/article/35189707/
・Medium.com “Automate deploying MERN Stack on AWS App Runner with AWS Code Pipeline” https://medium.com/bb-tutorials-and-thoughts/automate-deploying-mern-stack-on-aws-app-runner-with-aws-code-pipeline-5f311c606380
・Amazon “Official Netscape Javascript 1.2 Book: The Nonprogrammer's Guide to Creating Interactive Web Page” https://www.amazon.co.jp/Official-Netscape-Javascript-Book-Nonprogrammers/dp/1566046750
・Google DeepMind“The Future of Go Summit, Match Three: Ke Jie & AlphaGo” https://www.youtube.com/watch?v=ru0E7N0-kFE
・Pokemon GO公式サイト https://pokemongolive.com/ja/