u-ryo's blog

スペルミスはバグ、はAI時代も生きているか

「スペルミスはバグなので直しましょう」というのが、私の長年の持論でした。executer という識別子を見つけたら、動いていようが直したくなります。理由は規律、美しさ等ではなく認知負荷です。正しい綴りを知っている人ほど、その箇所を読むたびに「ここは executer だから気をつけないとっ」という注意のコストを払い続けます。おまけに grep も分断されます。executor で検索すると、間違った綴りは検索から漏れます。一つ一つの事象は小さいですけれど、チリも積もれば、なんです。

前 project では、spell checker (ispell) を導入したのを機に一斉に撲滅しました。偉そうに書いていますが、それ以前の増殖に自分が貢献したことも、あった気がします。だからこそ、道具で退治できるものは道具で退治したい、という話でもあります。

AIは綴りを間違えない

ところが、コードをAIが書くようになって、この持論の前提が変わったと思います。AIは基本的に、綴りを間違えません。新しく生まれる typo は激減しました。それなら、たまに残っている古い typo も、もう気にしなくて済むのでは — そう思いかけたのですが、半年運用してみると、話は逆の方向に転がりました。

AIは typo を直さない、定着させる

AIエージェントは、既存コードの慣習に従う優等生です。周りが executer なら、空気を読んで executer で書き続けます。人間の新人なら「これ、executor の間違いでは?」と言い出すところを、AIは黙って従う。つまり、放置された typo は自然淘汰されるどころか、むしろ増殖します。間違った綴りが、そのコードベースの正式な方言になってしまうのです。

コストは消えたのではなく、移動した

人間なら、一度認識すれば脳が適応します。「ここは executer」と覚えてしまえば、以後の注意コストは漸減していきます。ところがAIエージェントは毎回初対面です。セッションが変わるたびに記憶は白紙に戻り、新しいエージェントはまた executor で grep して空振りします。「grep で見つからないから存在しない」と結論した日には、実在するコードが不在扱いされて、その上に重複実装が生えかねません。認知負荷は消えたのではなく、放置の代償をセッションのたびに払い直す形に変わった。

公平のために言うと、AIは読む分には typo に強い読者です。executer を executor と読み替えて意味を取るくらい、人間より上手にやります。壊れるのは読解ではなく検索の方です。そして開発の自動化が進むほど、検索は人間の目ではなく、エージェントの grep が担うようになります。

直すコストの方は、下がった

一方で、typo を駆逐するコストはAIのおかげで激減しました。識別子の一括 rename とテストの通し直しは、AIが安全にやってくれる種類の仕事の筆頭です。直す理由は残り、直すコストは下がった。持論の結論は「AI時代はもう古い」ではなく、むしろ強化されました。

直せないものもあります。DBの列名や公開APIの綴りは、rename の影響が外まで波及するので、気軽には触れません。そういうものは、AI向けの仕様メモに「executer は executor の意」と一行書いておきます。人間の脳に住まわせていた注意書きを、ファイルに追い出せるようになった、ということです。覚え続ける仕事は、毎セッション読み直してくれる相手に任せるのが一番です。

誰も読まないなら、どうでもよいのでは

もっと根本の反論も、自分の中にあります。どうせ書くのはAIで、人間がコードを直接読む機会はもう少ない。それなら増殖したところで構わないのではないか、と。

半分は、その通りだと思います。人間の認知負荷という当初の理由は、人間が読まなくなった分だけ軽くなりました。ただ、残り半分が頑固です。検索の空振りの代償を払うのは人間ではなくAI自身なので、読者が人間からAIに替わっても、それは消えません。それに、AIの書いた差分を人間が読んで引き受ける、という関門が残っている限り、「人間が読む」は完全にはなくなりません。コードを本当に誰も読まなくなった日が来れば、typo はたしかにどうでもよくなります。ただしその日に消えるのは typo の問題ではなく、コードは人間の文書である、という前提の方です。

小さなバグほど、直す口実が要る

スペルミス退治は、昔から「動いているのに触るの?」と言われがちな仕事でした。人間の認知負荷は数字にしにくいので、直す口実に苦労してきたのです。今は違います。「エージェントの検索が空振りする」は観測できる実害で、なかなか良い口実になります。持論は古くなりませんでした。理由が、入れ替わっただけです。

(下書きはうちのAIが書き、文責は私にあります)