2010年代、プログラミングに何が起きたのか?
少し前、Fred Wilsonが書いた「2010年代に何が起きたのか」という記事を読みました。この記事では、この10年間にテクノロジーとビジネスの世界で起きた重要な変化が取り上げられています。それに触発されて、もっと範囲を絞ったテーマについて考えてみることにしました。2010年代、プログラミングに何が起きたのか?
🚓 実際に起きたことの90%くらいは、たぶん忘れています。どうか訴えないでください。この記事の目的は、過去を振り返ることで、未来をよりうまく予測できるようにすることです。
どこから始める?
はるか上空から眺めるような視点で見れば、プログラミングは10年前と変わっていません。
- エディターにプログラムを打ち込む
- コンパイラー(またはインタープリター)に渡す
- ビーッ、ブーッ 🤖
- 出力を受け取る
しかし、もう少し詳しく見てみると、周囲の環境は大きく変わっています。今では当たり前だと思っているものの多くが、10年前には存在しませんでした。
その前には何が起きていた?
2009年当時、私たちはjQueryのプラグインを書き、共有ホスティングサービスでウェブサイトを運営し、FTPでコンテンツをアップロードしていました。コードは、ときには怪しげなフォーラムやブログのチュートリアルからコピー&ペーストし、さらには本から手で書き写すことさえありました。2008年9月15日にサービスを開始したStack Overflowは、まだ生まれたばかりでした。バージョン管理にはCVSやSVNを使っていました。そもそもバージョン管理をしていないこともありました。私は2010年1月3日にGitHubに登録しました。Raspberry Pi(発売されたのは2012年)については、誰も聞いたことすらありませんでした。

新しいプログラミング言語の爆発的増加
この10年間には、数多くの新しく魅力的なプログラミング言語が生まれました。
Crystal、Dart、Elixir、Elm、Go、Julia、Kotlin、Nim、Rust、Swift、TypeScriptは、いずれも最初の安定版をリリースしました!
さらにすごいのは、上記の言語がすべて今ではオープンに開発されていて、ソースコードがGitHubで自由に公開されていることです。つまり、誰でも開発に貢献できます。これはオープンソースの大きな成果です。
これらの言語は、それまで広く普及していなかった新しい考え方を、それぞれ導入しました。
- 強力な型システム:KotlinとSwiftはnullableな型を一般的なものにし、TypeScriptはJavaScriptに型を持ち込みました。代数的データ型は、Kotlin、Swift、TypeScript、Rustで一般的に使われています。
- 相互運用性:DartはJavaScriptにコンパイルでき、ElixirはErlangと連携し、KotlinはJavaと、SwiftはObjective-Cと連携します。
- より優れたパフォーマンス:Goは並行処理を容易にするゴルーチンとチャネルを広め、1ミリ秒未満のガベージコレクターで注目を集めました。一方、Rustは所有権と借用のおかげで、ガベージコレクターのオーバーヘッドを完全に回避します。
これはほんの短いリストにすぎませんが、プログラミング言語分野のイノベーションは大幅に加速しました。
古い言語でも進んだイノベーション
定番の言語も立ち止まっていたわけではありません。いくつか例を挙げましょう。
C++は長い冬眠から目を覚まし、1998年の前回のメジャーリリースから、ようやくC++11をリリースしました。ラムダ式、autoポインター、範囲ベースのループなど、数多くの新機能が言語に導入されました。
この10年の初め、PHPの最新バージョンは5.3でした。今は7.4です。(6.0を飛ばした理由については、まだ話す準備ができていません。)その間に、速度は2倍以上になりました。PHPは今や本当にモダンなプログラミング言語であり、活発なエコシステムもあります。
なんと、Visual Basicにまでタプルが加わりました。(すみません、どうしても言いたかったのです。)
リリースサイクルの短期化
ほとんどの言語が、より短いリリースサイクルを採用しました。主要な言語について、いくつか見てみましょう。
| 言語 | 現在のリリースサイクル |
|---|---|
| C | 不定期 |
| C# | 約12か月 |
| C++ | 約3年 |
| Go | 6か月 |
| Java | 6か月 |
| JavaScript(ECMAScript) | 12か月 |
| PHP | 12か月 |
| Python | 12か月 |
| Ruby | 12か月 |
| Rust | 6週間(!) |
| Swift | 6か月 |
| Visual Basic .NET | 約24か月 |
nullのゆるやかな死
前の10年が終わりに近づいた2009年8月25日の講演で、Tony Hoareはnullポインターを「10億ドルの過ち」と表現しました。
Chromiumプロジェクトの調査によると、深刻なセキュリティバグの70%はメモリ安全性の問題でした(Microsoftでも同じです)。幸いなことに、メモリ安全性の問題は、下手なコーダーが原因ではないという考えが、ようやく広まり始めました。
多くの主流言語が、nullに代わるより安全な仕組みを取り入れました。nullable型、Option型、Result型です。Haskellのように、以前からこうした機能を備えていた言語もありますが、人気を得たのは2010年代になってからでした。
型システムの逆襲
これと密接に関係しているのが、型システムをめぐる議論です。この10年間で、型システムは舞台に返り咲きました。TypeScript、Python、PHPなどが、型システムを取り入れ始めたのです。
流れは型推論へと向かっています。ほかの人間に意図を明確に伝えたいときや、曖昧さに対処したいときには型を追加し、そうでなければ省略するのです。Java、C++、Go、Kotlin、Swift、Rustは、型推論をサポートする人気言語の例です。私自身の経験についてしか言えませんが、ここ数年でJavaを書くのはずっと快適になったと思います。
ライブラリとフレームワークの指数関数的増加
現在、npmには1,330,634個のパッケージがあります。つまり、誰かが保守してくれているパッケージが100万個以上あるということです。さらにRubyのgemが160,488個、Pythonのプロジェクトが243,984個、そしてRustのcrateが42,547個あります。

2019年にnpmで何が起きたのかは聞かないでください。
出典:Module Counts
もちろん、ときどきleftpadのようなことも起こります。しかしその一方で、自分たちで書くライブラリコードを減らし、ビジネス上の価値に集中できるということでもあります。反面、障害が発生する可能性のある箇所は増え、監査も難しくなります。古いままになっているパッケージも数多くあります。より詳しい議論については、Linux FoundationとHarvardによるCensus IIレポート[PDF]をおすすめします。
フロントエンドのフレームワークについても、少し熱狂しすぎました。
ただ飯はない
こうした振り返りでムーアの法則を覗いてみないわけにはいきません。この10年間、ムーアの法則は驚くほどうまく成り立っていました。

ただし、落とし穴があります。シングルコアの性能を見ると、曲線は平坦になりつつあります。

ムーアが予言した新しいトランジスターは、CPUを高速化するのではなく、並列性の向上やハードウェア暗号化など、別の種類の処理能力を加えるようになっています。もう、ただ飯はありません。エンジニアは、アプリケーションを高速化する新しい方法を見つけなければなりません。たとえば、並行実行を取り入れることです。
コールバック、コルーチン、そして最終的にはasync/awaitが、業界標準になりつつあります。
GPU(Graphics Processing Unit、画像処理装置)は非常に高性能になり、大規模な並列計算が可能になりました。その結果、機械学習が実用的な用途でルネサンスを迎えました。
ディープラーニングが実行可能になり、機械学習は広く利用されている多くのソフトウェアサービスやアプリケーションに不可欠なものとなった。— Wikipediaの「機械学習の年表」
コンピューティング資源はどこにでもあるため、少なくともコンシューマー向けデバイスでは、多くの場合、純粋な性能よりもエネルギー効率が重視されるようになっています。
思いもよらない運命のいたずら
- Microsoftが今やクールな存在になりました。GitHubを買収し、Windows Subsystem for Linux(本当はLinux Subsystem for Windowsと呼ぶべきでしょう)を発表し、MS-DOSと.NETをオープンソース化しました。Microsoft Calculatorまで、今ではオープンソースです。
- IBMがRed Hatを買収しました。
- Linus Torvaldsが自らの振る舞いについて謝罪し、休暇を取りました。
- オープンソースがソフトウェア開発の標準になりました(?)。
学んだこと
ここまで読んで、Matthias、Xを完全に忘れているじゃないかと思ったなら、まさにその点を伝えたかったのです。ここで取り上げたのは、起きたことのほんの一部にも及びません。すべてについて話すには、おおよそ10年は必要でしょう。
個人的には、次の10年が楽しみです。ソフトウェアは、これまで以上に速いペースで世界を飲み込んでいます。
記事をランダムに読む