10年間のプログラミングの変化といえばクラウド、型推論、リアクティブ

この10年間のプログラミングの変化、というのが流れてきたのだけど、個人的にはクラウド型推論付き静的型、リアクティブかなぁという風に思ってます。

クラウド(とスマホ)

2008年にGoogle App Engineが出たり、最初のHadoopサミットが行われたり、ちょうど10年前に始まったとも言えるクラウドは、すでに流行ではなく常識になっています。
いまや、クラウドを考えずにシステムを組むということはないんじゃないでしょうか。
スマホもこの10年で広まり、端末にUI、データはクラウドということも当たり前になっています。
40%の視聴率をもった紅白で視聴者が同時投票するようなことも、AWSを使って危なげなく行えるようになっていますが、10年前にこのようなサービスをたった4時間だけ行うということはなかなか考えにくいもので、実現できるのも限られたベンダーだけだったと思います。けれどもいまではそれなりに技術力と予算さえあれば、だれでも高負荷に耐えれるサービスを実現できるようになっています。
それと同時に、10年前まではデータストアはRDBMS一辺倒でしたが、NoSQLという言葉がもはや使われなくなるくらい、RDBMS以外のデータストアも普通に使われるようになりました。
ハードウェアで始まっていたスケールアップからスケールアウトへの流れが、完全にソフトウェアに定着した10年と言える気がします。

型推論付き静的型(と関数型)

2010年くらいにScalaが流行り始め、型推論の便利さ強力さが知られるようになり、動的型言語と同じような手軽さで静的型の安心感をもったプログラムができるようになりました。
Swift、Kotlin、Rustなど、この10年、2008年以降に出てきてきた言語は、ほとんどすべて型推論付きの静的型だと言えます。動的型なのはElixirくらいでしょうか。(Clojureは2007年)
それと同時に、関数型というのも一般的になったように思います。C++Javaでもlambdaが使えるようになりました。C++では同時に型推論も使えるようになっています。Javaもlambdaでは変数が型推論されますが、3月に出るJava 10でようやくローカル変数でも型推論できるようになります。
型推論を実現するコンパイラ技術や言語設計技術の進化と普及が、この10年の変化ではないかなと思います。

リアクティブ

クラウドスマホが広まる中で、ひとつの処理が複数のコンピュータをまたがって行われることも多くなりました。
そこで、別のコンピュータに処理を投げてる間にほかのことをする並列実行の必要性が高まってきました。
プログラム言語も関数型的な機能をもつことが当たり前になっていて、並列実行にも関数的な考え方が持ち込まれることになります。
そこで、アクターモデルやリアクティブストリームなど、並列実行モデルが通常の開発でも使われるようになってきています。
いままでは数値計算など限られたプロダクトで限られた技術者だけが使うものだった並列処理が、リアクティブという名前で身近になったように思います。
特に、処理の高速化からリソースの効率利用に並列処理の視点が変わってきたのが、この10年の変化だと思います。

RxJavaリアクティブプログラミング (CodeZine BOOKS)

RxJavaリアクティブプログラミング (CodeZine BOOKS)