一个水管工上门修漏水,1小时搞定收费150美元。客户抱怨太贵,水管工递过账单:拧螺丝1美元,知道拧哪颗149美元。
这个老梗被程序员群体转发了二十年。但最近一位叫 Dan Moore 的开发者真的观察了水管工工作全程,回来写了一篇长文:我们 debug 的方式,全是错的。
水管工的工具箱里没有"猜测"
Moore 观察到的第一个细节:水管工从不先动手拆管道。
客户描述"厨房水槽下面在滴水",水管工的第一反应是打开橱柜门,用手电筒照了90秒。然后他问了三句话:滴水是持续的还是间歇的?最近有没有用过洗碗机?楼下天花板有没有水渍?
这三句话排除了70%的可能性。持续滴水指向供水管,间歇滴水可能是排水管;洗碗机共用排水管,能缩小范围;楼下天花板的水渍位置,直接框定了漏水点的垂直坐标。
Moore 对比自己的 debug 习惯:报错信息弹出来,先改几个参数试试,不行就加日志,再不行就重启服务。三小时过去,修改了47处代码,问题还在。
水管工的工具箱里有一套系统化的诊断流程。压力测试确定哪段管道失压,热成像仪找温度异常点,内窥镜看管道内部腐蚀情况。每个工具对应一个明确的决策分支,没有"试试看"的灰色地带。
程序员在"拧螺丝"上浪费了90%的时间
Moore 统计了自己团队过去20个 bug 的修复记录。平均每个 bug 被"尝试修复"4.7次,实际有效修改只有1.2处。换句话说,78%的代码改动是徒劳的。
水管行业的数据是:诊断时间占工单总时长的60%以上。好的水管工可以在不拆墙的情况下,把漏水点定位到10厘米范围内。
这个差距的根源在于反馈循环的长度。拧开一颗螺丝,水管工立刻知道这步对不对——有水喷出来,或者没有。程序员的反馈循环被编译、部署、测试环境、数据准备层层拉长,一次"尝试"的成本高到让人倾向于同时改多处, hoping 其中一个能蒙对。
Moore 称之为"霰弹枪式 debug"。不是瞄准了打,是打中了再画靶心。
更隐蔽的成本是认知负荷。同时跟踪7个未验证的假设,工作记忆很快溢出,最后连最初观察到的现象都模糊了。
水管工教的三条 debug 法则
Moore 从观察中提炼了三条可直接落地的规则。
第一条:现象描述必须可验证。客户说"水压小",水管工会问"浴缸放满水需要几分钟"。数字消除了主观偏差。程序员接到的 bug 报告经常是"页面有点卡",应该追问成"加载时间超过3秒的频率是多少"。
第二条:每次只改一个变量。水管工不会同时更换垫片和拧紧接口,因为无法判断哪个动作解决了问题。Moore 要求团队严格执行"单变量原则",即使这意味着更慢的初期进度。
第三条:建立"排除清单"。每完成一个诊断步骤,明确记录排除了哪些可能性。水管工会在工单上写"供水管压力正常,排除主管道破裂"。程序员的习惯是记住"试了哪些",但人类记忆在压力下极不可靠。
实施这三条三个月后,Moore 团队的平均 debug 时间从6.4小时降到2.1小时。最意外的副作用: junior 开发者的独立解决率提升了,因为流程替代了依赖直觉的经验门槛。
为什么好程序员反而更难改变
Moore 发现了一个反直觉的现象:debug 能力最强的 senior 开发者,对系统化流程的抵触也最强。
他们的反对理由很一致:"这样太慢了"。确实,对于熟悉代码库的资深工程师,直觉跳步的效率在简单问题上更高。但 Moore 追踪了20个"快速解决"的案例,其中3个在两周内复发——最初的修复掩盖了更深层的病因。
水管工行业也有类似的分层。学徒严格按手册操作,师傅可以凭声音判断管道材质。但区别在于,师傅的直觉来自数千次标准化诊断积累的模式识别,而非跳过步骤的侥幸。
Moore 的折中方案:保留 senior 开发者的自由裁量权,但要求他们在"快速修复"后补一份回溯文档。如果24小时内复发,下次同类问题强制走完整流程。
这个设计承认了经验的权重,同时用机制防止直觉的滥用。
工具层面的最后一块拼图
水管工的诊断效率离不开专用工具。程序员缺的往往不是方法论,而是让方法论可行的基础设施。
Moore 团队自建了一套"debug 沙盒",核心功能是把生产环境的异常流量实时镜像到隔离容器。反馈循环从"改代码→等部署→造数据→观察"压缩成"改配置→秒级观察"。单变量原则从纪律要求变成了技术约束——系统只允许同时修改一个参数。
这套工具的开发成本是3人月,但按 debug 时间折算,两个月就收回了投资。
Moore 在文章结尾写了一个细节:观察结束后,他问水管工有没有遇到过"怎么都查不出来"的漏水。水管工说有过一次,最后发现是楼上邻居的空调冷凝管接错了排水口。
"那种情况,"他说,"你按流程做,至少能快速排除自己的责任范围。最怕的是没章法地乱拆,最后墙也砸了,发现根本不是自己家的问题。"
你的团队上次完整复盘一个 bug 的 debug 过程,是什么时候?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.