职场之锤
程序员互撕现场解救指南:让 Code Review 回归技术共建本质
本文另有英文译文 · 阅读英文版 →
那次我刚提了一个PR,就被一个注释打败了。
评论人写:“这个变量名太抽象了,建议改成更有业务语义一点的。”
我看着那行代码愣了三秒:这变量是他一个月前写的,命名风格我照着来的,怎么现在说抽象?更讽刺的是,我改了变量名之后,他又回了一条:“不太清楚为什么要这么命名。”
评论区像是开了个无声的审判会。技术细节说着说着,就变成了含沙射影的“你是不是不懂业务”“你是不是代码习惯差”。
那天我合完PR,心里特别憋屈,只想关掉 IDE 去跑步。
这不是一次意外的踩雷,而是我们做 Code Review 时常见的一个场景: 从技术共建滑向互相挑刺,从反馈讨论演变成防御姿态。
但如果把 Code Review 仅仅当作找问题的环节,那我们很容易忽略一个事实:Code Review 的真正价值,不是指出多少个问题,而是让团队一起变得更好。
而要做到这一点,除了技术,我们更需要结构化流程设计,和心理安全的建设力。
一、为什么 Code Review 会变成互撕现场?
我后来反思,我们团队那次 PR 评论的火药味,其实并不来自技术分歧,而是一个共性的问题:
大家带着防御性心态写代码,也带着纠错视角做 Review。
1.1 防御性心态:写得像在打官司
有同事说过一句特别真实的话:“我写代码的目标不是写好,而是不被 challenge。”
这听起来像个笑话,但在 Review 压力大的团队里,常常变成真实写照。PR 写得极度详细,像律师陈词;把每一步拆得特别碎,为了“可解释性”;出现逻辑重复或架构混乱,也不敢改动已有代码,怕被质疑动太多。
但结果却适得其反。越是自我防御式的写法,越容易引起 Review 的不信任与误读。
1.2 纠错视角:评审成了找茬比拼
同样地,在 Reviewer这边,也容易陷入另一种误区:我不是在帮助对方改进,而是在证明“我比你想得周全”。
你一定见过这种风格的评语:
“不太明白这样做的意义?”
“有没有更好的写法?”
“感觉这样会有风险。”
这些评论听起来有逻辑,实则缺乏具体建议和共建意图。久而久之,Code Review 就变成了一场互不信任的博弈:谁先提建议,谁就是主导;谁先被 challenge,谁就要辩解到底。
而一旦技术讨论变成了谁对谁错,我们就很难在其中找到成长空间。
二、先有心理安全,才有技术共建
你有没有发现,那些做 Review 氛围特别好的团队,成员之间的交流常常有一种“轻盈感”:可以指出问题,但不会让人难堪;可以表达不同意见,但不会被贴标签;可以承认“我不确定”,而不是被视为不专业。
这背后,其实靠的不是大家性格好,而是他们在无形中建立起了心理安全的文化共识。
2.1 用“共建语气”代替“挑战语气”
同样是指出变量名问题,语气不同,效果天差地别:
挑战语气:“这个变量名太抽象了,建议改成 xxx。”
共建语气:“我在想这个变量是不是可以更贴合业务一点,比如 xxx,方便别人理解?”
前者让人下意识防御,后者则打开了讨论的大门。
不是要对同事客气,而是要对共识的建立更有耐心。Code Review 的目的不是找出谁错了,而是一起把代码写得更让人理解。
2.2 质疑的时候加上动机假设
在我带初级同事做 Review 的时候,有一个很实用的小技巧:如果你不明白对方为什么这么写,先补上你的假设,再提问。
比如:“我猜你可能是考虑了 A 场景,所以加了这段处理逻辑?但我在想,如果是 B 情况,可能会出问题,你怎么看?”
或者“是不是出于性能考虑用了这个缓存策略?我有点担心一致性这块。”
这样做对方不容易陷入“你在否定我”的情绪里,自己也能更清楚这段代码背后的设计动机。
换句话说,先尝试理解,再提出改进,才是真正成熟的技术协作。
三、结构化 Code Review:让技术反馈有章可循
除了心态上的共建意识,流程上的结构化也非常重要。
很多团队 Review 做得低效,就是因为大家没有统一的流程感,PR 写得像流水账,Reviewer 只能凭经验东一枪西一炮。
下面是我试过的一种改法,简单但非常有用:
3.1 写 PR 描述时,用几句话拆解结构
① 本次修改的目的是什么?
② 为什么要这么做(与其他方式比)?
③ 有哪些潜在影响点或需要关注的部分?
④ 怎样测试改动(测试的截图也可以放上去)
这几句话看起来普通,但能大大降低沟通成本,也能帮助 Reviewer 准确聚焦到关键点,而不是每行代码都像地毯式搜索。
3.2 做 Reviewer 时,有章法地提出建议
我一般会用这样一个顺序来组织反馈:
- 优先级高的问题先说(比如 bug、错误逻辑), 不留你觉得呢这种模糊句式;
- 建议类的内容后(比如说命名、拆分方式);
- 全局性的建议提一次就好,不要逐行重复
- 无伤大雅的可以加一个“nit:” 表示不改也没问题
这个方式可以帮你控制评论数量与语气强度的平衡,也能逐渐建立起一个我不是在挑你毛病,而是在一起打造更好的代码的共识文化。
写在最后:CR是最被低估的团队信任练习场
我觉得那些团队成长得快、技术共识又稳的团队,有一个共同特点:
他们不是因为技术强才做出好 Review,
而是因为 Review 做得好,才逐渐形成了强的技术文化。
Code Review 从来不只是找问题,而是一个技术人彼此协作、互相认同的过程。
你从一条评语里感受到对方的理解,也在一次次解释中重新打磨自己的设计表达。
技术共建从 Review 开始,信任也在每一次“写”和“看”的过程中慢慢生成。
也许我们都曾在 PR 评论区里焦虑过、争执过、沉默过,
但如果你愿意换个方式说、换个角度听,那Code Review,就不只是代码的事了。它也是团队真正开始合作的那一刻。