AIに得意かどうかはユニットテストが書きやすいかどうかで判別できる

AIコーディングエージェントが100倍速くなるエントリに、10000tok/secとTDDとがあればコーディングはガチャになるというブックマークコメントがありました。
AIコーディングエージェントは100倍速くなる - きしだのHatena

LLMはじめとした機械学習は、よりよいランダムを選ぶ仕組みです。当たりのランダムが出る確率が高くなるようにパラメータの調整を行うことを「学習」と呼んでいます。こんな感じで、「学習」が進むとハズレが減っていくわけですね。この確率が安定したところが、学習の終了です。
(ChatGPTにでっちあげてもらったイメージ画像)

答えが定義できれば、その答えが出るランダムを選ぶことで能力向上ができます。ユニットテストを定義して、そのテストが通るコードを無限に生成すれば、そのうち当たりが出てきます。
また、問題とユニットテストの組みを自動生成できるのであれば、多くの問題についての学習ができます。つまり、ユニットテストが書きやすい分野ではLLMの学習がはかどるので、人間よりも得意になっていきます。 逆にいえば、ユニットテストが書きにくければ、LLMの能力向上も難しく、苦手になります。

そしてLLMは、小さな正解を積み上げていけば大きな正解にたどりつくような問題は対処可能です。
一方で、小さな正解を積み上げたとしても必ずしも大きな正解になるわけではないという領域は不得意です。こういった領域では、論理的な思考が必要ですが、LLMでは新しいものを組み立てるような論理思考が苦手です。

ユーザビリティやセキュリティ、メンテナンス性、並列性などは、部分的に正しいものを積みても、全体が正しいとは限りません。 ユーザビリティがわかりやすくて、各コンポーネントがいかに使いやすくても、そのコンポーネントを組み立てたフォームが使いやすいとは限りませんね。セキュリティやメンテナンス性、並列性も同様です。

また、こういった分野は自動テストも難しく、当たりが出るようにランダムを選ぶというアプローチが取れません。 当然、問題を自動生成して多数の問題を解いていくというような強化学習も難しいです。

ということで、AIに得意かどうかは、ユニットテストが書きやすい問題かどうかを判別の基準にすることができます。

ただし、ユーザビリティやセキュリティ、メンテナンス性、並列性などで現実に問題になるようなパターンはある程度かぎられていきます。
そういったヒューリスティックなパターンのロジカルな実装をLLMと組み合わせると、AIシステムとしては対処が可能です。
ただ、そういったシステムはLLM単体で実現することに比べると汎用性が低くなり、対応できる領域とそうではない領域がわかれるはずです。

ということで、ユニットテストが書きにくい領域では、開発努力で対応は可能だけど、不得手な条件は出てくるし開発も難しい、そういう意味でAIにとって苦手ということになります。