在上一篇博客里我暗示本身将不在为Google工做。 我尚未决定好去哪儿-有几个很是不错的工做机会让我选择。鉴于这段时间内我不受雇于任何公司,我想我能够写点和专业相关的东西,这些东西颇有趣,可是若是我还在职,可能会致使与同事/老板的关系紧张。程序员
Google是一个至关酷的公司。它们完成了一些很是让人吃惊的事情-包括外部用户能够看到的,也包括公司内的。有些关于公司内部的东西是非保密性的,可是在公司外部讨论的并不普遍,这些就是我想说的。编程
保证Google的代码质量如此之好的最大缘由是代码审查。这不是Google专有的-这是被广为接受的好主意,并且不少人都在作。可是我历来没有见过另一个大公司会应用的这么广泛,在Google,任何产品/项目的代码只有获得正面的审查才能够提交。设计
每一个人都应该这么作,我不是指非正式的:这是一个严格的软件开发过程必备的广泛规则,其范围不仅包括产品代码而是全部的代码。这并不须要作不少工做,可是产生的效果很是大。开发
你能够从代码审查里获得什么呢?博客
有一点很明显,在代码提交以前若是有不少双眼睛盯着看能够发现Bug.这是代码审查最广为人知的好处,可是以个人经验看这是价值最小的一点。人们的确能够在代码审查中发现Bug,可是这些Bug大部分都是显而易见的小Bug,开发者分分钟就能够发现,而那些真正须要花时间发现的Bug一般不是在代码审查中发现的。产品
代码审核最大的好处是纯社会性的。若是你编程的时候知道你的同事将要看你的代码,你的编程方式会不同。你的代码会写的更整洁,注释更清楚,组织的更好-由于你知道其余人会看你的代码,他们的意见是你须要你关注的。若是没有审查,你虽然知道人们最后会去看你的代码,可是那样不会给你一种紧迫感,也不会给你一样的我的评判的感受。软件
还有一个更大的好处就是代码审查能够传播知识。在不少的开发小组里,每一个人都负责某一块核心组件,专一于本身的这一块,只要其余同事的模块不会破坏本身的代码就不会去关注。这种模式致使一个模块只有一我的熟悉对应的代码。若是一我的请假或离职,其余人对他负责的模块将一无所知。若是采用代码审核,那么至少有两我的熟悉代码-做者和审查者。审查者知道的代码不如做者多,可是他们都熟悉代码的设计和结构,这意义重大。程序
固然,没有什么事情会这么简单的,以个人经验,你须要花一些时间来作好代码审查。我已经见过一些坑致使的问题-因为他们在经验不足的审查者中出现的很频繁,这使得那些尝试代码审查的人们体验很很差,以致于成为了实践代码审查的障碍。经验
最重要的一个规则就是代码审查的关键是在代码提交以前发现代码存在的问题-你要找的是正确性。代码审查最多见的错误-每一个初次接触代码审查的人都会犯的错误-就是判断代码是不是以审查者指望的方式编写。项目
给定一个问题会有一打不一样的方’案来解决,给定一个方案,会有一百万种方式用代码实现。做为一个审查者,你的工做不是确保代码是以你所想象的那种方式编写-这是不会的。你的工做是确保代码是正确的。若是打破了这个规则,你会以为代码审查很难,充满挫折感-这不是好事。
事实上,这是一个很天然的会犯的错误。若是你是一个程序员,当你看到一个问题的时候你会想到一个解决方案-而你会想固然的认为你所想到的就是那个解决方案。然而实际上不是-要成为一个好的审查者,你须要理解这点。
代码审查第二个主要的坑就是人们以为有义务说点什么。你知道做者花了不少时间和精力写代码-你难道不须要说点什么吗?
不,你不须要。
只是说“哇,不错”历来都不是一个错误。若是你总试图费劲心思来找些什么东西批评一下,那么你所做的只会损害你的我的信誉。若是你只为了说点什么而不断的制造点东西来评判,那么找你作代码审查的人会以为你所说的只是为了打破沉默,你的意见不会被认真考虑。
第三个坑和审查速度有关。你不该该匆忙的完成代码审查,可是你也应该马上开始。你的同事正在等你的反馈,若是你和你的同事不肯意花时间来完快速成代码审核,人们会变得沮丧,这种方式只会带来挫折感。看起来代码审查会中断一些手头的事情,可是事实上不会如此,若是有人要求你作审查,你不须要立刻放下全部事情,可是在接下来几个小时里,你总会稍停你当前的工做-好比喝杯饮料,去洗手间或者散步闲聊。当你回来的时候,你能够开始审查并完成它。若是你这么作,那没有人会由于等你而耽误很长时间。
[英文原文:Things Everyone Should Do: Code Review ]