エンジニアの仕事がAIで置き換え可能なんて悲しいこと、簡単に言わないで欲しい
最近、SNSや技術記事投稿プラットフォームなどで「エンジニアの仕事がAIによってなくなる」だとか、「AIによって生成されるコードを利用することが当たり前になる」だとか、そういった昨今のAIの発達に伴うエンジニアの価値の変化を警告するような旨の主張をよく見かけます。そして自分はそういった主張を見るたび、正直辟易しています。悲しいです。
これはそういう記事です。
そもそも、エンジニアってコードを書く仕事をする人でした?
自分はエンジニアとして仕事を始めて割と初期から「エンジニアって実際コードを書くってより、机の前で思考して固まってる時間がほとんどだよね」って思ってたし、今もそれは変わっていません。
関数ひとつ実装するだけでも、インターフェースはどうするか、責務はどこまで持たせるか、今後の拡張性やメンテナンス性を考慮するとどういう実装パターンが良いか、など考えることは盛りだくさんです。
結局、コードをかくなんていうのはその思考を翻訳して写(映)しているだけで、エンジニアの仕事の本質ではないと思っています[1]。ちなみに「どうコードを書くか」についての意思決定をすることは大事なエンジニアの仕事であり本質のひとつだと思っています。
しかし、(あくまで主観ですが)巷で祭り上げられている「AIができること、やってくれること」の中で、特に強調されがちな点って、結局は「適切な指示さえすれば動くコードが出てくる」ことくらいに見えます。
もちろんすごいことですが、それをもってエンジニアの仕事が変化するとか、なくなるとか、そんなこと言われても何もピンとこないなあと思ってしまいます。
動くコードを書くこと自体は当たり前だと思ってるし、どちらかというとそれをいかに整理して適切なかたちでコードに落とし込むか、という洞察や思慮の方が重要だと思ってます。そしてこれは代えが効きづらく、もしAIに任せるなら相応の労力(指示や検証など)が必要になります。
確かにAIが代わりにコードを書いてくれるのは、その作業分人間の負担が減るし、素敵なことだと思っています。実際自分自身もLLMが搭載されたエディタでサジェストを活用したり、チャット窓での設計相談などをさせてもらって恩恵にあずかっています。
ただし、後述しますがあくまでそれは補助輪としての活用に留まるくらいで、本格的にエンジニアの仕事を食うほど大きな単位での実装や設計を丸ごと任せられると自分は思っていません。[2]
現状、コードを書くことすら完全になくなると思えない
「ある機能の実装をAIにやらせたら自分が介入する隙もなく良い感じのコードがでてきて怖い...エンジニアの仕事なくなるかも...」「仕様やテストをしっかり書けば中身の精査をせずともAIの出力が利用できる!効率UP!」
この手のつぶやきを見ると、どうしてそこまで無批判にAIのそれっぽい出力を受け入れられるのだろうか、と自分の価値観との違いに驚きます。
当然ではありますが、結局「人間によるレビューは重要」「十分なドキュメント管理や指示、仕様整理が重要」という前提は常に伴っているとは思いますが、そうであるなら尚更手段の一つの域を出ないのではないでしょうか。
どちらが優れているとか、どちらが淘汰されるとか、そういうコンテキストが感じられて一人で勝手にモヤモヤしてしまうことが多いです。
コードを自分で考えて設計し記述するのか、コードを書かない代わりにレビューやドキュメント整理という別の作業を重視するか、作業領域を選択できる余地ができたくらいで、「エンジニアの仕事」としてのコード記述すら、完全に代替されるとは思えません。
今だってブラックボックスな技術基盤を信用して運用している。AIも一緒。という論理について
「AIによる出力は将来的に我々人間が精査せずとも利用できるようなる、それくらいAIが信用を得る」だとか、「今私たちが使っている技術基盤、いちいち詳細を理解して利用してないよね?(AIも同じことだから信頼性が云々という批判は後々なくなるんじゃない?[3])」だとか、この類の主張に自分は違和感を覚えています。
こういった批判的な文脈で他人の記事や主張をソースごと引用すると、名指しの批判のようで気が引けるのですが、自分がシャドーボクシングをしているわけではないこと、またどこに引っかかったのかという点を述べるために、ひとつの記事を恐縮ながら引用させていただきます。
こちらの主張においてはコンパイラを引き合いに、AIの出力もコンパイラ同様に信頼を得て運用されることを示唆するとともに、「出力が決定論的であるかどうか」を元にAIの信頼性を批判するのは間違っているとしています。
この章冒頭で挙げた技術基盤との比較に基づいた主張に対しても同様ですが、「出力が決定論的であるか」はその信頼性において非常に重要だと思っています。だからこそ、非決定論的な出力をするAIと、それ以外のもの(コンパイラだとか)を同じテーブルに並べて比較すること自体、間違っているんじゃないかと思うのです。
結局AIが学習内容に基づく推論で駆動している以上、どこまで行ってもコンパイラなどのような決定論的な出力をするものに信頼性の面[4]では並ぶことができないのではないか、と思っています。
そしてそうである以上、人間による精査や適切な指示、誘導の必要性は常に付きまとうし、少なくとも労力の観点でトレードオフとして存在し続けると考えています。
前の章でも述べた通り、これは完全な上位互換でもなければ、ましてエンジニアの必要性が揺らぐほどの存在ではなく、あくまで選択肢の一つとして有効になってきただけであり、これをもってAIがエンジニアの仕事の大部分を代替してしまうという主張は乱暴だなという印象を受けてしまいます。
これは自意識過剰で飛躍している思考かもしれないと認めつつ、いちソフトウェアエンジニアである自分の気持ちを述べるなら、この手の主張をみるとエンジニアが軽んじられている、と思えて悲しいし静かな憤りすら感じます。
もちろん、AIをフル活用して開発できるということは素敵だと思う
自分自身はAIを頼ることはあれど手放しで信頼してはいないし、AIにコード書かせてレビューするくらいなら自分がコード書いた方が早いとすら思ってしまっている人間ですが、AIをフル活用する試み自体には否定的ではありません。
AIの活用事例や、プラクティスを紹介する記事もたくさん増えてきて、知見も全体で溜まってきていると思いますし、そうしてできることや可能性が広がっていくことは素敵なことだと思っています。
ただ、あえて誇張している部分もあるのでしょうが、あまりに納得いかない論理で仕事がAIに取って代わられるみたいな主張をされるとどうしてもモヤモヤしちゃうし、今回はそういった気持ちが爆発して記事にしました。
今も、これからも、良き同僚として
AIをあまり信用していないとは言いましたが、これは応答を無批判に受け入れたり、「先生」として頼ったりは決してせず、相手も間違える可能性が高いという観念を常に持って接しているという意味です。
実務ではChatGPTやLLMを搭載したエディタでAIを大いに活用させてもらってます。何でも、何度でも相談できる相手としてAIはとても頼りになりますしね。
あくまで自分の思考整理の過程での壁打ち相手や、コードの調査や評価をしてくれるひとつの参考対象として頼り、常に自分自身の確固たる意見を持った上でAIの応答を評価し受け入れたり却下したり。
実際にコードを本格的に書かせたこともあるのですが、AIからしたら自分の指示が不十分だったのでしょう、かなり微妙なコードがでてきて丸ごと却下してました。
こうして提案されたものを評価する上で、結局自分でも理想の設計やコード像を考える必要があり、そういう意味ではどれだけAIが賢くなっても、あくまで主導権は自分が握り続けることになると思うし、リスペクトも一定持ちながら良き同僚として接し続けるだろうなと思っています。
人の仕事を奪う強大で崇高な存在としてではなく。
Discussion