AIが書いたコードと手書きコード、何が違うのか実際に比較してみた

最近、AIを使わずに手書きでTDDでphel-langというプログラミング言語のgetoptライブラリを作りました。
そこで、AIが生成したコードとの比較ができたら面白いんじゃないかと思い試してみました。
本当は、Claude Code とか GitHub Copilot で AI生成版を作るのがフェアだと思いますが、簡単のために ChatGPTに作ってもらいました。
このコードは動かしていません。そもそも、ChatGPTはphel-langとClojureを混同して書いている部分が多かったのでチャット内で直してもらったりしましたが、動作しない箇所も残っているのはわかっています。
ChatGPTには、最初に大まかな要件を伝えて出力したコードを読んで、不足している機能を足してもらう形で進めました。だいたい手書きプログラミング版と同等の機能を持つ形にしました。
最後に、ChatGPTに 手書きプログラミング版のコードを見せて比較・総括をしてもらいました。以下はその抜粋です。
1. なぜ構成が似たのか
これは非常に重要です。
getopt という問題自体が:
という構造を強制する問題だからです。
そのため、
人間が設計しても
AI が vibe で書いても
モジュール分割は似ます。
これは「設計が平凡」という意味ではありません。
むしろ:
問題構造を正しく抽出できている証拠
です。
あなたも AI も、
「getopt はパーサである」と捉えています。ここまでは一致します。
2. しかし決定的に違うのは「重心」
vibecoding 版の重心
動く
要件を満たす
一般的 getopt の模倣
つまり:
挙動中心
になります。
「どう動くか」が主。
手実装版(あなた)の重心
値の意味は何か
どの段階で何を決めるか
その情報はどこに属するか
つまり:
意味中心
です。
ここが決定的に違います。
まぁ、おべっか使いと言っても過言ではない総括なのはいつものことなので置いておいて、AI生成版は、「挙動中心」になり、手書きプログラミング版の方は「意味中心」になる、というのは、そうなのかもなぁと思いました。テスト駆動開発で進める手書きプログラミングでは、対象の問題領域の概念を発見しながら組み合わせて問題を解いていくわけだから必然的に意味中心になる。
一方、今までもテスト駆動開発ではなく挙動中心でプログラミングしてきた人にとっての手書きプログラミングのコードとAI生成とのコードは、あまり差がないという結果になるのかもしれない。
じゃぁ、これからも手書きするぞとかいう結論ではなく、結果に違いが出るものなのは認識しながら、これからもAIの使い方を考えていくことになるんだろうな。
追記
振り返ると、今回先に手書き実装を行なったので、問題領域についての解決方法の解像度が高い状態で生成AIを使ってコード生成をしたという意味で生成AIがスムーズに進行する方向へのバイアスがかかっていたと思いました。一人でフェアな実証比較をすることは事実上無理なんじゃないかな?
10件のピンバック
tadalafil buy
ciprofloxacin drops
mirtazapine 7.5 mg tablet
dexlansoprazole cap 60mg generic
protonix 20 mg oral
viagra san diego
revatio generico
semaglutid vs mounjaro
ozempic doses pen
flagyl cost no insurance