私たちプログラマは、コードと向き合い、戦ってきました。クラウドシステムや分散システムなどのWeb技術が発展する中で、システム構築手法も進化してきました。CI/CDやDevOpsによってサービスのデリバリが加速すると同時に、リファクタリングやTDD(テスト駆動開発)、オブジェクト指向・関数型プログラミングといった開発パラダイムも磨き上げられ、私たちはより良い「綺麗なコード」を追い求めてきました。
では、AIが普及し始めた今、その「綺麗なコード」の意義はどうなるのでしょうか。「もうコードはAIに任せればいいじゃないか」と考える方も増えています。
綺麗なコードとは、"誰"のためのものか
コードは本来、コンピュータへの命令を記述するものです。しかし、コンピュータにとって、コードが読みやすかろうと読みづらかろうと、動作や性能に差はありません。むしろ、無駄な最適化を多用するとリソース消費が増え、処理速度が低下することさえあります。
それでも私たちが綺麗なコードを追求する理由は、コードが最終的に「人」に向けられたコミュニケーション手段だからです。
綺麗なコードは、開発効率を上げ、共同作業を円滑にし、運用・保守性を担保します。バグの発見が早まり、リリースは安定し、プロジェクトは持続可能になります。
「なぜそのコードが必要なのか」「何の役割を果たすのか」を考え抜き、適切に抽象化・分解し、意図をコードに込めます。彼らはまるで機械と対話してると錯覚しがちですが、実はその対象は、人です。彼らは自身が見ていた世界を、人に伝えるために「綺麗なコード」を記述していたのです。
言い換えれば、「綺麗なコード」とは、コンピュータを媒介として人と人をつなぐ、「人のためのインターフェース(IF)」なのです。
人の限界
生成AIは十分に整った情報をインプットしないと、抜け漏れや齟齬が発生しやすい存在でした。しかし、対話型インターフェース(Chat)の登場により、継続的なやりとりで複雑なコンテキストを交換できるようになりました。つまり、革新をもたらしたのは AIそのものではなく、「AIと人をつなぐインターフェースのあり方」 なのです。
今、AIエージェントという言葉もありますが、「人 → AI → システム」 という新たなインターフェースが開かれつつあります。人がAIに指示を与え、AIがシステムと対話する。IFの拡張と捉えれば、とてもシンプルに理解できます。
さて、どんなにAIが賢くなっても判断を委ねる裁量は今のところ人が持っています。逆に言えば、現状のAIはあくまでも人の依頼を遂行する存在で、AIの性能が向上したところでこの関係性は崩れません。※
これまでは、AI側のコンテキスト限界が課題でしたが、これからは 「人類側のコンテキストの限界」 がボトルネックになるでしょう。膨大な情報を適切に分解し、整理して抽象化するのは人間の役割です。
言い換えれば、AIが進化するほど、「人の意味を抽象化し、AIとの境界を分解・定義」が重要になります、即ち「人とAIつなぐインターフェース」 がより重要になるのです。
※ 将来的に自律的AIが登場すれば状況は変わるかもしれませんが、現状ではまだディストピア
「分解」と「継続」って、それ
「巨大なものを分解し、作業単位に落とし込む」──これは多くの仕事に共通する本質です。その中でも、プログラマは人とソフトウェアの境界を探りながら、ソフトウェアを駆使して巨大な構造物を実現してきました。さらに、ソフトウェアとして柔軟性を持たせ、継続的に進化させてきました。
AIという新たな役割者が参戦しても、プログラマはいなくなる とか言われても、なぜか違和感を覚えないのは、境界を探り、価値ある単位に落とし込み、長期的に維持・改善することが重要になるわけで、ぶっちゃこれってねえ?
その根底にあるのは「意味を抽象化し、境界を分解・定義し、手渡すインターフェースとする」なのです。"システム"に向ければ巨大な構造物に、"開発手法"に向ければ継続的な進化となります。そして、それを"コード"に向ければ「綺麗なコード」になるわけです。
つうわけで、プログラマほどAIとは地続きな存在は、修練として新規参入するのはまだまだ全然悪くない手だったりするかな。という話で始めたあれです。この辺りがバッドプラクティスになるぐらいAIが進化すると面白いですね!!
おまけ AIさんは気に食わなかった様子
論理の飛躍
「AIが進化するほど人の抽象化スキルが重要になる」という論は興味深いですが、前提となる「人がAIに指示を出す構造は変わらない」という断定にはやや疑問が残ります。
提案:この主張には、もう少し限定条件や補足(例:「汎用AIが登場するまでは」)を入れると説得力が増します。