What Happened To Programming In The 2010s?

Matthias Endler

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

原文は Matthias Endler により に公開されました。 このブログを購読する

しばらく前に、Fred Wilsonによる「What Happened In The 2010s」という記事を読んだ。その投稿では、この10年間のテクノロジーとビジネスの大きな変化が取り上げられていた。これに触発されて、もっと焦点を絞ったテーマについて考えてみたくなった。2010年代、プログラミングに何が起こったのか?

🚓 おそらく実際に起きたことの90%くらいは忘れてしまっていると思う。どうか訴えないでほしい。私の目的は過去を振り返ることで、あなたが未来をよりよく予測できるようにすることだ。

どこから始めようか?

俯瞰してみれば、プログラミングは10年前と今でも本質的には変わっていない。

  1. エディタにプログラムを打ち込む
  2. コンパイラ(あるいはインタプリタ)に渡す
  3. ピポパッ 🤖
  4. 出力を受け取る

しかし、もう少し詳しく見てみると、私たちの周りでは多くのことが変わっている。今日では当たり前になっていることの多くは、10年前には存在すらしなかったのだ。

以前はどうだったのか?

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

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

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

この10年間で、膨大な数の新しくエキサイティングなプログラミング言語が生み出された。

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

さらに素晴らしいのは、上記のすべての言語が現在オープンに開発されており、ソースコードがGitHubで自由に入手できることだ。つまり誰もが開発に貢献できるということであり、これはオープンソースの大きな証と言える。

それぞれの言語は、以前は広く普及していなかった新しいアイデアをもたらした。

  • 強力な型システム: KotlinとSwiftがoptional null typesを主流にし、TypeScriptがJavaScriptに型をもたらした。代数的データ型はKotlin、Swift、TypeScript、Rustで一般的になっている。
  • 相互運用性: DartはJavaScriptにコンパイルでき、ElixirはErlangと、KotlinはJavaと、SwiftはObjective-Cと相互運用できる。
  • 高いパフォーマンス: Goはより簡単な並行処理のためにGoroutineとチャネルを推進し、1ミリ秒未満のガベージコレクタで注目を集めた。一方Rustは、所有権と借用のおかげでガベージコレクタのオーバーヘッド自体を回避している。

これはほんの一例に過ぎないが、プログラミング言語分野のイノベーションは大きく加速した。

古い言語におけるさらなる革新

既存の言語も立ち止まってはいなかった。いくつか例を挙げよう。

C++は長い冬眠から目覚め、1998年以来のメジャーアップデートとなるC++11をリリースした。ラムダやautoポインタ、範囲ベースのforループなど、数多くの新機能が言語に導入された。

2010年代の初め、PHPの最新バージョンは5.3だった。今は7.4だ(6.0は飛ばしたが、その話をする心の準備はまだできていない)。その間にPHPは2倍以上高速になった。今やPHPは活気あるエコシステムを持つ真にモダンなプログラミング言語だ

なんとVisual Basicにすら今ではタプルがある(すまない、言わずにはいられなかった)。

リリースサイクルの高速化

多くの言語がより速いリリースサイクルを採用するようになった。人気のある言語についていくつか挙げてみよう。

言語現在のリリースサイクル
C不定期
C#~ 12ヶ月
C++~ 3年
Go6ヶ月
Java6ヶ月
JavaScript (ECMAScript)12ヶ月
PHP12ヶ月
Python12ヶ月
Ruby12ヶ月
Rust6週間(!)
Swift6ヶ月
Visual Basic .NET~ 24ヶ月

nullの緩やかな終焉

2000年代の終わりに近い2009年8月25日の講演で、Tony Hoareはnullポインタを自らの10億ドルの過ちと呼んだ。

Chromiumプロジェクトの調査によると、深刻なセキュリティバグの70%がメモリ安全性の問題だったMicrosoftでも同様だ)。幸いなことに、メモリ安全性の問題はコーダーがダメだからではないという考えが、ようやく広まりつつある。
多くの主流言語がnullの代わりに、nullable typesやOptionResult型といったより安全な代替手段を採用した。Haskellのような言語には以前からこれらの機能があったが、普及したのは2010年代になってからだ。

型システムの逆襲

これと密接に関連するのが型システムをめぐる議論だ。この10年間で型システムは華々しいカムバックを果たし、TypeScriptやPython、PHPといった言語(ほんの一例だが)が型システムを取り入れ始めた。

流れは型推論へと向かっている。曖昧な場面では他の人にとって意図をより明確にするために型を付ける。そうでなければ省略する、という考え方だ。Java、C++、Go、Kotlin、Swift、Rustはいずれも型推論をサポートする代表的な例だ。あくまで私見だが、ここ数年でJavaを書くのはずいぶん楽になったと思う。

ライブラリとフレームワークの指数関数的な増加

現時点で、npmには1,330,634のパッケージが登録されている。つまり100万以上のパッケージを誰かがあなたの代わりにメンテナンスしてくれているということだ。さらに160,488のRuby gems243,984のPythonプロジェクト、そして42,547のRustクレートがそれに加わる。

人気のあるプログラミング言語のパッケージ数。<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&'>スタンフォード大学: The Future of Computing (動画)</a>
出典: スタンフォード大学: The Future of Computing (動画)

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

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

GPU(Graphics Processing Unit)は非常に強力になり、大規模な並列計算が可能になったことで、実用的なユースケースにおける機械学習のルネサンスがもたらされた。

ディープラーニングが実現可能になり、機械学習が広く使われている多くのソフトウェアサービスやアプリケーションに不可欠なものとなった。 — Wikipediaの機械学習のタイムラインより

Computeは遍在するようになったため、ほとんどの場合、(少なくともコンシューマー向けデバイスでは)純粋な性能よりもエネルギー効率の方が今や重要な役割を果たしている。

思いがけない運命のいたずら

学び

もし今「Matthias、Xのことをすっかり忘れているじゃないか」と思ったなら、私の言いたいことは伝わったということだ。これは実際に起きたことのほんの一部にも満たない。すべてを語ろうとすれば、ざっと10年はかかるだろう。

個人的には、次の10年が楽しみでならない。ソフトウェアは世界を飲み込んでいる。そのペースはますます加速している。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント