一次糟糕的Code Review让我升职了

  • 约1888字
  • 技术
  • 2026年3月22日

去年四月,我因为一次Code Review跟同事吵到差点辞职。当时我觉得自己代码写得没问题,是对方在挑刺。半年后我升职为技术组长,负责整个前端团队的代码质量把控。回头看那次冲突,反而成了我职业生涯最重要的转折点。

那场灾难性的Review

事情是这样的。

我负责重构公司商城的购物车模块,花了一周时间把原来800行的类拆成了20个小的函数。代码自我感觉良好,提交PR后很快就收到了review评论。

同事老张的评论我至今记得:

“为什么要改这么多?之前的代码能跑不就行了?” “这个函数命名不够清晰。” “这个拆分好像过度了吧?”

我当时的反应可能跟你想的一样:你在教我做事?

我回复了一条长长的消息,逐条"反驳"他的评论。核心意思是:这是我负责的模块,我有自己的代码风格,不需要别人指手画脚。

这场面熟悉吗?

后来的结果是他直接拒绝合并,我找leader评理,leader各打五十大板。那一周我们团队的开发进度几乎停摆。

后来我是怎么想通的

真正让我想通的,是一个月后的另外一件事。

我接手了另一个同事的代码,一个看起来很简单的列表页接口。接手后发现满屏的魔法数字、嵌套五层的if-else、还有根本不敢动的历史遗留bug。我花了三天才敢改其中一行代码。

那一刻我突然理解了老张的视角:代码不只是写给自己看的,更是写给下一个维护它的人看的。

他不是在否定我的能力,而是在保护未来那个需要维护这段代码的人——可能是我,可能是他,也可能是刚入职的新人。

从那以后,我对Code Review的态度完全变了。

3个让Review变得有价值的关键

这两年我做了近百次review,也帮助团队建立了系统的review流程。总结下来,有3个关键点:

1. 区分"代码风格"和"代码质量"

这是最常见争论的根源。

代码风格是个人偏好:缩进用空格还是Tab、变量名用驼峰还是下划线。这些问题不值得争论,用团队统一的linter工具解决就好。

代码质量是原则问题:安全性、可维护性、性能、边界处理。这些才是review的重点。

我现在要求团队:风格问题全部自动化检测,review只聊质量。

2. 给反馈时带上上下文

“这段代码有问题"是无效反馈。

好的反馈应该包含:

  • 问题是什么:安全漏洞?性能瓶颈?可读性差?
  • 为什么有问题:可能导致什么后果
  • 建议怎么改:给出具体的优化方向或替代方案

举两个例子对比:

❌ “这个变量名不好。” ✅ “用userList代替arr更清晰,后续维护者一眼就知道这是用户列表,不需要追踪变量定义。”

❌ “这里可以优化。” ✅ “这段查询没有加索引,在数据量超过10万时会变慢。建议在userId上加索引,或考虑分页。”

好的review不是挑刺,而是帮助对方成长。

3. 被review时先听再辩

这是我踩过的最大的坑。

当别人指出问题时,第一反应往往是防御。但如果你想成长,最好的策略是"先认同,再追问”:

  • “你说的这个问题确实存在,能具体说说为什么是个问题吗?”
  • “如果这样改的话,你觉得会有什么风险?”
  • “有没有更好的方案?”

很多时候,对方的建议确实有你没有考虑到的盲点。即使最后证明你是对的,这个讨论过程也会让你对问题的理解更深刻。

我们的团队实践

现在我们团队是这样做review的:

提交者

  • PR描述要写清楚改了什么、为什么改、测试结果
  • 400行以内的改动我会自己review,超过400行我会主动拆

Reviewer

  • 24小时内必须给出反馈
  • 只提"必须改"的问题,“建议改"的用optional标记
  • 拒绝"LGTM(看起来不错)“式敷衍,必须说明看了什么

冲突解决

  • 如果双方意见不一致,提交者有最终决定权
  • 但如果涉及安全/架构问题,leader有一票否决权

这套流程跑下来,我们团队这两个月的代码缺陷率下降了40%,review时间反而减少了——因为前期沟通变少了。

写在最后

Code Review不是负担,它是团队最好的知识共享方式。

好的review能让你学到别人十年的经验,好的review也能让你的代码在十年后仍然被感激。

下次有人给你提review,先别急着反驳。问自己一个问题:十年后维护这段代码的人,会因为今天的review感谢我吗?

如果答案是会,那就好好聊聊吧。


相关文章

页面返回保留上一页信息解决方案

当用户在网页中点击链接进入下一页,再点击返回按钮,希望重新展示上一页的内容,并且停留在上次离开的地方。

查看更多

从零开始:快速打造MVP产品的五大步骤

本文详细介绍了如何快速构建MVP产品的完整流程,从确定核心功能、快速开发,到快速上线、收集反馈与迭代优化。通过遵循这些步骤,可以高效验证市场需求,减少时间和资金浪费。

查看更多

测试覆盖率从30%到80%:我的AI测试实战

单元测试覆盖率总是上不去?手写测试太累太慢?本文分享如何用AI工具分钟级生成单元测试,将覆盖率从30%提升到80%,包含具体工具、提示词和实操步骤。

查看更多