プログラミングでやっていることは、本質的にはデータの変換だ。
たとえば、
a b c d
という横一列のデータを
a b c d
みたいに2行2列にするとかな。もちろん、これは分かりやすいがつまらない例だ。もう少し意味のある例としては、たとえば100万個の数が与えられたとして、それらの合計や平均を求めたり、各数を2倍したり、条件に合う数のみを抜き出したり、といったことだ。
プログラミングというのは、どんなに専門的になろうが、本質的にこれしかやっていない。これは何も、「この世の現象はすべて物質間の相互作用に過ぎない」みたいなナンセンスな話をしているのではない。MicrosoftやGoogleのエンジニアだろうが、「プログラミング」に関しては本当にこれしかやっていないのである。そして正直、これはつまらない。
もちろん、あらゆる仕事は究極的に言えば、上と同じような単純作業の組み合わせかも知れない。しかしそれでも、一定以上の知的労働なら、好奇心や創造意欲をかき立てられるものがあるだろう。たとえば力学を応用して機械を設計するとか、回帰分析で将来のデータを予測するとかは、それなりに面白いと思う。一方、プログラミングにそういうものはない。ひたすら、原理的には小中学生でも理解できるデータ変換器を書くだけである。
プログラミングが他の科学技術と最も異なる点は、技術の進歩がないことである。だいたいどんな領域でも、「今まで無かった技術が発見されて、昔できなかったことができるようになる」ということがある。しかし、プログラミングにはそういうことは一切無い。たしかに、スマートフォンなどは昔は無かったが、それらはすべてハードウェアの進歩である。
かわりにプログラミングの世界にあるのは、「やり方」の流行り廃りだけである。つまり、上の小学生でも分かるデータ変換を「どう書くか」が時代によって変わる。この「どう書くか」っていうのは、書き方によってソフトウェアの性能が著しく変わるとかではない。たとえば、日本語の文章で3つの項目を並列するときに、
A、B、C
と読点で区切って並べるか
- A
- B
- C
と箇条書きにするか、というレベルの話である。これによって、伝わる内容自体が変わるわけでも、文章がより洗練されるわけでもない。プログラミングの進歩というのはこういうレベルのことしかない。
誤解のないように言っておくと、プログラミングに進歩がないからと言って、新しい技術を学ばなくて良いことにはならない。2020年現在に、BASICとか初期のJavaなんかでソースコードを書く意味は無いし、そんなことは迷惑だからするべきではない。プログラミングの新技術は、プログラミングの範疇では昔の技術より優れていることが多いし、組織で開発をする上で共通知識になり得るから、積極的に学ぶべきである。ここで言っているのは、プログラミング自体に進歩が無いということだ。
プログラミングに進歩がないというより、コンピュータサイエンスという分野自体が、数世紀レベルで遅れてて低レベル クヌース-モリス-プラット法 https://ja.m.wikipedia.org/wiki/%E3%82%AF%E3%...
「全てのプログラムはフィルタである」の1行で済むのではないかと思う