What Happened To Programming In The 2010s?

Matthias Endler

2010年代、プログラミングに何が起きたのか?

少し前、Fred Wilsonが書いた「2010年代に何が起きたのか」という記事を読みました。この記事では、この10年間にテクノロジーとビジネスの世界で起きた重要な変化が取り上げられています。それに触発されて、もっと範囲を絞ったテーマについて考えてみることにしました。2010年代、プログラミングに何が起きたのか?

🚓 実際に起きたことの90%くらいは、たぶん忘れています。どうか訴えないでください。この記事の目的は、過去を振り返ることで、未来をよりうまく予測できるようにすることです。

どこから始める?

はるか上空から眺めるような視点で見れば、プログラミングは10年前と変わっていません。

  1. エディターにプログラムを打ち込む
  2. コンパイラー(またはインタープリター)に渡す
  3. ビーッ、ブーッ 🤖
  4. 出力を受け取る

しかし、もう少し詳しく見てみると、周囲の環境は大きく変わっています。今では当たり前だと思っているものの多くが、10年前には存在しませんでした。

その前には何が起きていた?

2009年当時、私たちはjQueryのプラグインを書き、共有ホスティングサービスでウェブサイトを運営し、FTPでコンテンツをアップロードしていました。コードは、ときには怪しげなフォーラムやブログのチュートリアルからコピー&ペーストし、さらには本から手で書き写すことさえありました。2008年9月15日にサービスを開始したStack Overflowは、まだ生まれたばかりでした。バージョン管理にはCVSSVNを使っていました。そもそもバージョン管理をしていないこともありました。私は2010年1月3日にGitHubに登録しましたRaspberry Pi(発売されたのは2012年)については、誰も聞いたことすらありませんでした。

<a href='https://xkcd.com/2324/'>xkcd #2324</a>
出典:xkcd #2324

新しいプログラミング言語の爆発的増加

この10年間には、数多くの新しく魅力的なプログラミング言語が生まれました。

CrystalDartElixirElmGoJuliaKotlinNimRustSwiftTypeScriptは、いずれも最初の安定版をリリースしました!

さらにすごいのは、上記の言語がすべて今ではオープンに開発されていて、ソースコードが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年
Go6か月
Java6か月
JavaScript(ECMAScript)12か月
PHP12か月
Python12か月
Ruby12か月
Rust6週間(!)
Swift6か月
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個あります。

主要なプログラミング言語のパッケージ数。<br /> 2019年にnpmで何が起きたのかは聞かないでください。
主要なプログラミング言語のパッケージ数。
2019年にnpmで何が起きたのかは聞かないでください。
出典:Module Counts

もちろん、ときどきleftpadのようなことも起こります。しかしその一方で、自分たちで書くライブラリコードを減らし、ビジネス上の価値に集中できるということでもあります。反面、障害が発生する可能性のある箇所は増え、監査も難しくなります。古いままになっているパッケージも数多くあります。より詳しい議論については、Linux FoundationとHarvardによるCensus IIレポート[PDF]をおすすめします。

フロントエンドのフレームワークについても、少し熱狂しすぎました。

ただ飯はない

こうした振り返りでムーアの法則を覗いてみないわけにはいきません。この10年間、ムーアの法則は驚くほどうまく成り立っていました。

<a href='https://en.wikipedia.org/wiki/Moore%27s_law'>Wikipedia</a>
出典:Wikipedia

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

<a href='https://www.youtube.com/watch?v=Azt8Nc-mtKM&'>スタンフォード大学:コンピューティングの未来(動画)</a>
出典:スタンフォード大学:コンピューティングの未来(動画)

ムーアが予言した新しいトランジスターは、CPUを高速化するのではなく、並列性の向上やハードウェア暗号化など、別の種類の処理能力を加えるようになっています。もう、ただ飯はありません。エンジニアは、アプリケーションを高速化する新しい方法を見つけなければなりません。たとえば、並行実行を取り入れることです。

コールバック、コルーチン、そして最終的にはasync/awaitが、業界標準になりつつあります。

GPU(Graphics Processing Unit、画像処理装置)は非常に高性能になり、大規模な並列計算が可能になりました。その結果、機械学習が実用的な用途でルネサンスを迎えました。

ディープラーニングが実行可能になり、機械学習は広く利用されている多くのソフトウェアサービスやアプリケーションに不可欠なものとなった。— Wikipediaの「機械学習の年表」

コンピューティング資源はどこにでもあるため、少なくともコンシューマー向けデバイスでは、多くの場合、純粋な性能よりもエネルギー効率が重視されるようになっています。

思いもよらない運命のいたずら

学んだこと

ここまで読んで、Matthias、Xを完全に忘れているじゃないかと思ったなら、まさにその点を伝えたかったのです。ここで取り上げたのは、起きたことのほんの一部にも及びません。すべてについて話すには、おおよそ10年は必要でしょう。

個人的には、次の10年が楽しみです。ソフトウェアは、これまで以上に速いペースで世界を飲み込んでいます。

原文は Matthias Endler により に公開されました。

この記事は「gpt-5.6-luna」を使用して翻訳されました。