一次糟糕的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感谢我吗?

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


相关文章

2小时缩短到10分钟?AI帮你快速定位bug

线上出现bug后,你是否还在逐行搜索日志?本文分享如何用AI工具将bug定位时间从2小时缩短到10分钟,包含具体工具、提示词模板和实操步骤。

查看更多

终端操作这5招,让我每天省半小时

每天在终端重复敲相同命令?本文分享5个Terminal高效操作技巧,从快捷键到别名配置,帮助开发者真正提升命令行效率,把时间省下来做更有价值的事。

查看更多

把 AI 从“问答助手”变成“交付搭子”

通过一个项目救火案例,拆解如何用“上下文工程 + 任务分层 + 复盘闭环”让 AI 真正提升团队交付效率。

查看更多