ソフトウェアエンジニアリングは死んだ。テック系のTwitterで最も声の大きい人々は、あなたにそう信じ込ませようとしている。彼らは、AIツールがたった一行のプロンプトからアプリケーション全体を立ち上げる画面録画を共有し、なぜ今さら人間にコードを書かせるために金を払う必要があるのかと問いかけてくる。そのパニックは理解できるが、彼らは本質を完全に見失っている。

AIはエンジニアを奪いに来るのではない。タイピングの速さを技術的な判断力と勘違いしている人々を奪いに来るのだ。コーディングとエンジニアリングの間には巨大な隔たりがあり、その隔たりの中にこそ、この職業のすべてが存在している。

AIアシスタントは、あなたがコーヒーを飲み終える前に、ある機能を実装するための5つの異なる方法を提示してくれる。ボトルネックは変化した。もはや、どうやって書き始めるかを考えながら空白のファイルを見つめることはない。代わりに、実際のトラフィックが押し寄せた瞬間に崩壊しないのはどれか、と5つのもっともらしい解決策を見つめることになる。その決断こそがエンジニアリングだ。それ以外はすべて、単なる構文に過ぎない。

デモは製品ではない

AIのコーディングデモを見れば、数分で美しいインターフェースが出来上がっていく様子を目にするだろう。しかし、そこで見ることができないのは、負荷がかかったときに枯渇するデータベースのコネクションプールだ。APIエンドポイントにおけるレート制限の欠如、監査ログの不在、あるいはAIが状態を保存するのに便利な場所だと判断したために、すべてのユーザー操作をオブジェクトバケットに記録することによるストレージコストなども見えない。

本番環境のシステムには、スケーラビリティ、セキュリティ、パフォーマンス、そしてコスト管理が求められる。これらの特性は、スプリントレビューでは見えない。それらが姿を現すのは、予測不可能な挙動、エッジケース、そして想定した順番通りにボタンをクリックしてくれない実際のユーザーが現れたときだけだ。私は、QAでは「グリーン」に見えたAI支援プロジェクトが、リリース後の1週間で高くつく教訓へと変わるのを何度も見てきた。

動くコードは安価になった。しかし、優れたエンジニアリングはそうではない。

今、何が重要なのか

この変化の中で成功しているエンジニアは、タイピングが最も速い人々ではない。コードが一行も生成される前に、どのような問いを立てるべきかを知っている人々だ。

  • 問題を明確に定義する。 AIモデルは、放っておけば喜んで間違った問題を解決しようとする。わずか6人の社内アナリストしか使わない、読み取り負荷の高いダッシュボードのために、複雑なキャッシュ層を構築してしまうだろう。それが、データベースのインデックス不足なのか、あるいは根本的に壊れたデータモデルによるものなのかを問い直すことはしない。熟練したエンジニアは、解決策がコードに関わるかどうかに関わらず、解決策が明白になるまで問題を再定義する。

  • 巨大なシステムを小さな断片に分解する。 AIはローカルなコンテキストに優れている。単一の関数、単一のコンポーネント、単一のテストを書くことは得意だ。しかし、分散アーキテクチャ全体を頭の中に保持することは苦手である。モノリスを分解し、サービスの境界を引き、チーム間のコントラクトを定義できるエンジニアこそが、生成されたスニペットを持続可能なシステムへと変えることができる。

  • AIの提案に疑問を呈する。 モデルの自信は蜃気楼のようなものだ。ネットワークのレイテンシを無視したアーキテクチャを提案したり、何年も前に非推奨になったライブラリを推奨したり、要件には存在しない機能を解決しようとしたりする。