谷歌是如何做代码审查的

简介: 在上一篇文章中提到过,我已经不在Google工作了。我还没有想清楚应该去哪里—有两三个非常好的工作机会摆在我面前。因为在这段做决定时间里,我不再受雇于任何人,我想可以写一些专业性的东西,一些很有趣,但也会在同事和管理工作中导致关系紧张的东西。

在上一篇文章中提到过,我已经不在Google工作了。我还没有想清楚应该去哪里—有两三个非常好的工作机会摆在我面前。因为在这段做决定时间里,我不再受雇于任何人,我想可以写一些专业性的东西,一些很有趣,但也会在同事和管理工作中导致关系紧张的东西。

image.png

本文作者 Mark CC

Google是一个非常优秀的公司。他们做出了很多令人称赞的东西—既是公司外部,人们可以看到的东西,也是公司内部。有一些在公司内部并不属于保密的事情,在外部并没有给予足够广泛的讨论。这就是我今天要说的。


让Google的程序如此优秀的一个最重要的事情看起来是非常的简单:代码审查。并不是只有Google做这个事情—代码审查已经被广泛的认可为一种非常好的做法,很多人都在这样做。但我还没有看到第二家这样大的公司能把这种事情运用的如此普遍。在Google,没有程序,任何产品、任何项目的程序代码,可以在没有经过有效的代码审查前提交到代码库里的。


所有人都要经过代码审查。并且很正规的:这种事情应该成为任何重要的软件开发工作中一个基本制度。并不单指产品程序——所有东西。它不需要很多的工作,但它的效果是巨大的。


从代码审查里能得到什么?

很显然:在代码提交前,用第二群眼睛检查一遍,防止bug混入。这是对其最常见的理解,是对代码审查的好处的最广泛的认识。但是,依我的经验来看,这反倒是它最不重要的一点。人们确实在代码审查中找到了bug。可是,这些在代码审查中能发现的绝大部分bug,很显然,都是微不足道的bug,程序的作者花几分钟的时间就能发现它们。真正需要花时间去发现的bug不是在代码审查里能找到的。


代码审查的最大的功用是纯社会性的。如果你在编程,而且知道将会有同事检查你的代码,你编程态度就完全不一样了。你写出的代码将更加整洁,有更好的注释,更好的程序结构——因为你知道,那个你很在意的人将会查看你的程序。没有代码审查,你知道人们最终还是会看你的程序。但这种事情不是立即发生的事,它不会给你带来同等的紧迫感,它不会给你相同的个人评判的那种感受。


还有一个非常重要的好处。代码审查能传播知识。在很多的开发团队里,经常每一个人负责一个核心模块,每个人都只关注他自己的那个模块。除非是同事的模块影响了自己的程序,他们从不相互交流。这种情况的后果是,每个模块只有一个人熟悉里面的代码。如果这个人休假或——但愿不是——辞职了,其他人则束手无策。通过代码审查,至少会有两个人熟悉这些程序——作者,以及审查者。审查者并不能像程序的作者一样对程序十分了解——但他会熟悉程序的设计和架构,这是极其重要的。


当然,没有什么事情能简单的做下来的。依我的经验,在你能正确的进行代码审查前,你需要花时间锻炼学习。我发现人们在代码审查时经常会犯一些错误,导致不少麻烦——尤其在一些缺乏经验的审查者中经常的出现,他们给了人们一个很糟的代码审查的体验,成为了人们接受代码审查制度的一个障碍。


最重要的一个原则:代码审查用意是在代码提交前找到其中的问题——你要发现是它的正确。在代码审查中最常犯的错误——几乎每个新手都会犯的错误——是,审查者根据自己的编程习惯来评判别人的代码。


对于一个问题,通常我们能找出十几种方法去解决。对于一种解决方案,我们能有百万种编码方案来实现它。作为一个审查者,你的任务不是来确保被审查的代码都采用的是你的编码风格——因为它不可能跟你写的一样。作为一段代码的审查者的任务是确保由作者自己写出的代码是正确的。一旦这个原则被打破,你最终将会倍感折磨,深受挫折——这可不是我们想要的结果。


问题在于,这种错误是如此的普遍而易犯。如果你是个程序员,当你遇到一个问题,你能想到一种解决方案——你就把你想到的方案作为标准答案。但事情不是这样的——作为一个好的审查者,你需要明白这个道理。


代码审查的第二个易犯的毛病是,人们觉得有压力,感觉非要说点什么才好。你知道作者用了大量的时间和精力来实现这些程序——不该说点什么吗?

不,你不需要。


只说一句“哇,不错呀”,任何时候都不会不合适。如果你总是力图找出一点什么东西来批评,你这样做的结果只会损害自己的威望。当你不厌其烦的找出一些东西来,只是为了说些什么,被审查人就会知道,你说这些话只是为了填补寂静。你的评论将不再被人重视。


第三是速度。你不能匆匆忙忙的进行一次代码审查——但你也要能迅速的完成。你的同伴在等你。如果你和你的同事并不想花太多时间进行代码复查,你们很快的完成,那被审查者会觉得很沮丧,这种代码审查带来的只有失望的感觉。就好象是打搅了大家,使大家放下手头的工作来进行审查。事情不该是这样。你并不需要推掉手头上的任何事情来做代码审查。但如果中途耽误了几个小时,你中间还要休息一会,喝杯茶,冲个澡,或谈会儿闲话。当你回到审查现场,你可以继续下去,把事情做完。如果你如此处理,那么别人就不用在那里干等着你。


相关文章
|
6天前
|
存储 数据可视化 数据库
团队文档管理有困难?总有一款工具合适你
本文介绍了团队文档管理的重要性及其在提升工作效率、保障协同作业和知识传承中的关键作用。随后,详细评述了六款广受好评的团队文档管理工具:板栗看板、Notion、Confluence、Quip、Google Workspace 和 Microsoft 365,分别从功能类型、发展历程、价格费用、产品特色、优缺点、适用场景及应用案例等方面进行了对比分析,旨在帮助读者根据自身需求选择最合适的工具。
团队文档管理有困难?总有一款工具合适你
|
机器学习/深度学习 人工智能 自然语言处理
代替程序员?微软让 AI 学会了代码审查
代替程序员?微软让 AI 学会了代码审查
895 0
|
人工智能 自然语言处理 Java
用AI提高代码质量,同事对我的代码赞不绝口~
在当今软件开发领域,代码质量被视为至关重要的因素,因为它直接影响到软件的可维护性、可扩展性和可靠性。尽管有人担忧AI技术的快速发展可能会取代初级程序员的工作,但我们应该认识到提升自身技能和成长是关键。
|
数据采集 监控 搜索推荐
谷歌SEO词投入怎么做?
答案是:谷歌seo关键词需要8-25w一年的预算。 当我们在制定和执行搜索引擎优化(SEO)策略时,关键词投入是不可忽视的一部分。 这不仅可以提高网站的搜索排名,还能吸引更多的目标用户访问我们的网站。 以下是如何进行谷歌SEO词投入的一些步骤和策略。
100 0
谷歌SEO词投入怎么做?
|
机器学习/深度学习 前端开发 安全
软件质量文化:谷歌实践及我的思考
0 缘起前段时间,一篇题为《谷歌资深工程师讲述谷歌如何思考测试》的博文在国内测试圈广泛流传,引起了我的关注。我特意去调查了一下这篇文章的背景,发现它其实是新书《谷歌软件工程》(2022)的一个章节,于是果断下单了一本。当拿到这本书时,我不禁想起以前买过的另一本书,2013年由3位阿里测试前辈翻译出版、至今仍在测试圈产生广泛影响的《谷歌软件测试之道》。图1:两本间隔十年的书这两本书出版的时间差不多间
软件质量文化:谷歌实践及我的思考
|
人工智能 安全 数据可视化
ChatGPT 出现严重技术漏洞,“当红炸子鸡”翻车了?
ChatGPT 出现严重技术漏洞,“当红炸子鸡”翻车了?
148 0
|
Web App开发 缓存 前端开发
Yahoo 团队经验:网站性能优化的 34 条黄金法则
Yahoo 团队经验:网站性能优化的 34 条黄金法则
|
设计模式 Serverless 领域建模
实战经验 | 怎样才能提升代码质量?
提升代码质量的三个有效方法:领域建模、设计原则、设计模式。
实战经验 | 怎样才能提升代码质量?
|
Web App开发 JavaScript 前端开发
忍受不了糟糕的工作氛围,我退出了 Google WebAssembly 团队
当地时间 5 月 11 日,游戏设计师、工具开发者 Katelyn Gadd 在一篇博文中分享了她在 Google WebAssembly 团队中的工作经历。这位女士讲述了自己在 Google 任职期间因为管理混乱患上脑损伤并长期饱受折磨,这些负面经历凸显了 Google 糟糕的工作氛围:团队缺乏支持并且领导者们又没有改革能力。“我希望这个故事能够帮助人们认识到自己工作场所中的有害文化,或者能帮助新员工在 Google 获得更好的职业生涯。”Gadd 说。
173 0
忍受不了糟糕的工作氛围,我退出了 Google WebAssembly 团队
|
设计模式 监控 架构师
UI 自动化测试应不应该投入?有没有前途?怎样做最明智?
![](https://ceshiren.com/uploads/default/original/3X/4/a/4a59ac8dba217173b9abe7f8e8dd4d661b3a367e.jpeg) 昨天发布了《实战| UI 调度自动化测试平台(基于 Python)》文章之后,看到不少测试同学吐槽自己公司的 UI 自动化测试效果差而维护成本高,就是一件劳民伤财的集体活动。经常也会有同学问