谷歌是如何做代码审查的

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

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

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

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

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

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

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

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

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

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

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

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

  不,你不需要。

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

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

局部路径规划算法 - B样条曲线(B-spline Curves) 本文详解了B样条以及代码实现 阅读详情

相关推荐

使用Kolla部署多节点Rocky版本OpenStack

openstack命令行客户端使用,post-deploy会在 /etc/kolla/目录下生成文件admin-openrc.sh。每次使用openstack命令时执行source /etc/kolla/admin-openrc.sh(manager节点执行)source /etc/kolla/admin-openrc.sh (将文件内容复制到/etc/profile中,即可一直生效)3.2.2 开始安装kolla-ansible,要带上--ignore-installed PyYAML,否则可能会报错。

gyc1206的博客 1929

Google 代码审查指南

代码审查是除了代码作者之外,其他人检查代码的过程。Google 通过 Code Review 来维护代码和产品质量。此文档是 Google Code Review 流程和政策的规范说明。代码审查者指南:针对代码审查者的详细指南。代码开发者指南:针对 CL 开发者的的详细指南。代码设计精良。该功能对代码用户是有好处的。任何 UI 变更都是合理的且看起来是好的。其中任何并行编程都是安全的。代码并不比它需要的复杂。开发人员没有实现他们将来可能需要,但不知道他们现在是否需要的东西。

heshihu2019的博客 830

制作 img系统镜像的详细方法

      I.MX6开发板目前支持从TF卡和eMMC启动,启动时,由于各个不同的启动文件对路径有不同的要求,例如uboot文件要求位于启动设备的某个块,dtb文件要求在FAT分区上,文件系统要求在Linux分区上,基于此,我们目前采用将映像制作成img文件的方式,这样可以更简单完成对启动卡的制作。 关于如何制作img,方法如下:方法一  Windows下面利用Win32工具1.   准备我司提供...

armkits的博客 4万+

【转载】代码审查:大家都应该做的事情

原文地址:http://sd.youkuaiyun.com/a/20110801/302447.html 导读:本文是从《Things Everyone Should Do: Code Review》这篇文章翻译而来。译文来自外刊IT评论《谷歌是如何做代码审查的》。 内容如下: 本文的作者Mark CC 在上一篇文章中提到过,我已经不在Google工作了。我还没有想清楚应该去哪里—有两三个非常好的...

weixin_33749242的博客 326

自定义控件三部曲视图篇(六)——RecyclerView系列之三自定义LayoutManager

前言:把握生命里的每一分钟,全力以赴我们心中的梦,不经历风雨 怎么见彩虹,没有人能随随便便成功 在第一篇中已经讲过,LayoutManager主要用于布局其中的Item,在LayoutManager中能够对每个Item的大小,位置进行更改,将它放在我们想要的位置,在很多优秀的效果中,都是通过自定义LayoutManager来实现的,比如: 可以看到这些效果都非常棒,通过这一节的学习,大...

启舰 1万+

3台虚拟机部署Doris详细文档(含校验步骤)

摘要:本文详细介绍了Apache Doris在3台虚拟机上的集群部署方案。采用1主FE+1从FE+1观察者FE+3BE的混合部署模式,确保元数据高可用性。硬件配置建议测试环境4核16GB内存,生产环境8核64GB内存。部署步骤包括系统环境配置(关闭防火墙、内核参数优化)、FE/BE节点配置启动、集群初始化验证等。重点配置了IP白名单(172.30.0.115)和数据目录(/data/doris)。通过MySQL客户端和WebUI可监控集群状态,实现千万级数据的实时分析能力,后续可通过增加BE节点线性扩展。

weixin_41026747的博客 936

google 如何进行代码审查01

前言 贡献开源专案Fission时,不仅会被他人审核也常需要审核来自世界各地开发者的PR,从中体会到不少身为一个软体工程师、一个专案维护者该有的行为与谈吐。近期Google公布其内部关于「如何进行程式审核」的指导原则,快速浏览相关内容后真的是心有戚戚焉,要是能更早知道这些技巧就不会摸索这么长的时间。 认为这么棒的文章没有让更多人看到实在非常可惜,因此尝试自己翻译来分享给中文的开发者。若有文句不通畅...

ailinyingai的博客 545

基于三轴加速度计的塑料水管泄漏振动检测技术全解析

在流体力学与结构动力学领域,管道振动分析是评估系统健康状态的关键技术。其基本原理在于,当管道内流体状态发生异常(如泄漏)时,会引发管壁产生特定的机械振动信号。这项技术的核心价值在于实现了对管道系统的非侵入式、在线监测,能够提前预警潜在故障,避免资源浪费与次生灾害。在智慧城市与智能水务等应用场景中,它对于保障供水管网安全、提升运维效率具有重要意义。本文聚焦于如何利用高精度的三轴加速度计,精准捕捉塑料水管因泄漏产生的微弱振动,并通过信号处理与机器学习算法,构建一套从数据采集到泄漏识别与定位的完整工程解决方案。

weixin_32239523的博客 407

谷歌检查代码问题~

想请问一下,为什么谷歌浏览器在b站用户界面检查代码会出现不支持。。。求助~~~ 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增...

midnight_kisser的博客 454

2022北京高考数学压轴题21题:Python暴力枚举验证k≥7的5种反例

本文探讨了2022北京高考数学压轴题21题的编程解法,通过Python暴力枚举验证k≥7的5种反例。文章详细介绍了m-连续可表数列的定义、问题转化与约束条件,并提供了暴力枚举算法设计和优化技巧,帮助读者理解如何用编程思维解决数学问题。

weixin_33552698的博客 234

OpenHarmony + AI:深度解析 Whisper.cpp 智慧语音系统级移植与 NAPI 封装实战

【代码】OpenHarmony + AI:深度解析 Whisper.cpp 智慧语音系统级移植与 NAPI 封装实战。

m0_67505153的博客 188
上一篇: Java实现的拦截器
下一篇: 运用proxool连接池
programloverjack
博客等级 码龄17年 5粉丝 252原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值