Others

每个程序员都应该做的事情:代码审查(code review)

2011-10-10. Category & Tags: Others Others

翻译:magictong(童磊)2011年9月

版权:Mack CC

原文地址:

http://scientopia.org/blogs/goodmath/2011/07/06/things-everyone-should-do-code-review/

原文名称:Things Everyone Should Do: Code Review

 

      之前在一些项目中发现,修改代码所带来的bug比新开发功能的bug并不会少,而且还更不可控制,因为测试人员并不完全知道你所修改的部分到底影响到了哪些子功能或者哪些其它的模块,这就造成很多bug在版本在外发之后才在用户那里出现,而测试用例则显然是没有覆盖的。其实有效避免这个问题的一个方法就是code
review,这也是我在项目中大力推崇的,通过对每一个小的改动追根究底的询问和跟踪,能够发现测试无法发现的一些隐藏的诡异的问题,而进行code review的人员不能是本人并且最好是对相关功能最熟悉的开发人员。

      这篇文章最开始是同事推荐到我们开发小组的,我看过之后感觉大受启发,决定翻译出来和大家一起学习和思考……

——Magictong 2011-9-25夜

 

      在我的最后一篇帖子中我曾经提到过,我即将离开google了。但是我还没有完全决定下一家去哪里工作,有几个不错的offer可以供我选择。在这段时期,我已经几乎是一个自由人了(译者注:工作交接阶段,没有具体工作了),因此我准备用这些时间写一些有趣的专业性的文章,但是这可能导致我和同事或者上级关系紧张。

      Google是一个相当酷的公司。而且他们已经做了一些非常了不起的事情——无论是公司外面用户可以看到的地方还是公司内部的一些东西,其中公司内建立的一些好的机制并不是秘密,但是却很少被广泛的讨论,我今天正要和大家一起讨论下这些事情。

      使google的代码健壮、高效而又优美的最重要的方法其实很简单:代码审查(code review)。对于google来说,做这件事情并不特殊——而是被广泛认为是一个好的机制(idea),大量的程序员都在严格执行。我还没看到过另一家大公司把代码审查当成日常开发中的一件普通的质量保证机制。在google,任何产品,任何工程的代码,在被进行严格或者明确的审查(code
review)之前,是不允许提交的。

      每个程序员都应该这样做,我很认真的这么讲:这应该是严格的软件开发中一个通用的规则。不仅仅是产品代码这样——而应该是一切。它不会占用特别多的工作时间,但是会带来巨大的不同。

      从代码审查(code review)中我们能获得什么好处呢?

      首先最明显的就是:在代码提交之前多了一双眼睛来审查代码,也就更有可能发现代码中的bug了。这也是引用和讨论的最多的代码审查(code review)的好处。不过,以我的经验,这不过是代码审查(code review)最少的价值之一。程序员在代码审查(code
review)中发现的bug,大多数都是不重要的,可能就花了审查者几分钟的时间。代码中真正需要花时间去排查的bug在审查阶段是不太可能被检查出来的。

      代码审查(code review)最大的优点是社交性质的。如果你正在写代码,并且你知道你的同事将会要查看你的代码,那么你编写的时候就会更加的慎重和仔细。你的代码会更加的整洁,注释更加完善,并且更有组织性。因为你知道一个人将要查看你的代码,并且你对他给你的代码的评价很关心。如果没有代码审查(code
review),也许你知道在最后总是会有人看你的代码的,但是因为即时性不高,因此绝不会产生那种相同的紧迫感,也不会有那种个人评价的感觉。

      代码审查(code review)的一个更大的好处是,它可以传播知识(译者注:就是同事之间可以分享技术和编程方法)。在许许多多的开发小组里面,每个人都是负责自己的一个核心模块,并且每个人基本上都把主要的精力放在关注自己的模块上面。只要同事的模块没有破坏自己的代码,基本上是不会看别人的代码的。带来的一个(不好的)影响就是,对于某个模块可能只有一个人熟悉它的代码。如果这个人休假了或者——天晓得——离开了公司,(在短时间内)就无人知道这个模块的任何内部细节了。有了代码审查(code
review)之后,就有两个人熟悉同一块代码了——作者和审查人。审查者可能不像代码作者那样对代码的细节极其熟悉,但是会熟悉模块的设计和结构,这比想象中的有价值很多。

      当然,没有什么事情是完全简单易做的。从我的经验来看,在你擅长进行代码审查之前是需要花一些时间的。一些缺乏经验的代码审查者,经常频繁的造成一些意想不到的麻烦,譬如他们给予一些即将要进行代码审查的人一些不好的经验,这是将代码审查(code
review)作为一项常规事务来做的主要阻碍。

      代码审查的主要目的是在代码提交之前发现代码里面的问题。你要寻找的就是代码正确与否。在代码审查中一个常见和常规的错误——也是每个人第一次做代码审查常犯的错误,就是判断代码是否写得跟自己(代码审查者)想象的一样。

      对于同一个问题,通常有几十种不同的方法来解决它。而给定了一种解决方案,通过代码来表达它的方法通常有上百万种。对于一个代码审查者来说,在进行代码审查时,你的工作不是判断这个代码是不是写得跟自己现象的一样——原因显而易见,肯定不像(译者注:俗话说,对于同一个问题,一百个程序员会写下一百种不同的代码)。代码审查者的工作应该是确保作者的代码实现是正确的。如果这个规则被打破的话,你最终会很有挫败感(译者注:因为你会发现这代码怎么写得和自己完全不一样!)——这不是一件好事情。

      事实上这也是一个很彻底很自然犯得错误。如果你是一个程序员,当你发现一个问题的时候,你可能马上就感觉看到了解决问题的方法,并且你觉得你的解决方案是正确的,但是往往它不是。作为一个优秀的代码审查者,你需要知道这点。

      在代码审查中易犯的第二个主要错误是代码审查者感觉有义务和责任必须要说些什么。因为你觉得代码作者在这份代码上话费了大量的时间和精力——难道不应该说点什么吗?

      不!不要这样做。

      如果代码里面没有发现任何的错误,只需要说:“啊,看起来非常好!”如果你像打猎搜寻一样想找到一些地方来批评,那么最终你的所谓的一些批评都是在损害你的信誉。如果你经常这样做,到后面代码的作者会认为您仅仅为了批评而批评,您的意见也将不再被认真的对待了(译者注:有点像狼来了)。

      第三个易犯的错误就是审查代码的速度了。不要急急忙忙的进行代码审查——但是你需要即时的去做这件事情。因为你的同事正在等你进行代码审查。如果你和同事没有即时进行代码审查(code review),并按时完成,那么最后大家都会感到沮丧,并且这次的代码审查(code
review)也仅仅是造成了沮丧和挫折而已。看起来丢下其他的事情去做代码审查(code review)是一种不好的打岔行为,其实不是。在有人叫你去做代码审查(code review)时,你不需要中断任何事情。但是在几个小时之后,你将会打断你正在做的事情——去喝杯茶,去下洗手间,或者去散下步。当你回来的时候你可以进行代码审查(code review)工作并完成它。如果你坚持这样做,那你的同事就不会在这件事情上再花很长一段时间等你了。

...

苹果发布iPhone 4S

2011-10-10. Category & Tags: Others Others

  • 苹果与微软的用户文化

    Apple TV让人爱恨交织的十个方面

    解密iPad的成功魔法

    苹果CEO史蒂夫·乔布斯辞职

    苹果的中国机会

    中国成仅次于美国的第二大iOS应用消费市场

    WWDC2011:开发者还能做什么?

    苹果发布全新Mac OS、iOS 5和iCloud

    苹果与其他高科技公司的对比

    APP STORE国内应用分析

    苹果和微软的战争

    Android平板是否能击败iPad

    苹果:一种未来理念

    iPhone通知系统改进

    乔布斯会不会推低端iPhone手机

    当乔布斯离开苹果

    二十年前的那场战争

    如何创造性使用手势操作

    解读“后PC时代”

    苹果iPad2引领平板电脑潮流

    苹果正式发布iPad2

    iPad上的杂志

    解读苹果的过路费

    平板电脑能否替代传统电脑

    苹果是否改变我们的生活

    苹果iPhone游戏推荐

    苹果皮的抗争

    iPhone常用系统增强类DEB软件

    从联通讽刺iPhone装移动卡说起

    iPhone应用程序推荐

  • 遥远的旅途---风之誓言

    2011-10-10. Category & Tags: Others Others

    初识你的那个季节

    天空 蔚蓝 纯洁

    初见你的那片原野

    凌绕万千蝴蝶

    梦到你的那个夜晚

    冰雪开始溶解

    朦胧了一双眼 一颗心

    漂泊 终于停歇

    万树繁花

    过往 已飘零天涯

    悠扬深邃的梆笛

    缥缈女声

    依稀从远处传来的驼铃

    带着千古誓言

    随风前行

    响彻磅礴大地

    (点击查看原文/来源链接)

    			<!-- DIGG -->
    
    	<!-- DIGG -->  
    			<!--  -->  
    			<!--  -->
    

    Apple

    2011-10-10. Category & Tags: Others Others

    #

    If you would like to share your thoughts, memories, and condolences, please email [email protected]

    		</article>
    

    亚马逊 云服务 首年免费 (感谢SHLUG

    2011-10-10. Category & Tags: Others Others


    Pay only for what you use. There is no minimum fee. Estimate your
    monthly bill using AWS
    Simple Monthly Calculator
    . The prices listed are based on the
    Region in which your instance is running. For a detailed comparison
    between On-Demand Instances, Reserved Instances and Spot Instances,
    see Amazon EC2 Instance Purchasing
    Options
    .

    On-Demand Instances #

    On-Demand Instances let you pay for compute capacity by the hour
    with no long-term commitments. This frees you from the costs and
    complexities of planning, purchasing, and maintaining hardware and
    transforms what are commonly large fixed costs into much smaller
    variable costs.

    ...

    李开复:中国第四波创业浪潮来临

    2011-10-07. Category & Tags: Others Others

    				<!--  : end -->
    
    				<!--  begin -->
    
    	<span class="img_descr">  李开复(1961年12月3日生)是一位信息产业的执行官和计算机科学的研究者。1998年,李开复加盟微软公司,并随后创立了微软中国研究院(现微软亚洲研究院)。2005年7月20日加入谷歌公司,并担任谷歌全球副总裁兼中国区总裁一职。2009年9月4日,宣布离职并创办创新工场任董事长稽/span  
    </span>
    
    				<!--  end -->
    
    				<!--  begin -->  
    				<!--  -->
    
    					<!-- publish_helper name='' p_id='2' t_id='1' d_id='6142525' f_id='2' -->
    

      演讲人:李开复

      时间:9月26日

      地点:北京大学秋林报告厅

    **  中国创业的四波浪潮**

      第一波浪潮的主要创业者是社会相对边缘的人;第二波是从体制内“下海”的人;第三波创业者中草根居多;第四波不但拥有技术,而且往往是IT精英。

      今天,我学了一个词,叫作“倒爷”,摔倒的“倒”,爷爷奶奶的“爷”。

      “倒爷”就是以地方差价赚钱的人,他们从一个城市到另外一个城市,以低价商品买进、高价卖出的人。

      从改革开放开始至今,中国的创业浪潮一波接着一波。“倒爷”就是中国改革开放后的第一波创业者。这些“倒爷”可以说是引领了当时的中国创业浪潮。这话今天听起来,让人觉得振奋。但是,在当时,他们是社会的一些边缘人。那个时候,大部分的人都是作公务员或在国企任职,只有找不到工作的,甚至是无处生存的人,才考虑以“倒爷”作为职业。在这批“倒爷”中,后来只有少数人得到成功,慢慢地成为企业家,比如柳传志、张瑞敏……他们在上世纪八十年代,也许放弃了优厚的机会,也许因为找不到更好的机会,在社会边缘挣扎努力,直到今天才得到社会的尊重。这就是当时中国的创业情况,“倒爷”扮演着开拓者的角色。

      十年以后,上世纪九十年代,发生了第二波创业浪潮。

      当时的中国,全民“下海”。据说有十万个在国企或政府机构任职的工作人员,看到了经商者的成功,便放弃了原有的工作,选择“下海”创业。这些人员的素质和所受的教育程度都比较高,他们创业的企业经营业务范围很广泛。当时大家的创业想法并不清晰。最终,他们赢得巨大利益的集中在房地产和外贸领域。代表人物是潘石屹、史玉柱……这批创业者得到了很大的价值回报,因为他们与第一批的创业者不同,他们拥有较高的教育水平和知识层次,并且他们渐渐地开始学习西方先进的企业管理模式。

      中国第三批创业者,选择了互联网。

      当时,美国验证了互联网在未来有着很大的潜在价值。但是,到底有多大,谁也不清楚。这是一个巨大的机会,这批中国创业者看到了这个机会,他们认为:美国人能做到的,我们中国人也能做到。他们中的佼佼者,快速地积累了巨大财富。其中,四个公司的市值加起来接近1500亿美元。如果只评估固定时间内,用同样资本创造最大的价值的话,第三波创业者的成功远远大于第二波和第一波。比如,腾讯的马化腾创造的价值和投入的成本,与潘石屹相比,马化腾得到了更大的回报。

      第三次创业浪潮,让人们变得离不开互联网。它通过风险投资和股票股权可以让整个公司参与创业过程,公司一旦上市,参与公司创业的前一百人,甚至是前一千人可以成为富翁。上市是由风险投资支撑,创业者拥有巨大的股权。这让很多人成为百万、千万富翁,前一百个员工可以成为千万甚至是上亿的富翁,前十名员工所得到的价值就更不用说了。

      这种创业模式是由风险投资和股权激励,加上创业者本身的不同资本,而拥有相当大的股权。这样的模式与前期的创业有很大不同。前期的传统企业是资本运作,拿一百万、一千万借钱买地,希望盖房子挣得更多的钱,可能花了两千万、五千万甚至八千万,赚取一个亿。然而,互联网行业则不同,无论是百度还是腾讯,最初的投入可能只是百万或千万元,而今天的价值却是一千亿的美元!投资少,回报多,风险投资逐渐参与,创业者和他的伙伴拥有大量的股权,并被股权激励,这就是第三轮的创业模式。

      我主要谈的是第四波创业浪潮。

      如果有人怀疑第四波创业浪潮的到来,那么,请看一下最近即将上市的公司,还有移动互联网投资的趋势。我个人在中国是清晰地看到了第三波和第四波的创业浪潮。

      今天,在座的多是北京大学的精英,在这里我想提到一点:作为中国名校的精英,是否有机会在创业浪潮中扮演着一个重要的角色?

      综上所述,第一波浪潮的主要创业者是社会相对边缘的人;第二波是从体制内“下海”的人;第三波创业者中草根居多;而今天的第四波,比较典型的有许朝军,他在创新工场获得投资,是点点网的创始人,并得到巨大的成功。

      再看一下互联网,近三年创业的顶尖级的公司,其中有四分之三都是来自名校的计算机或者相关学科的学生,他们都是从一个产品和技术角度入手创业的。

      第一批创业者基本没有任何技术,第二批也没有什么技术,第三批技术含量较多,第四批不但拥有技术,而且往往是IT精英。我相信在座很多也是IT精英,第四波创业浪潮来的时候,就是在座IT精英跳入创业浪潮的最好机会。

      每一波浪潮都充满了挑战和艰辛,也会成为明天的传奇。如果再过十年,也许在座的就会有人成为了不起的公司创始人,在某某股市上市获得巨大的成功,给亿万网民带来帮助……这一切听起来有点天马行空,但是如果在十五年前问一下马化腾,他恐怕也不知道今天自己会获得这么大的成功。

      在2005-2007年间,我们忽然发现,摩尔定律没有用了。因为,产品开发基本饱和了,人民喜欢和享用的应用程序已经发明得差不多了,基本在PC可以做的,我们都做了。但是,在这个时候,苹果告诉我们:今天可以有很多的平台,我们以后有更多的机会。换句话说,摩尔定律不再是PC上面的一个词,也可以在移动互联网、手机上产生可观利润。这是一个巨大的改变。同时我们也发现iphone上第一波应用,也就是娱乐、阅读、游戏,包括社交和微博,不仅仅是很棒的平台,而且会越来越好。

      Iphone是非常好的硬件平台,有很好的娱乐体验,也可以让你通过网络四处购物。有的人担心,互联网是免费的,但是iphone和ipad可以开商店卖电子商品赚钱,慢慢地,电话可以成为付费的一个产品,不用刷卡,用电话可以付费。这些基本功能把手机的发展和商务发展对接起来了。

      我认为苹果iphone的创立,基于上述几个理由,所以带来了巨大的成功,这让用户爱上了苹果,也让开发者在苹果商店里获得收益。

      仅仅去年一年,苹果手机给开发者带来了25亿美元的利润。如此庞大的利润,在过去是不存在的。硬挤出25亿美元,卖的是软件,点燃了开发者的热情。

      在座的同学,如果是学计算机的,在20年前,你们的学长参加了金山、汉王的比赛。这些公司今天也发展得不错,但盈利不多,因为软件企业发展得不好。十年前,参加百度公司、腾讯公司的人,现在发展得都不错,因为它们的盈利点建立在信息分享娱乐和广告的基础上。

      今天,随着iphone的形成和发展,任何一个在座的同学都可以不用考虑自己加入什么样公司。因为,每个人都可以做一个优秀的软件开发者,跟三两个人在一起研制一个有趣的软件,然后卖给苹果公司。苹果公司每年给软件商25亿美金的回报。因此,每个人都可以加入创新工场或自主创业的机会,只要你能做一个好的安卓或者苹果的软件,就会得到很好的利润,而这是五年、十年前不可能做到的。

      在美国,除了使用苹果系统之外,就是安卓系统。现在安卓系统用户量已经超越了苹果。安卓系统到底有多大的市场呢?五年、十年之后,苹果会占有全球市场的20%份额,剩下的市场可能都被安卓占领。两个平台都可以赚很多钱。但如果你的软件加入苹果,苹果公司会很贪婪地与你分账;如果你加入安卓,你的研发产品会面临着盗版的境遇,同时还会受到更多公司的挑战。当然,你还可以选择加入诺基亚等一些公司。今天的移动互联网的市场,看起来有些乱,但如果你们选择在这个领域创业,五年以后创业成功了,市场环境也会净化些了。

      我们到底能创什么业?我觉得,要抓准开发方向。以美国为例,过去的四年,美国在软件上又研发了一些社交的平台,或者是商务的平台。苹果大概有1.3亿用户,安卓现在有1亿多用户,facebook有7亿用户,推特有3亿用户,如果能在这些平台中的一两家建立一种好的应用程序,就可以获得非常迅速的巨大成功。尽管表面上看,他们的成功是移动互联所带来的,但实际上却是社交带来的创业机会。

      在美国有很多的公司是纯粹地做社交的,在非常迅速的时间上得到了上百万、千万甚至上亿的用户,他们充分利用了移动设备随时随地的特征。

      2007年,美国发生了变革,中国稍微晚了一点,在过去的两年中得到发展。创新工场培育的点点软件研发了半年,已经达到了300万用户,发展得非常快,甚至与新浪微博刚开通时的发展速度相同。

      我们投资互联网广告和开发者工具,一年半覆盖了五千万终端,其中一个游戏平台,覆盖了五千万用户,“豌豆荚”在一年内安装了五千万次,整个移动在快速的成长,社交也在快速成长。如果今天能够把握住用户需求或应用,将会有巨大的机会。

      怎样的公司能够做到既有移动设备,又有社交平台?耳熟能详最好的例子就是新浪的微博和腾讯的微信,都是非常成功的产品。新浪微博接近2亿用户,两年创造了40亿元,这样的成功几乎是奇迹。腾讯微信的周成长率是20%,以此推算,它的用户很快地发展到几个亿。

      中国和美国相比,美国一部分先行者给我们带来了灵感。但是,中国有着巨大的市场。比如,美国公司用了四年,才能达到拥有千万级别的用户。然而,在中国有的公司只需两年就能达到拥有千万级别用户。为什么?这是因为中国用户的基数非常巨大。中国的互联网用户已经达到四亿,中国的移动用户是三亿,用户拥有量是美国的两倍多。

    ...

    宇宙声音:爱因斯坦预言引力波时空涟漪之谜

    2011-10-07. Category & Tags: Others Others

      据国外媒体报道,爱因斯坦在他的时空理论中预言了宇宙中存在引力波效应,但是我们目前仍然在寻找它的踪迹。引力波被认为是时空结构中的小涟漪,许多人将比喻成我们宇宙的“声音”。正如在我们日常生活中,声音是不可分割的一部分,其是我们对外界事物感知的重要途径之一。而引力波的作用也类似与此,对引力波的研究也将拓展单一望远镜对宇宙观测的范围。

    爱因斯坦的时空理论预言宇宙引力波的存在(资料图)

    天体碰撞合并事件导致引力波的模拟图

      爱因斯坦在 1918 年提出的理论中预言了引力波在宇宙中的存在,在将近 100 年后的今天,美国、欧洲、日本以及澳大利亚都在建造先进的引力波探测器来寻找它们的踪迹。

      引力波的信号在宇宙中是非常微弱的,可以说是非常难以探测,需要极高的灵敏度才有可能检测出。确切的说,引力波产生于大质量天体运动或者碰撞等事件。比如,当前天文学家对宇宙中引力波的探测较为典型的对象是两个中子星的碰撞,每一个中子星的质量都接近于我们的太阳质量,当它们相互围绕运行并最终发生碰撞合并。其内部物质运动的速度可接近光速。该过程可产生较高级别的引力波,但是其传到地球的信号就显得极为微弱了,这也是为什么我们需要极高的灵敏度去寻找引力波存在的踪迹。

      同时,此类事件在宇宙中也是非常罕见的,科学家认为其发生的概率为:每个星系在数十万至数百万年内才可能发生一次。因此,要在我们有生之年内检测到宇宙引力波信号,就必须要有足够灵敏的探测装置,以寻找数十亿光年处传播过来的引力波信号。这对科学家而言也是一个巨大的技术挑战。在这样大尺度距离上检测引力波信号,其难度可想象为:当我们在房间开着电视机、电话铃声同时也响起,而引力波信号此刻正在淡淡地触碰房间的门。

      对引力波探测不仅看克服探测对象的特性,同时也要屏蔽地球上各种数不胜数的噪声源。这些噪声源从一次地震到遥远的一个海浪,都可对引力波探测构成影响。那我们如何才能知道,我们检测到的是引力波信号,而不是一个树木倒塌或者卡车的噪音影响?

      据此,天文学家发现可以通过寻找一个潜在的电磁信号来筛选背景噪音,这个电磁信号必须伴随着引力波的传播。这就可以想象为:当我们听到门外有人敲门声时,通过猫眼看到确实有人存在。使用全程伴随传播的电磁信号来寻找引力波踪迹的发现已经发表在《自然》杂志上。作者为耶路撒冷希伯来大学教授皮兰(Tsvi Piran)与特拉维夫大学埃胡德(Ehud Nakar)博士。

      同时,他们还注意到,当两颗中子星相互围绕并发生碰撞合并时,整个过程中抛射出的物质可接近光速,并产生极高的温度以无线电波的形式辐射出来。由此产生的强烈无线电耀斑会持续数个月之久,可由射电望远镜来探测。研究人员认为:在未来搜索到这样一个无线电信号的事件肯定会发生的,并且该方法作为引力波探测的初步监测标准法。然而,预计到 2015 年之时,先进的引力波探测器才可开始运作,射电天文学家的任务就是寻找这些独特的耀斑。

      皮兰教授与埃胡德博士也在其文章中提到:在 1987 年由研究人员鲍尔(Bower)短暂探测到一次身份不明的无线电信号。现在,我们有了新方法并了解到无线电波应该具有的特征,可在今后直接检测并确认中子星双星围绕合并所产生的引力波。