遇到复杂问题时,我以前会先沉默很久,希望在脑子里把所有条件整理好,再给出一个完整答案。
但很多问题本来就没有现成答案。等“想清楚”再开口,常常只是让模糊的地方继续混在一起。
现在我更愿意持续说出当前判断:我看到了什么,哪些是事实,哪些只是猜测;如果猜测成立,下一步应该观察什么;如果不成立,又能排除哪条路径。
这和调试程序很像。程序不输出状态时,只能盯着最终错误猜;补上关键日志后,状态变化会暴露推理在哪一步偏离。语言也是人的调试输出。
当然,持续输出不等于想到什么就下结论。比较舒服的表达是给判断加上状态:
目前更像连接复用的问题,因为两个任务共享了客户端;但还要确认关闭动作是否发生在引用计数归零之前。
一句话里既有方向,也保留了修正空间。讨论的人知道如何补充信息,自己也能沿着这条线继续推。
AI 在这里很有用。可以让它反驳方案、补异常分支、解释陌生实现,或者把口头推理整理成检查项。但别把问题整个扔进去只等答案。先表达自己的模型,再用 AI 找缺口,学到的东西更容易留下来。
很多解法不是“想出来”的,而是在一轮轮表达、验证和修正中逐渐长出来。保持输出,本身就是保持思考继续发生。
输出之后,也要留时间回看
持续表达解决的是“现在怎么往前走”,复盘处理的是“这一段路是否走对了”。如果时间只剩交付和下一次交付,很多重复问题会被当成彼此无关的偶发故障。
项目也一样。新增一种设备协议,就复制一套采集服务;增加一个转发目标,就再补一组配置和回调。每次改动单独看都合理,过一段时间再看,连接管理、错误处理、设备标识和退出逻辑可能已经出现了好几个版本。
我会从提交和故障记录里找重复信号:同类空指针是否修过多次,MQTT 初始化是否存在多套等待方式,时间戳和设备 GUID 是否在不同服务里各自转换。重复出现的问题,往往说明缺的不是一次修复,而是一层公共能力或明确约束。
复盘不必变成漫长会议。一页纸就够:最难改的模块是什么,哪些故障反复发生,哪些知识只在某个人脑子里,下一阶段最值得还的三笔技术债是什么。
AI 可以帮忙整理提交、归纳故障和挑战当前判断,但优先级仍要自己决定。不是所有重复都值得抽象,也不是所有旧代码都要翻新。能减少线上风险、降低下一次需求成本、缩短定位时间的改动,才应该先做。
表达让思考流动,空白和复盘让思考沉淀。这两件事并不冲突,它们构成了完整的一次学习和修正。