Google 的12条开发程序的准则

2008年3月9日

这是从一张ppt的slide(需穿墙访问)里透露出的 Google 的12条开发程序的准则,挺有借鉴的。简单翻译下,译文括号内为我的感想:

原文:

1. All developers work out of a ~single source depot; shared infrastructure!
2. A developer can fix bugs anywhere in the source tree.
3. Building a product takes 3 commands (”get, config, make”)
4. Uniform coding style guidelines across company
5. Code reviews mandatory for all checkins
6. Pervasive unit testing, written by developers
7. Unit tests run continuously, email sent on failure
8. Powerful tools, shared company-wide
9. Rapid project cycles; developers change projects often; 20% time
10. Peer-driven review process; flat management structure
11. Transparency into projects, code, process, ideas, etc.
12. Dozens of offices around world => hire best people regardless of location

译文:
1:所有程序员基于一个 source depot 工作,所以整个架构是共享的。
2:有了第一条,程序员可以修改任何一颗代码树上的 bug。
3:编译执行一个项目只要三条命令:get, config, make(o, my god! 节省了不知多少时间)
4:整个公司使用统一的编写代码的格式。(我们公司5个人各自的代码风格已经乱的一团糟了)
5:对所有的check in 强制要求 code review(以前在微软的经历是,code review一直不是很被重视)
6:程序员写Unit test成一种习惯(不写Unit test,developer 和 tester 就扯皮去吧)
7:Unit test始终被运行,遇到问题发封 email 给你
8:强大的工具,要在全公司分享
9:快速的项目开发周期;开发人员经常变更项目;开发人员有20%的自由支配时间。(不知道这20%到底指的是什么,可能理解的不对)
10:(这句翻译不来)同伎评审,扁平管理(感谢网友page)
11:项目,代码,过程,点子等等都是透明的
12:全世界都有很多办公室,用最棒的人,不管他们在哪里

另一篇译文

, ,

最近一些琐碎的想法

2008年3月8日

记录下最近的一些想法,有些是自己经历的,有些是看别人的故事产生的想法。

当你感到很痛苦的时候,很可能你正在成长。
当你觉得快要坚持不住的时候,请再坚持5分钟。
当你觉得难度很大,举步维艰时,可能离曙光已不远。

创业者比普通职员多加的一层痛苦是,普通职员如果承受不住压力大不了辞职不干,创业者则无法轻言放弃。这牵连到商业关系,钱,还有最强大的:不认输。所以压力一大,职业经理人逃的最快。

最大的疲劳不是肉体上的,而是精神上的。所谓心累。

我哥说,如果不具备强大的信念,做企业真是不如打工。

在林森池看来,资本家比企业家更优越。”现今的社会不同了,打工仔一样可以成为资本家,与成功企业一同成长,而且活得比企业家轻松。”如果先做了资本家,恐怕就受不了做企业的那份苦。

张亮说,”中国人没有商业教育”。感觉国内的商业环境还很不成气候,政策性风险太不可预测了。拿互联网行业来说,时不时的来个条例,说所有视频网站都必须有国有股东参股,谁受得了。还有众所周知的GFW,严重抑制创新。

巴菲特说他在十岁的时候,就把他那个城市图书馆里所有关于投资的书都看过了。我们这边是机场火车站里各种打者成功学旗号的书。我们商业的传承才刚刚开始。第一代存活下来并且成功的商人如王石、冯仑、柳传志等开始出书传道授业,是个开始。欧洲有句俗话,一个贵族的诞生,需要三代人财富的积累。我们过去浪费了许多,现在开始慢慢积累了。推荐冯仑的《野蛮生长》一书。

《投名状》讲的是几个兄弟一起干事业的故事,是个悲剧。兄弟能不能一起做事业?我也没有答案。

关于创始人的角色定位,来看看eBay和Yahoo。eBay的创始人Pierre Omidyar把企业交给职业经理人打理,自己一边玩去了。Yahoo的创始人大家听到比较多的是华裔的杨志远,虽然从台前到幕后又到台前可以比拟Steve Jobs,Yahoo却远没有Apple风光。另一位创始人David Filo则还在Yahoo写程序,只是区别在于身价数亿美元。这种生活让人羡慕。

,

眼药水瓶的设计

2008年3月4日

最近感觉眼睛不舒服,去了趟医院,医生开了两瓶眼药水。一瓶蓝的,一瓶白的。

蓝的瓶身上有两处凹陷的地方,大小和手指相近,方便按压。瓶身是塑料的,按起来很省力。瓶口出水也很顺畅。一滴就是一滴。

白的瓶身也是塑料的,但没有为手指按压做专门的设计。瓶身的塑料很硬,按下去很费力。瓶口出水也不顺畅,每次总要先把瓶口的气泡挤出才能出水。

上网查了下,蓝的那瓶是日本的参天制药株式会社生产的,是日本眼科医药的顶尖制造商。

白色那瓶是国内产的。

,

两个小故事

2008年3月1日

昨天同学聚会,遇到两则有趣的事情。

路边等人的时候,看到一小贩在摆摊卖娃娃。15元2个,2个娃娃是一样的,放在一个袋子里,这样就没法只买一个了。不一会儿功夫卖掉好多。

一起吃饭的时候,一同学说起了一个他自己经历的故事:他到城隍庙买了些材料,回家自己手工做成玫瑰花,每束花里面放一个小熊,情人节那天到来福士门口卖,300元一束,他的成本大约100元一束。来福士里有卖差不多的,不过不是小熊而是费列罗巧克力,要98元一朵,一束大约要卖到900元。情侣看他只卖300元,顿时感觉很便宜,不到一个小时他就卖掉11束,然后就和女朋友玩去了。

,

K歌时的点歌顺序能否改进一下?

2008年2月29日

K歌的时候,点的歌曲是顺序排列的,所以常常导致某人连续唱了多首歌喉咙受不了,其他的人却迟迟等不来自己点的歌。手动插歌是一个方法,但是否程序上可以设计的更灵活点?

比如自动的一个隔一个的错开,或者可以手动选择插入到第几个位置,或者把歌随机插到某个位置。

马上要去K歌了,想到这个问题。闪人了。

鼠年到

2008年2月7日

本命年了,希望一切顺利,平平安安就好。

,

就要过年了

2008年2月5日

姐姐刚刚生了一女孩子,抓住了猪尾巴。如果把表和堂两边的兄弟姐妹加在一起排排座,我排在第四。哥哥的女儿已经一岁多了,小丫头煞是好看,我买了个波浪鼓,过年时送她。另一姐姐也已经进入了谈婚轮嫁的阶段了,所以家里人自然就把目光聚焦在我身上。若今年年夜饭上,大家还拿我开涮,我会送上四字金言:欢迎插队。

,

为什么棒球比赛很精彩

2008年1月31日

原创:刀马

转载请注明出处

最近迷上了棒球,下载了很多棒球的录像看。看阿看的,就在想,为什么棒球那么让人着迷。前两天终于想通了,待我慢慢说来。

竞技体育赛事,最终的目的是分出胜负,当然方法各有不同。

一类,是在规定的时间内,谁的得分多,谁就获胜,比如篮球的四节时间各为12分钟,足球的90分钟。另一类,是规定一个分数,谁先得到这个分数,谁就获胜,比如网球,排球,都有局分和盘分的约束。为了讨论方便,这里暂且排除平局的情况。

对于第一类,当比赛临近结束的时候,如果比分很接近,就会达到高潮。但如果比赛快结束的时候,双方比分差距悬殊,那么就会一下子失去吸引力。所以篮球比赛就会有所谓的垃圾时间,落后的一方觉得无论怎么努力也赢不了,因为时间在那里限制着。而足球比赛上常看到的是领先的一方故意拖延时间,因为时间就是对方取胜的筹码,而时间这种资源本身是双方共用的,所以对于落后的一方就很不利。

对于第二类,时间虽然不是明显的障碍,但是由于“得一分”本身的时间大多是个波动不剧烈的变量,所以间接的还是受时间的影响。而且,这种规则下的比赛还会出现时间的“坍塌”,就是说,当某一方很强大时,很快就达到了规定的分数,比赛就结束了。一方的强大的得分能力剥夺了另一方追分的权利。典型的例子是某一年的上海网球大师杯,由于大师们实力差的太大,导致比赛草草收场,观众怨声载道,无奈之下主办方承诺凭着当年的票根买第二年的门票可以打6折。

这些都是铺垫。现在来看棒球。棒球没有规定在多少时间内完赛,所以显然不是第一类。棒球是有局的设置的,常规比赛是9局,攻守各半局。但是棒球没有说某一方达到多少分就获胜。所以棒球也不是第二类。

这里有必要简单介绍一下棒球的规则,了解的同学可以跳过。

棒球比赛,两队攻守互相交替进行。守备的一方以“振”出对方打击者为目的,每一局振出三位打击者,攻守互换。这里“振”的含义,可以是投手投出三只好球,把打击者三振出局,也可以是打击者挥棒击出球,但球被防守一方接杀出局,或者触杀出局,或者是球比打击者先到下一垒包。对于进攻的一方,就要反着来,就是不要被“振”。可能的方法是,投手投出四只坏球,或者比击出的球先到达下一垒包,这就是安打,或者盗垒。当进攻一方的跑垒员跑回本垒,就是得一分。这里只是粗略的介绍一下,详细规则请见这里

这样讲的还是不够形象,换个角度来看。每一局,进攻方都有三次被振的机会,只要你有能力尽可能守住这三次机会,那么想得多少分就得多少分。

这么一看,让我突然想到,这个和金融里面的期权很相似。

每一个半局,都可以看作是防守方出售给进攻方三份买方期权,我暂且起个名字叫“上垒期权”。每被振出一名打击者,就算行权了一份“上垒期权”,等于是剥夺了一次上垒的权利。对于进攻者来说,损失是有限的,但获利可能性是无限的。

再仔细思考一下,成功上垒本身并不是直接触发得分,成功上垒意味着具备了得分的能力,等于一张“上垒期权”可以换取不受数量限制的“得分期权”,我把一张“得分期权”定义为垒上有一人,那么也就对应着一个得分,那么这个模型就是关于期权的期权。有点复杂啊,不过在这里只要了解期权的概念也足够了。

期权在金融学中分金融期权和实物期权。金融期权是可以在市场上交易的那种,棒球应该用实物期权来解释更好点。翻开金融学教材中的关于实物期权的一部分可以看到,信息和企业自身的能力是实物期权两个重要的因素。

信息越多,不确定性就越少,也就越容易获得成功。在棒球中,投手属于信息的一部分,越到后面的局数,打击者对于投手投球的套路了解得就越多,打击率也就可能越高。所以当投手连续被打击者抓到安打时,就要更换投手,增加新的信息,混淆打击者的判断。

打击者本身的能力体现在高长打率和高本垒打率,当打击者具备这个能力时,就会出现对打击者有利的局面。所以投手如果遇到对方很猛的DH(指定代打)时,难免不绷紧神经。

由于是防守方出售买方期权,防守方的风险是巨大的,所以一个好的投手对于一直球队来说及其重要。

再仔细想想还有许多相似性:每半局的三张期权是否可以看作到期时间各不相同的期权呢?那么就是有时间价值的区别了?是否可以参照期权的定价公式,推出一个球员的薪资公式呢?好吧,我得承认我有点力不从心了,呼唤金融达人给出详细解释。

那么为什么应用了期权的棒球比赛会更精彩呢?因为期权在金融里面是用来处理不确定性的最好的方法,而不确定性正是体育比赛最大的魅力。棒球正是运用了期权模型来构建其规则,不确定性就被充分发挥出来了。

再回头看最开始提到的其他比赛的判胜负的情况,就会发现,如果比赛到了最后半局,即使一方大比分领先也不敢大意,别忘了对方得分的机会理论上是无限的。而且也不会发生“时间坍塌”的情况,因为一方得分的能力不会影响到另一方追分的能力,双方的权利是独立的,就看你抓不抓的住。

最后让我们来看一下棒球比赛中经常出现的场景吧。

进攻一方在某半局势头很猛,现在三个垒上都有人,下一棒只要击出安打即可得分。结果打者被三振出局,这半局就无功而返。

某一方慢悠悠的每一局得一点分,看这趋势今天球风很顺,突然某个半局被轰出一个全垒打,更遭的是垒上有人,那么可能一下子领先的优势就没有了。

有时只要再振掉对方一名打者就能获胜,偏偏就是振不掉。最堪称经典的就是04年的洋基和红袜的惊天大逆转,有兴趣的话可以搜索一下。

我现在是波士顿红袜队的球迷,理由么。。。他们刚刚获得了07年世界大赛的冠军!

参考:周洛华,《金融工程学》

, ,