私は「Magic」をあまり好まない。自分が使う技術や道具についてはその動作機序を知ったうえで使いたいと思う。
yarnやnpm、pnpmがどのように依存性を解決するかや、webpackが内部的に何をしているかなどについてはよく知っているつもりだ。Next.jsのServer Actionsなんかも本当は内部的には素直にPOSTを非同期で投げてるだけだということも知っている。(余談だが、Remixに思想が似ていると思う)SPAのルーティングの仕組みや、SSRにおけるハイドレーションという行為が何をしているかなどもわかっていると思う。
とはいっても実際にはunder the hoodで動いているものはもちろんたくさんある。自分でいうとnode.js自体がどのように実際には動いているかまでは例えば把握していない。たぶんV8が機械語にJITか何かで訳して実行して、OSやアーキテクチャごとの違いはV8のバイナリの違いが吸収してるんだと思っている。(V8ってJavaでいうJVMのような感じだといえるだろうか?)
そういう意味ではMagicを好まないと自分では言っているもののどこまではMagicでどこからは知らなくていいものなのかというのは難しいし曖昧で恣意的だと自分でも思う。
そもそもソフトウェアやライブラリ、APIといった存在は、「そのオブジェクトの内部実装を知らなくてよい」という存在であろうとしているのに、そこに敢えて立ち入るというのはなんとなくその歴史を無にしているような感じもする。
結局は、誰かのためにエンジニアリングをしている以上、最終的には自分が納得できる解像度で理解できていてそれによって説明責任が果たせればそれで充分なんだとは思う。
自分の考えでは、実務上、少なくとも自分が名前を認識して自分の意志で選ぶ範囲の技術については、その選定に消極的であれ関わる以上は説明責任を果たすべきだと考えている。
どうだろうか。