“あなたはFacebookじゃない”。だから簡単な問題を複雑にするな。
どのページだったか忘れたが、Hacker News から辿った個人ブログを読んで私は衝撃を受けた。我が意を得たり、と思ったからだ。
そのブログを書いた個人 — ソフトウェア・エンジニアだったが— は、フロントエンドエンジニアとして長年の経験があるが、現在主流の技術はほとんどのケースにとって過剰であり、問題を複雑にするだけだというのがその主張だった。
何を言いたいのかというと、Reactのことだ。あのような仕組みが必要なのはFacebookのような、世界的なシステムを抱えていて、その複雑さを解決するためにReactを作ったのであり、あなたが作ろうとしている、ユーザーがいるかいないかもわからないようなWebサイトのフロントエンド技術としてReactを採用するのは過剰ではないのかと。それを一言で表現すると「あなたはFacebookじゃない」(Facebookの部分にはGoogleでも何でも大企業の名前を当てはめてください)と。
衝撃だった。私が20年以上も考えては答えが出ずにいたことを、一言で説明してくれたと感じた。
私はソフトウェア・エンジニアとしてのキャリアをスタートさせた2000年前後というのは、ようやくLinuxやらオープンソースのDBMSやらを保守的な企業が採用するかしないかと騒いでいた頃だ。プログラミング言語でいえば、JavaがServletと共にもてはやされ、それまで主流だったPerlという動的言語を嫌っていた企業がこぞって採用していた。
私にはまったく理解できなかった。Perl(私はそれに馴染みがないので同じ動的言語であるRubyが好きだった)でいいじゃないかと。RDBMSなんて必要なのか?たかが「DBから好きなデータを引っ張ってきて、HTMLタグの中にぶちまけるだけの処理」に、やれSQLを動的に生成する仕組みだか、それをJavaの世界で表現するためのDTOだか、それを操作するDAOだか、ビジネスロジックを記述するサービスクラスがあり、その数年後に登場したDI(依存性の注入)という概念により、設定はXMLで書けだと?
簡単なことを複雑にしようとするんじゃないよ。
しかし当時、そんな事を私が言おうものなら私は業界から叩き出されるだけだった。RDBMSの理論は数学だ。お前は1+1=2のところを5や500だと主張するバカであると。動的言語対静的言語の議論は今の今まで続いているが、大規模開発におけるコンパイラの有用性は証明されていると。そんな当然のことに疑念を呈するお前はバカだ、というわけだ。
しかし、問題はそこではなかった。
問題は、そのような複雑さを解決する手法は、それが充分に大規模かつ複雑な問題になった時の解決方法だったのに、それを小規模なケースに当てはめたことだった。それを一言で表現するなら「あなたはFacebookじゃない」だから大げさなことをして簡単な問題を複雑にするんじゃないよ。
Reactに関しては、私は以前にこのような記事を書いた。
その後、Webフロントエンドのトレンドがどのように変わったのか、私は知らない。Svelteなどがあるらしいが、私は触ったことがないため何も書けない。
RDBMSなんて必要ないんじゃないの?JSONでいいでしょう。データに階層構造を持てるようになれば、2次元テーブルの複雑なリレーションシップなど不要になる。なんでも2次元テーブルで解決しようとするのは「Excelおじさん」の悪い癖だ。Excelでドキュメントを書くな。
バックエンドのビジネスロジックには、DIだのインターフェースだの、Javaで書きまくった継承などという差分プログラミングも、ぜんぶ要らない。DBのデータをJavaのオブジェクトとして表現する?してどうする。いらねえよ。ORMも要らない。DTOも要らない。DAOのようなものは、単なるユーティリティクラスだ。
インターフェース?要らねえよ。しかし私は2010年代にQiitaなどで関数型万能論を唱えていたイキったガキではないので、オブジェクト指向がまったく不要であると言っているわけではない。単に、それを応用する場所を間違えていると言いたいだけだ。オブジェクト指向は、シミュレーションや、ビデオゲームなどの分野で未だに有効ではあるけど、Webサービスを作る場合、それを採用するのは単純に使う場所を間違えており、なぜWebサービスにオブジェクト指向を取り入れてしまったのかというとJavaを導入したからであり、Javaはオブジェクト指向言語だからだ(8未満ね)。
なぜ私がこのような記事を書いたのかというと、Javaで書かれたレガシーシステムのお守りを任されたからだ。なので、この20年のキャリアを持つ「ベテラン」とやらが何を使ってレガシーシステムをどうにかしようというと、
これだ。もうJavaのコードなんて書いていられるか。SQLなんて書いていられるか。そんなものはAIアシスタントにお任せする。これが私の「20年のキャリア」への回答だ。バカだって?そうかもしれない。AIアシスタントにコーディングを任せたらお前の仕事がなくなるって?なくならないよ。AIアシスタントから望む回答を得るには、質問を細かく細かく、具体的に書かなければならないからだ。それには知識と経験が必要だ。更に、AIアシスタントが提案したコードを採用するかしないかは人間が判断することだ。判断には知識と経験が必要だ。
AIアシスタントの効用とは何か?それは生産性の向上である。
あたり前のことを言うなって?そう?あなた、本当にこの言葉の意味を理解していますか?
今まで謎のエラーに悩まされて無駄な時間を浪費していたところが、スタックトレースをまるっとコピーしてAIアシスタントに見せれば原因と対策も教えてくれる。
それでは余った時間は?別のことができるようになる!
あなたはもう一つ別の仕事を掛け持ちして、更に儲けることができるようになるかもしれない。新しい技術とは常にこのようなものだった。その技術によって時間が余れば、別のことができる。仕事が増えるんだ。だから「ラッダイト運動」なんて必要なかった。
しかし初学者が「適当にAIアシスタントに聞いたら適当な答えを出したのでコードをペーストしたら適当に動いた」をしてしまうと勉強にならないのでお薦めしない。
初学者にとって僥倖なのは、AIアシスタントがあなたにとっての優れた導師(GURU)になってくれることだ。従来、あなたのコーディングスキルを高めてくれる優れた導師に出会えるかどうかというのは運だった。だから、もしあなたが不運でも月1,000円程度を払うお金さえあれば優れた導師を見つけられる。そこで必要になるのは、わからないことをどんどん質問することだ。
まとまりがなくなってしまったが、この記事はそろそろ終わる。
不必要に複雑、というより乱雑なレガシーコードは人間が読むに耐えず、AIアシスタントに任せる。そして、これから新しいプロジェクトを立ち上げる際は、簡単なことを複雑にしないでいただきたい。これは自分の肝に銘じなければならない。