《代码整洁之道》作者不读AI生成的代码!审查能力,正在被AI重新定价 — Transcript
Full transcript
- 0:00大家好 我是为什么叫QQ
- 0:02今天先给你出一道题
- 0:032007年 伯克利 一个实验
- 0:05来自Ka-Ping Yee的博士论文
- 0:07研究的是投票机软件的可靠性
- 0:09他和David Wagner往代码里 亲手埋了三个bug
- 0:13难度分三档 easy medium hard
- 0:15然后他们去请审查的人, 来的阵容堪称梦幻
- 0:18分别是Yoshi Kohno,Mark Miller,Dan Sandler,Ian Goldberg。
- 0:234位经验丰富的审查者 都熟悉安全威胁
- 0:26实验方还特别厚道 直接告诉他们
- 0:29bug在这约100行里 你想想这个条件
- 0:32已知有bug 已知位置
- 0:34还都是安全审查这个行当的老手
- 0:36你猜 三个bug能找出几个 先记住你的答案
- 0:39这期看到最后 回来对账 我把过程也给你
- 0:42Sandler最快 约70分钟 找出easy和medium
- 0:45Kohno和Miller花了约4小时 只找到easy
- 0:49Goldberg约2小时 也只找到easy
- 0:51前后砸进去约20个审查人时 那个hard bug
- 0:54没有一个人找到 Lemmer-Webber还回忆过一件事
- 0:57她私下听Mark Miller复盘 缺陷被指出以后
- 1:00大家都觉得 回头看太明显 按理应该找得到
- 1:03要交代一句 这话是她的转述 不在博士论文里
- 1:07但你听听这个味道 连他们都觉得本该找到
- 1:10可事实就是没找到 这个案例没有测出
- 1:13人类审查能力的硬上限
- 1:15它证明的是一件更现实的事 哪怕范围缩到100行
- 1:18哪怕审查者经验丰富 人工阅读依然可能漏掉
- 1:22刻意隐藏的缺陷 AI把代码产量放大以后
- 1:25这个漏检风险 不会自动消失
- 1:27所以真正的问题来了 你每天那点认真审查的带宽
- 1:31在AI时代 到底值多少钱 又该怎么花
- 1:34这个7月整个社区吵翻天的 其实就是这一件事
- 1:37先把时间线拉清楚 4月14日 Uncle Bob先出手
- 1:41《Clean Code》的作者
- 1:43从60年代末写代码 超过55年
- 1:46他说他不再逐行审查agent代码
- 1:48改看覆盖率 依赖结构 圈复杂度
- 1:51Grady Booch当场反对
- 1:53他说这些指标能增加对功能的信心
- 1:55却不能让他确信 代码没有引入漏洞和死代码
- 1:59没有影响性能的结构问题 最后留下一句话
- 2:02信任 但要验证 这两位老前辈 其实在给审查定价
- 2:06一个嫌人审太贵 一个嫌不审更贵
- 2:085月6日 Simon Willison发文 一年多前
- 2:11他还把边界划得很清楚 绝不提交解释不清的代码
- 2:15现在他承认 自己的生产代码也不逐行审了
- 2:18他还借越轨正常化这个词
- 2:20承认自己也有点心里没底
- 2:22连他这样的人 线都在往后挪
- 2:24导火索 烧在北京时间7月3日
- 2:27HashiCorp联合创始人 桥本 在X上只回了一句话
- 2:31I read the code 我读代码
- 2:33截至7月底 约83万次浏览
- 2:35一句工作习惯 被读成了宣战
- 2:387月17日 Lemmer-Webber发长文
- 2:40Spritely联合创始人兼执行总监
- 2:43ActivityPub协议的共同作者
- 2:45她给这场争论送上了理论弹药
- 2:487月23日 Bob回复开发者Ori
- 2:51这位Ori 1983年就开始编程
- 2:53他说让AI直接改文件 心里发毛
- 2:56要负责 就必须理解代码 Bob回他 我比你老得多
- 3:00我现在的策略 一行都不读 这条回复 截至7月底
- 3:04浏览量超过480万 接近桥本那条的六倍
- 3:07两边阵营 彻底成型 这里先抛一个争议观点
- 3:11坚持全读的人 反而更危险
- 3:13同意的反对的 打在公屏上 先看读代码这一侧
- 3:16Cindy Sridharan把底线讲得最狠
- 3:19每次听到有人说 代码全是Claude写的
- 3:21我自己也不懂它怎么工作
- 3:23她就认定 这人调试不了它
- 3:25调试不了 你就不算拥有它
- 3:27她在工作里见多了这种场面
- 3:30遇到bug 把报错扔给Claude
- 3:32修复方案贴回来 跑通就算完 稍微棘手一点的
- 3:35立刻卡在原地撞墙 地基是空的
- 3:38话很重 但你仔细品品 好像真是这个理
- 3:41不过要交代完整 几天后她自己补了一条
- 3:45仍尽量理解每一行
- 3:46但也承认 实践里正长出一套新技能
- 3:48能高效交付 能调试陌生代码
- 3:51连她 也不想被钉死在全读派
- 3:53那很多人会觉得奇怪了 审查这么重要
- 3:56怎么人人都在悄悄放弃它
- 3:58Lemmer-Webber在长文里 还提到一个现象
- 4:01Flask的作者Armin观察到 vibe出来的系统
- 4:04代码一层摞一层 摞到最后 没有任何人
- 4:06能完整看懂整个代码库 但系统还在跑
- 4:10因为LLM能给你解释其中一段
- 4:12大家就靠着这种局部解释 继续往上盖楼
- 4:15楼在长高 地基没人看过 要交代清楚
- 4:18这是观察 不是实证研究
- 4:20他本人也没为这种状态站台
- 4:23Lemmer-Webber的回答 是雪橇
- 4:25她说用LLM写代码 像坐雪橇
- 4:28滑道只有一条 一路向下
- 4:30山顶上你说 只当高级自动补全
- 4:34滑一段 变成agent生成我来审
- 4:36再滑一段 不怎么看输出了 但我信任它
- 4:39到了山脚 你连prompt都不写了
- 4:41每一步 你都以为是自己的选择
- 4:43其实每一步 都是惯性在推你
- 4:45这股惯性 她算了一笔账 算得特别扎心
- 4:49写代码 慢的部分在两头 一头建立理解 一头审查
- 4:53生成 本来就是最快的环节 AI把生成变得飞快
- 4:57你一旦认真审查 速度优势当场作废
- 5:00所以审查 天然第一个被牺牲
- 5:02今天跳过一个小函数
- 5:04明天觉得这个模块差不多就行
- 5:06每一步都很小 都很合理 等你回头 已经在山脚了
- 5:10她还有一个更狠的概念
- 5:11vibe sickness vibe不适症
- 5:14词来自Glyph的PyCon感想
- 5:16说的是slop已经无处不在
- 5:18开源社区正被slop式安全PR压垮
- 5:21客服是机器人 海报是AI味 最难受的是 你躲不开
- 5:25同事扔来一个他自己都不懂的贡献 你去审它
- 5:29你就被迫加入了vibe coding的工作流
- 5:31Glyph的比喻 我给满分 靠拒绝LLM软件来抗议
- 5:36就像靠不呼吸 来抗议汽油加铅
- 5:38她特别强调的地方在于
- 5:40下滑这个过程 往往不是你的选择
- 5:43更像顺着惯性 越滑越快
- 5:45等你反应过来 已经停不下来
- 5:47你以为能控制好这个度
- 5:49只是在不重要的地方偷个懒
- 5:51现实里 很难找到刹车点 她的态度也很明确
- 5:54凡是不用genAI的项目 她都多一分尊重
- 5:58她担心的事情更远 世界正被没人理解的系统
- 6:01一点一点替换掉 这一侧的逻辑链 到这里闭环了
- 6:05人工审查会漏检 自控又靠不住
- 6:08弹幕走一波 你现在站哪边 但先别急着下结论
- 6:11Bob那套做法 值得完整看一遍
- 6:13他不读代码 但他没有躺平
- 6:15他给agent围了一圈关卡
- 6:17单元测试 Gherkin测试 QA流程
- 6:20质量指标 变异测试 测试覆盖率
- 6:23外加一大堆别的机制
- 6:24代码想进主干 先闯完这套关 闯完 他就敢合并
- 6:28他信任的对象换了 从代码本身 换成了关卡
- 6:32代码可以撒谎 关卡不会客气
- 6:34你看 他不是对AI有信心 他是对验证体系有信心
- 6:38马上有人追问第一层 谁来保证 关卡本身可靠
- 6:42万一测试写错了呢 Bob很坦白
- 6:45检查工具 他也让agent写
- 6:47但工具规模很小 规则也是确定的 在固定环境里
- 6:50同一输入能得到可复现的结果
- 6:53他还让Claude用Clojure
- 6:55写过一个变异测试的工具 追问第二层
- 6:58那你审这些工具的代码吗 不审 还是同一套流程
- 7:01工具同样被大量测试包围
- 7:03追问第三层 最尖锐的一层 这不就是无限递归吗
- 7:07AI写代码 AI写测试 AI再写工具检查AI
- 7:11Bob当然想过这一点 他的底牌是变异测试
- 7:14故意往代码里塞错误 看你的测试抓不抓得住
- 7:18agent想靠刷覆盖率蒙混 成本会被明显抬高
- 7:21但要把话说全 变异测试也不是万能的
- 7:24它只检查测试对变化敏不敏感
- 7:27规格对不对 断言错没错 它回答不了
- 7:30而且他不是甩手掌柜 Gherkin验收测试 他亲手审
- 7:34QA流程 他亲手审 还定期做最终的人工测试
- 7:38有人问他 凭什么信agent守规矩
- 7:40他答 它们和人差不多可靠 所以你盯着它们
- 7:44追问第四层 测试能保功能 代码质量呢
- 7:47写得乱但能跑通 行不行 Bob的态度非常明确
- 7:51质量比以前更重要 烂代码 照样拖慢AI
- 7:55他亲眼见过agent被自己的烂结构困住
- 7:57来回折腾 就是解不出来
- 7:59最后他亲自下场 把乱麻理顺
- 8:02所以函数长度 圈复杂度 他设了极严的上限
- 8:05约束agent 是为了让它跑得顺
- 8:07有人嘲讽他 你已经不算工程师了
- 8:10他回 我才是工程师 因为负责的人 是我
- 8:13西班牙工程师Carrión看得最透
- 8:16Bob根本没放弃审查 他把审查 上移了一层
- 8:19眼睛从语法 挪到关卡设计
- 8:21说到这儿 两边的牌都摊开了
- 8:24你注意一个被忽略的事实
- 8:26两个人的前提 一模一样
- 8:27都承认审查带宽是稀缺资源
- 8:30都承认逐行阅读撑不住产量
- 8:32分歧只在怎么应对这个上限
- 8:35Lemmer-Webber的答案是收缩
- 8:37自控靠不住 就别高估自己 能不用的地方 就不用
- 8:40审查预算 留给要命的代码 Bob的答案是改造
- 8:44人审撑不住 就把信任搬家 搬进验证体系里
- 8:47人只守最高杠杆的几个点 再抛一个争议观点
- 8:51我觉得Lemmer-Webber会赢道理 但Bob会赢历史
- 8:54你押哪边 打在公屏上 那落到你身上 该怎么办
- 8:58我给你一个能直接用的框架
- 9:00别再问 这段代码我要不要读 这个问题太粗了
- 9:03它默认所有代码一视同仁
- 9:05也默认你只有读和不读两个选项
- 9:07两个默认 都该扔了 换成三个问题 像走决策树
- 9:11第一问 它出错的时候 谁会第一个发现
- 9:14如果是测试当场报警 审查压力就小一档
- 9:17如果要等到用户投诉 压力直接拉满
- 9:20第二问 从出错到发现 要隔多久
- 9:23十分钟能定位的问题 和三个月后爆雷的问题
- 9:26完全是两种生物 第三问 发现之后 代价有多大
- 9:30改一行就修好的 和数据污染 资损 合规事故
- 9:33也完全是两种生物 三问走完 答案自己分层
- 9:36发现快 代价小的代码 交给测试体系去守
- 9:40发现慢 代价大的代码 你的逐行审查 就砸在这里
- 9:44这就是审查预算的分配逻辑
- 9:46三个问题的本质 是定价 给发现速度估价
- 9:49给事故代价估价
- 9:51综合起来 定出这段代码的审查等级
- 9:54你的认真阅读 是有限资源
- 9:56花在检测慢 代价大的地方
- 9:58剩下的地方 用关卡围起来
- 10:00举个具体的例子走一遍 你写了一个临时脚本
- 10:04每周跑一次 整理报表 第一问 出错谁发现
- 10:07第二天看报表就知道 第二问 隔多久 一天
- 10:10第三问 代价多大 重跑一次 三问走完 这种代码
- 10:14扫一眼都嫌多 再看另一个极端
- 10:17支付回调的验签逻辑 出错谁发现 可能没人发现
- 10:20隔多久 可能几个月 代价多大 资损加合规
- 10:24这种代码 逐行读 反复读 再找两个人交叉读
- 10:27还是这位Carrión 他在Mercadona Tech遇到过
- 10:30一个更能说明问题的案例 四个AI辅助完成的PR
- 10:34功能正确 测试全绿
- 10:36却把同一条商品家族业务规则 复制了四遍
- 10:39测试没有报警 是人工阅读发现了结构性重复
- 10:42这个案例值得停下来想一秒 测试能验证当前行为
- 10:46但一条业务规则该存在几份 测试替你拿不了主意
- 10:50这种结构性判断 恰恰是人审最该花钱的地方
- 10:54落地动作 说四个 第一 盘点你的项目
- 10:57拿刚才那三个问题 把核心模块过一遍
- 11:00你很可能会发现 审查时间一直花错了地方
- 11:03第二 跑一次变异测试 先挑一个核心模块
- 11:06让变异测试工具自动生成变异
- 11:08看关键变异能不能被测试杀死
- 11:11如果大量关键变异存活 说明测试还需要补强
- 11:14第三 把约束写进CI 别写进prompt里
- 11:17prompt是口头约定 agent转头就忘
- 11:20再把检查设成合并必过项 不过关 就不允许合入
- 11:24函数长度 圈复杂度 覆盖率阈值
- 11:27全部做成自动关卡 第四 记住Moura那条规则
- 11:31不读的权利 要逐类赢得 同一类变更
- 11:34连续30个干净的PR 这一类才能进免读车道
- 11:37翻一次车 重新计数 想抄作业的 有现成轮子
- 11:41GitHub上有个old-coder开源Skill
- 11:43理念直接取自Bob Claude Code Codex CLI都能用
- 11:47最后泼一盆冷水 我认为 Bob那套能转
- 11:50离不开超过55年的底子
- 11:52他设计得出关卡 也看得出洞
- 11:54新手直接抄不读两个字 大概率是灾难
- 11:58先赢资格 再谈放手 回到开头那道题
- 12:01几位熟悉安全威胁的资深审查者
- 12:03100行已知有bug的代码 找不全 不丢人
- 12:06丢人的是假装自己找得到 这场7月的大争论
- 12:10表面在吵读不读 但真正值得带走的
- 12:13是两边各自的盲区 先看Lemmer-Webber这一侧
- 12:16她诊断出了病 没开出药 收缩 管住的是自己
- 12:20管不住同事甩来的PR 管不住整个行业的惯性
- 12:23她自己都承认 你躲不开
- 12:25那躲不开的人 明天上班怎么办 她没有回答
- 12:28再看Bob这一侧 关卡也有关卡的天花板
- 12:32测试能暴露缺陷 不能证明缺陷不存在
- 12:35模糊测试和属性测试 能扩大搜索范围
- 12:39规格之外的盲区 依然存在
- 12:41那个hard bug漏过了人眼
- 12:43也可能漏过一套想当然的测试
- 12:45他的关卡能拦住不少代码层面的错误
- 12:48却防不住规格本身就想错了 递归追问问到头
- 12:52真正兜底的 很可能还是他55年的判断力
- 12:55这套药 药引子是他自己 流程别人抄得走
- 12:58药引子抄不走 你看 两个人的终点
- 13:00指向同一个缺口 生成能力涨得再快
- 13:03理解能力的增长 远远落在后面 过去的软件工程
- 13:07建立在一个默认假设上 写的人懂 审的人懂
- 13:10责任 跟着理解走 现在理解跟不上产量了
- 13:14这个假设 开始松动
- 13:15真正值得每个程序员想的问题是
- 13:17责任 还要不要跟着理解走 如果还要
- 13:20那你点击合并的那一刻
- 13:22你懂的到底是代码 还是流程 如果不要
- 13:25出事故那天 锅又该跟着什么走
- 13:28跟着签字 跟着流程 还是跟着那个写代码的AI
- 13:32责任到底该跟着理解走 还是跟着流程走?
- 13:34行业还没有形成共识
- 13:36但它迟早会摆到每个团队面前
- 13:38可能是下一次线上事故 也可能是下一份责任协议
- 13:42在那一天到来之前 你至少能做一件事
- 13:45看好自己那点审查预算 花在真会出事的地方
- 13:48我自己其实挺矛盾 承认惯性是真的
- 13:51也见过关卡拦住蠢代码 拦住那一刻 是真香
- 13:54评论区留两道题 第一道小的
- 13:56每天只有一小时认真审查 你花在哪个文件上
- 14:00第二道大的 责任该跟着理解走 还是跟着流程走
- 14:03敢不敢说出你的真实想法 觉得有收获 一键三连
- 14:07点个关注 我是为什么叫QQ 我们下期接着聊
About this transcript
This page contains the full transcript of 《代码整洁之道》作者不读AI生成的代码!审查能力,正在被AI重新定价 by 为什么叫QQ, generated from the public captions YouTube serves with the video. The transcript has 671 words across 295 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.
What you can do with it
Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to translate the transcript into 100+ languages.
Free YouTube transcript tool
YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, translation to 100+ languages, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.