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

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

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

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

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

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

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

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

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

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

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

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

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

不,你不需要。

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

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

转载于:https://www.cnblogs.com/sdjnzqr/articles/4081637.html

【转载】谷歌是如何做代码审查的相关推荐

  1. [转载]谷歌地图下载

    关于如何将地球经纬度坐标系统转换成程序中常用到的平面2D坐标系统,网上的文章很多,参考http://www.cnblogs.com/beniao/archive/2010/04/18/1714544. ...

  2. 为什么Google优化排名前期要做长尾关键词?谷歌seo怎么做?

    本文主要分享关于谷歌长尾词对于外贸网站获取流量和排名的重要性. 本文由光算创作,有可能会被修改和剽窃,我们佛系对待这种行为吧. Google优化排名是指在Google 搜索结果中,使外贸站的排名更高. ...

  3. 谷歌推广是什么?谷歌推广怎么做?

    谷歌推广是什么? GoogleAds,原名GoogleAdWords,是Google公司主要的广告服务产品.AdWords是一种在Google搜索结果页展示的按点击付费的关键字广告. 谷歌推广怎么做? ...

  4. 什么是谷歌推广?谷歌推广怎么做?

    本文原标题:什么是谷歌推广?谷歌推广怎么做?​ 谷歌相信大家都不陌生,这几年随着谷歌搜索引擎.YouTube等越来越被人们所熟知,谷歌拥有了很多忠实用户.因此,在流量和信息红利时代的今天,谷歌搜索引擎 ...

  5. 折腾两年裁了150人,谷歌才明白做游戏有多费钱

    本文转载自 差评君,作者 小发 前几天,谷歌 Stadia 游戏开发部门的员工和往常一样去公司上班,却突然发现自己部门没了-- 事发很突然,谷歌 2 月 4 日宣布关闭了位于洛杉矶和蒙特利尔的两家游戏 ...

  6. 谷歌、OpenAI 做了一个“魔性AI显微镜”,打算撬开人工智能黑箱

    https://www.toutiao.com/a6665945564028338699/ 人工智能的世界是什么样的? 几十年来,研究人员一直对此感到困惑.现在,人们更加想知道这个问题的答案.尤其是, ...

  7. 【转载】周鸿祎:做产品体验先把自己切换到二傻子模式

    我唯一能自吹的地方,就是本人在互联网里可能犯的错最多,挨的骂最多,然后也经历了很多失败,所以这样才有一些真实的感受. 建议大家把<定位>和<创新者的窘境>.<创新者的解答 ...

  8. 【好文转载】产品经理做产品设计的九步法

     多年以后,当我面对那些年青的产品经理,我会想起自己当年从事的是一份高薪的工作.那是2000年,我大学毕业后在北京一家IT网站做搜索引擎PM,当时我一个月的薪水能在亚运村买一平方米房子,十年之后, ...

  9. [转载] 蝴蝶上如何做种候选及发布

    来源:http://www.kmgtp.org/forums.php?action=viewtopic&forumid=10&topicid=330 如何利用UT制作种子? 如何候选? ...

最新文章

  1. 在哪个公众号学python好_怎么通过公众号来快速学习python编程?
  2. Linux的实际操作:文件目录类的实用指令(cat more less)
  3. Bootstrap HTML编码规范之属性顺序
  4. 005---基于UDP的套接字
  5. php mysql 跨库_PHP使用PDO进行跨数据库操作
  6. PHP肥料源码_PHP农场养殖游戏巨人农场复利平台源码带抽奖
  7. 阿里云盾证书服务助力博客装逼成功
  8. 超全的Linux基础知识思维导图(1)
  9. 地平线开源网站源码Deepsoon v1.2.3
  10. 哪家的服务器cpu性能高,服务器cpu排行
  11. Codeforces Round #739 (Div. 3) E. Polycarp and String Transformation
  12. 从360、QQ之争看腾讯的无耻
  13. 自从看了<<麦肯锡的领导力法则>>之后......
  14. Cygwin warning: could not find /tmp, please create! 问题
  15. manifest.json取消通讯录权限
  16. 宇视科技2015应届生招聘笔试题
  17. 中专计算机与外设维修,《计算机维护与维的修》级计算机及外设维修三中专教学大纲.doc...
  18. ios系统设置z-index不生效问题
  19. 电脑BIOS密码的设置与修改方法
  20. 苹果树病虫智能识别的web部署,基于django框架

热门文章

  1. 求数组中各个元素的个数?
  2. 4.JAVA之GUI编程事件监听机制
  3. 自定义 Javascript 模板规则,打造轻量级模板引擎
  4. win32获取其它进程变量地址存放的信息
  5. sql 插入多行数据的问题
  6. 学java的就业方向_学习Java的就业前景怎么样
  7. jq追加html属性,jQuery 操作 HTML 元素和属性的方法
  8. FPGA时钟资源PLL与DLL区别
  9. 纯英文换行的css,利用CSS实现纯英文数字自动换行
  10. 4.FreeRTOS学习笔记-消息队列