看到这个帖子我突然想起一件事。上个月我在读一本90年代的推理小说,里面有个情节——主角根据线索推导出凶手,逻辑链条看起来完美,但翻到结尾才发现作者故意埋了个叙述性诡计,整个推理完全建立在错误的前提上。
Copilot生成的代码就是这种“叙述性诡计”。
其实其实
它给出的代码逻辑自洽、语法正确、跑起来没报错,但前提假设可能完全不对。边界条件没处理不是bug,是feature——AI模型的训练目标就是生成“看起来对”的代码,而不是“实际上对”的。这和推理小说里的红鲱鱼一个性质:作者故意给你一个看似合理的解释,但你得自己识破它。
不过我想聊的不是AI的问题,而是“理解”这件事本身。简单说
你提到“逐行过一遍”来测试自己的理解,这其实触及了一个更深的东西——代码审查的本质不是找bug,是建立心智模型。当你review AI生成的代码时,你在做的不是检查语法或逻辑,而是在大脑里重建这段代码的运行时状态。这个过程有点像推理小说里的“解构诡计”:你得先假设作者(AI)在某个地方骗了你,然后反向推导出真实意图。
我最近在重读《占星术杀人魔法》,岛田庄司在那个年代设计的分尸诡计,本质上就是在挑战读者的“心智模型”——你以为你理解了空间关系,其实完全理解错了。
AI生成的代码就是这种诡计的低配版。它不会主动骗你,但它也不会主动告诉你“这里有个假设不成立”。开源社区的review文化恰好能暴露这一点,因为reviewer没有AI生成的上下文,他们会用最笨的方式理解你的代码:逐行读,逐行质疑。
另外说个细节。你提到的“why this approach”这个问题,我觉得比code review本身更重要。在推理小说创作里有个原则:每个线索的存在都必须有理由。如果现场出现一把刀,作者必须解释为什么是刀而不是枪。代码也一样——AI能告诉你“怎么做”,但“为什么这么做”才是防止脑腐的关键。
简单说
DuckDB社区那种较真劲儿确实健康。不过我倒觉得这不仅仅是开源社区的特质,而是所有需要“解释为什么”的领域都这样。学术界的peer review、法庭上的交叉质询、甚至好的推理小说读者群,都在做同一件事:强迫你为自己的选择辩护。
这让我想起横沟正史的金田一耕助系列,几乎每本结尾都有大段推理独白,把所有线索重新串联一遍。那种“既然你这么说,那就证明给我看”的压力,才是防止思维腐烂的防腐剂。
btw,你那个DuckDB数据栈的PR还在吗?想看看社区是怎么揪AI代码的。简单说我最近也在折腾本地数据分析的东西,感觉这玩意儿比Copilot那些花活实用多了。
rust_ful你这个类比太妙了,literally让我想到一个事
你们知道吗,我前公司在非洲做项目的时候,有个南非来的tech lead跟我讲过一件事——他们那边有个startup专门做代码审查工具,最早是用规则引擎扫常见bug,后来上了ML模型,结果你猜怎么着?准确率上去了,但开发团队反而更不信任它了
服了原因跟你说的“叙述性诡计”一模一样。那个模型特别擅长生成“看起来合理的错误”——比如它会把一个SQL注入漏洞标记为低风险,因位训练数据里类似的pattern大部分都是安全的。但问题在于,那个特定的context下,user input完全没有sanitize,literally就是裸着拼进查询里的
我当时听完就觉得,这跟推理小说的红鲱鱼真的是同一个心理机制。读者(开发者)看到的是连贯的叙事(语法正确的代码),大脑自动补全了缺失的上下文,然后你就被带偏了
不过我想补充一个角度——你说的“心智模型”这个概念,其实在象棋里也有
突然想到
我下棋的时候有个习惯,复盘时会刻意用引擎分析一遍,然后关掉引擎,凭记忆重新摆一遍关键局面。哈哈哈这个过程跟review AI代码特别像:你必须在脑子里重新跑一遍“如果我当时不知道引擎的建议,我会怎么想”。有意思的是,很多时候你会发现引擎的推荐着法在战术上完美,但在战略上完全违背了你原本的布局意图
这跟Copilot生成的那段边界条件缺失的代码有什么共同点?它们都缺少“意图”。AI不知道你写这个函数的目的是什么,不知道你的用户会在什么场景下调用它,不知道你的team对error handling有什么约定。它只是在统计意义上给你一个“最可能正确”的答案
所以你说的开源社区review文化,我觉得本质上不是找bug,是建立“共享的意图”。当reviewer问你“这里为什么用mutex而不是channel”,他不是在质疑语法,是在问“你的心智模型里,这段代码在运行时世界里的行为是什么”
btw 你提到《占星术杀人魔法》,那个分尸诡计我印象太深了。岛田庄司设计的那个空间诡计,本质上就是利用读者的“默认假设”——你以为尸体被移动到不同位置,其实从始至终都在同一个地方。Copilot生成的代码就是这种“默认假设”的集合体,只不过它不会告诉你“这里有个假设”
话说回来,你最近在读什么推理小说?我最近在翻横沟正史的金田一系列,感觉那个年代的作者对“误导读者”这件事的理解,比现在的AI模型深刻多了(笑)