本文的做者 Mark CC程序员
在上一篇文章中提到过,我已经不在Google工做了。我尚未想清楚应该去哪里—有两三个很是好的工做机会摆在我面前。由于在这段作决定时间里,我再也不受雇于任何人,我想能够写一些专业性的东西,一些颇有趣,但也会在同事和管理工做中致使关系紧张的东西。编程
Google是一个很是优秀的公司。他们作出了不少使人称赞的东西—既是公司外部,人们能够看到的东西,也是公司内部。有一些在公司内部并不属于保密的事情,在外部并无给予足够普遍的讨论。这就是我今天要说的。架构
让Google的程序如此优秀的一个最重要的事情看起来是很是的简单:代码审查。并非只有Google作这个事情—代码审查已经被普遍的承认为一种很是好的作法,不少人都在这样作。但我尚未看到第二家这样大的公司能把这种事情运用的如此广泛。在Google,没有程序,任何产品、任何项目的程序代码,能够在没有通过有效的代码审查前提交到代码库里的。学习
全部人都要通过代码审查。而且很正规的:这种事情应该成为任何重要的软件开发工做中一个基本制度。并不单指产品程序——全部东西。它不须要不少的工做,但它的效果是巨大的。编码
从代码审查里能获得什么?.net
很显然:在代码提交前,用第二群眼睛检查一遍,防止bug混入。这是对其最多见的理解,是对代码审查的好处的最普遍的认识。可是,依个人经验来看,这反却是它最不重要的一点。人们确实在代码审查中找到了bug。但是,这些在代码审查中能发现的绝大部分bug,很显然,都是微不足道的bug,程序的做者花几分钟的时间就能发现它们。真正须要花时间去发现的bug不是在代码审查里能找到的。设计
代码审查的最大的功用是纯社会性的。若是你在编程,并且知道将会有同事检查你的代码,你编程态度就彻底不同了。你写出的代码将更加整洁,有更好的注释,更好的程序结构——由于你知道,那个你很在乎的人将会查看你的程序。没有代码审查,你知道人们最终仍是会看你的程序。但这种事情不是当即发生的事,它不会给你带来同等的紧迫感,它不会给你相同的我的评判的那种感觉。code
还有一个很是重要的好处。代码审查能传播知识。在不少的开发团队里,常常每个人负责一个核心模块,每一个人都只关注他本身的那个模块。除非是同事的模块影响了本身的程序,他们从不相互交流。这种状况的后果是,每一个模块只有一我的熟悉里面的代码。若是这我的休假或——希望不是——辞职了,其余人则一筹莫展。经过代码审查,至少会有两我的熟悉这些程序——做者,以及审查者。审查者并不能像程序的做者同样对程序十分了解——但他会熟悉程序的设计和架构,这是极其重要的。blog
固然,没有什么事情能简单的作下来的。依个人经验,在你能正确的进行代码审查前,你须要花时间锻炼学习。我发现人们在代码审查时常常会犯一些错误,致使很多麻烦——尤为在一些缺少经验的审查者中常常的出现,他们给了人们一个很遭的代码审查的体验,成为了人们接受代码审查制度的一个障碍。ci
最重要的一个原则:代码审查用意是在代码提交前找到其中的问题——你要发现是它的正确。在代码审查中最常犯的错误——几乎每一个新手都会犯的错误——是,审查者根据本身的编程习惯来评判别人的代码。
对于一个问题,一般咱们能找出十几种方法去解决。对于一种解决方案,咱们能有百万种编码方案来实现它。做为一个审查者,你的任务不是来确保被审查的代码都采用的是你的编码风格——由于它不可能跟你写的同样。做为一段代码的审查者的任务是确保由做者本身写出的代码是正确的。一旦这个原则被打破,你最终将会倍感折磨,深受挫折——这可不是咱们想要的结果。
问题在于,这种错误是如此的广泛而易犯。若是你是个程序员,当你遇到一个问题,你能想到一种解决方案——你就把你想到的方案做为标准答案。但事情不是这样的——做为一个好的审查者,你须要明白这个道理。
代码审查的第二个易犯的毛病是,人们以为有压力,感受非要说点什么才好。你知道做者用了大量的时间和精力来实现这些程序——不应说点什么吗?
不,你不须要。
只说一句“哇,不错呀”,任什么时候候都不会不合适。若是你老是力图找出一点什么东西来批评,你这样作的结果只会损害本身的威望。当你不厌其烦的找出一些东西来,只是为了说些什么,被审查人就会知道,你说这些话只是为了填补寂静。你的评论将再也不被人重视。
第三是速度。你不能匆匆忙忙的进行一次代码审查——但你也要能迅速的完成。你的同伴在等你。若是你和你的同事并不想花太多时间进行代码复查,大家很快的完成,那被审查者会以为很沮丧,这种代码审查带来的只有失望的感受。就好象是打搅了你们,使你们放下手头的工做来进行审查。事情不应是这样。你并不须要推掉手头上的任何事情来作代码审查。但若是中途耽误了几个小时,你中间还要休息一会,喝杯茶,冲个澡,或谈会儿闲话。当你回到审查现场,你能够继续下去,把事情作完。若是你真是这样,我想没有人愿意在那干等着你。
本文由“外刊IT评论”网(www.aqee.net)荣誉出品