“ORMは百害あって一利なし”という記事を書いたとき、いろんな方面からあれこれ言われたものだけど、いまだに Qiita からいいね通知が飛んでくる。正直、過去の記事を読み返すのは苦手で、当時の自分を思い出したくない(苦笑)。
ふと“あれ書いてから10年くらい経ったかな?”と思って確認したら、まだ5年しか経っていなかった。中身はほとんど覚えていないけど、今でも“ORMって何がそんなに良いのか、本質的には全然わからん”という気持ちは変わっていない。やっぱり直接 SQL 書いて実行したい。
記事のどこかにも書いた気がするが、個人的には“OOP も百害あって一利なし”だと思っている。これもいずれ書いてみてもいい。インターフェースは百歩譲って必要だとしても、クラスはなくても最悪どうにかなるんじゃない?──みたいに思う瞬間がある。
調べてみたら Go はまさに“関数 + インターフェース”で構築できる言語だった。しかもカーニハンが関わっているという。「ああ、この人は本質を分かってるんだろうな」と妙に納得してしまったRust や TypeScript も、クラス無しで普通に組める。
一方で、モダンな言語とモダンなツールを使った大規模開発では、事故防止のための“仕組み”が山ほどあって、それがもうプログラミングの本質とは別物に見えてくる。もっと 処理の本質だけに集中したいのに、周辺のルールに気を取られてしまう。
そもそも、クラス間の関係性って「処理をどこに置くか」について“これ”という唯一の正解はなくて、A でいいと思ってもレビューでは B を求められたりする。しかも、それが言語の実装や文化によっても違う。Java では正しいと言われる構造が、C# では「それは違う」と言われたりする。
“Java と C# は兄弟”なんて聞くが、実際に触ってみるとぜんぜん違うモノに見えてくる。
とはいえ、こういう混乱こそがプログラミングの面白さでもある。でも、年齢的に「新しい言語をあれこれいじる立場でもないよな…」という感覚もある。基礎知識さえあれば言語横断は簡単、という意見は一定レベルでは正しいけれど、“その言語の文化と特性を理解したうえでパフォーマンスを出せるか?”と問われると、意外とつまずく。即戦力が求められる現場では、“すぐできます”と言いながら、実際は最短でも数カ月のトライアンドエラーが必要だったりする。しかしフリーランスだとその期間を許してくれない場合が多いのではないか。雇い主によって“目をつぶれる人”と“つぶれない人”がいて、特に若い層は中年エンジニアに厳しいところもある。特に競争が激しい場所だと煙たがられそう。
ChatGPT にこの手の話を聞いたら「OOP は宗教戦争だから迷って当然」と言われた。だったらいっそ、私はアルゴリズムのラディカル教に入って、チューリングマシンの 0 と 1 の世界に戻りたい気分だ。5億年ボタンを押しながらハノイの塔を積み続けていたい──まあ、さすがにそこまではいかないけど。
結局、使い慣れたツールと馴染んだ言語で、できれば死ぬまで仕事ができればそれでいい……でも、1年後に何をしているのか自分でも読めないほど変化の激しい世界に生きているのが現実。
でもORM的にベストプラクティスをくれとAIに聞けば、SQLもしくあDB定義をもとにそこそこいい感じにラッパーを書いてくれると思うので、AI時代的には「ORMとかどうでもいい」気がする。
やがて、上流工程のドキュメントから下流工程のすべてを生み出してくれというオーダーをAIが受け持つようになり、そのうち上流工程を取り仕切るコンサルタントもいらなくなる…ところまではさすがに汎用AIがものになるまで10年以上はかかるかもしれないが、多かれ少なかれこの記事に限らずプログラミングのテクニックの無意味化がされていくのだと思う。プログラミング言語自体が人間のための中間言語であって、AIは機械語を直接生成すればいいだけになるし当然の成り行きだろう。

コメント