モダンな技術とはなにか
#思考の癖 #言葉
特に #プログラミング の技術発信の文脈で、「モダンかどうかを重視するのは本質的ではない」といった批判がある。
ここで批判されているのは例えば、企業で採用している技術スタックが新しいフレームワークかどうかで人材獲得の競争をすることの不毛さなどであり、この種の指摘に正当性がないわけではない。
とはいえ、私は技術におけるモダンさとは単なる新しさ(少なくともリリース日が最近であること)とはかなり独立した概念だと思っている。
ここでは、私が「技術においてモダンさとは何だと思っているか」をメモしていく
ある技術がモダンであるとは「解いている問題のレベルが高いこと」で定義される
これは一般的に言われる「新規性」とある程度は近い
むしろ私は「新規性」という概念自体をこう説明したほうが良いと思っている(以降「新規性」という言葉は使っていない)
「問題そのものは古いが、解決方法だけが新しい場合もあるじゃないか」と言われそうだが、私はこのケースも同じ定義でカバーできると思っている
なぜなら、解決する対象の問題が古かったとしても、モダンな技術はそれを新しい問題に再定義しているケースがしばしばであるからだ
たとえば #React は、HTML 上の UI の状態変化を「時間で変化する木構造」の問題に置き換えて解いている
cf: #「仮想DOM」という用語を使わない
また Server Components は、UI の一部がビルドや初回レンダリング時に事前に決定するケースをカバーするために、それを木構造の多段階計算という問題に置き換えたものと見なせる
このような問題の再定義のうまさが、React を既存の #JavaScript より明らかにレベルの高いフレームワークにしている
「解いている問題のレベルが高い」というのはかなり主観的な定義だが、そもそもモダンかどうか自体が主観的な概念なのである程度はしょうがない
なぜ企業がモダンな技術をアピールすることに意味があるかというと、「自分たちが解いている問題のレベルが高い」ということを間接的にアピールできるからである
後発の技術が「シンプルさ」を売りにすることは、この意味でのモダンさに逆行する場合がある
ある技術が「そんな難しい問題解く必要がないじゃん」という発想で生まれている場合、それは私が考える意味での「モダンな技術」ではない
これは「そんな難しい解決に頼る必要がないじゃん」とは明確に異なる
これを言っていいのは同じぐらい難しい問題をよりシンプルな方法で解いてる場合に限られる
問題そのもののレベルを下げているやつがこれを言ってはダメだと思う
たとえばいわゆる HTML-centric なライブラリ群が、React の問題意識に追いついているかはだいぶ怪しい
これらはどちらかというと「そんな難しい問題解く必要がないじゃん」と主張してるだけではないだろうか?
そうなると「解いている問題のレベルが高い」という定義には当てはまらないので、まぁ悪くない技術かもしれないがモダンとは呼びたくない、という考えになる
もちろん、「モダンじゃなくても良いケースでの選択肢」があるのは素晴らしいことだ
もちろん、問題意識をすべて理解したうえで「実はこの問題はこう定式化できるんだ」という反論が設計思想にこもっているのなら、それはモダンな技術だ
「なぜこの問題がそれほど難しいのか」が見えている人の反論だけが価値を持つ
本来価値あるシンプルさはこういうものだけを指すべきだ
ある抽象に反論できるのは別の抽象であるはずで、何も抽象しないことではない
私は Web Components は好きな技術だが、利用者的にはあまり解く問題のレベルが高くない技術だと思う
Backbone.js のような古い問題意識の設計が標準化されて便利になったやつ、という風に見えている
もちろん Web Components を標準化する過程で、ブラウザ実装者はレベルの高い問題を解いてるかもしれないが、それはまた別の話だ
なぜ問題のレベルの高さを「モダン」という時間的な単語で表すのかというと、技術の歴史には進歩主義的な想定があるからだ
歴史上すでに解かれた問題を知ったうえで、新しい問題を発見したものが優れているという前提がある
なぜこの前提が成り立つかというと、同じ分野はおおむね同じ目的を共有しており、(ふつうの歴史と違って)進化の方向が定まりやすいからだ
結果的に、「優れたものは新しくなりやすい」という発想が「モダン」という単語選びに現れるのだと思う