最近在YouTube里看了一条谷歌大佬的公开演讲,题目叫做The Myth of the Genius Programmer,翻译过来就是天才程序员的秘密。这篇演讲是两位在谷歌subversion team工作的技术大佬Fitz和Ben在2009年Google IO上进行的,他们两人在谷歌内部被公认为顶级的天才级程序员。于是他们基于此做出了分享,这篇视频给了我很多启发。
我后来在B站里找到了克隆版本,但是很遗憾的是,这个视频由于知名度比较低,所以现在只有生肉。对于英语不好的同学来说可能看起来会比较吃力,所以我开辟了这个专题,希望能够结合这篇视频,把所有惊艳到我的观点分享出来,希望也能给大家一些启发。
灵魂拷问
演讲的一开始,两位大佬先抛出了一系列灵魂拷问。
有多少人是完全独立编程,从来不与任何人合作?有多少人希望自己完全独立编程?
有多少人会把code review当做是开发的必须流程之一?
有多少人不希望在别人面前犯二?
如果你已经是一个程序员的话,我想你的回答应该和大多数人是一致的。我们希望我们能更多地独立完成一些事情,也不喜欢像是code review这样繁文缛节的环节,我们自己保证代码的质量就可以了嘛,为什么非常接受别人的审判呢?有的时候一些低级错误会让我们显得很傻,但错误在所难免不是吗?
大佬们没有直接给出观点,但他们给出了一个事实,就是在Google,所有的代码都必须经过code review才允许合并。其实这些问题与其说是强调code review的重要性,不如是拷问一下我们的心态,我们对于与人合作这件事情究竟有多么的包容。
走出洞穴
在一些美剧或者是一些电影当中,往往会被程序员描绘成躲在洞穴里的原始人。他们捣鼓着只有他们自己懂的东西,却突然有一天拿出一款惊艳的产品来改变世界。
比如营销号经常提到的写出Linux系统内核的Linus,还有写出Windows系统的比尔盖茨等等。很多不明就里的程序员也是这么自居的,他们的内心也渴望着能够成为一个这样的原始人。但实际上事实是,世界上几乎没有任何一款被大众所熟知或者是广泛使用的软件或者程序是由一个人写出来的,Linus没有写出Linux系统,他完成的只是系统内核,Guido也没有写出完整的Python。这些营销号传颂的故事都是错的。
渴望独居,希望孤军奋战也许是众多程序员们内心的渴望,但这样其实是不对的,我们不能真住在洞穴里。Ben说由于他们负责的是subversion的开发,subversion就是一款类似于Git的产品,用来做代码版本控制的。他说每年他们接收到最多的反馈就是,你们能不能做一个功能可以把我的一些提交隐藏起来?你们能不能把我的整个repo藏起来,直到我觉得代码已经OK了才显示?你们能不能提供把repo里代码全部清除的功能?因为我觉得之前的代码太蠢了?
要知道写这些反馈的人都是Google的工程师,号称是容纳了全世界最多天才的地方。就这样顶级公司的顶级工程师,居然会觉得自己的代码蠢,也会想要隐藏起来不被他人看见。这其实某种程度上说明了,心态和实力也许并没有什么关系。所谓的强者也可能有弱弱的心态。
bus factor
大佬们没有生硬地告诉我们,不能当原始人,需要走出洞穴与其他人交流,再给一些鸡汤什么的。他们提出了一个非常非常有意思的理论,叫做bus factor,即巴士因子。
这个理论是什么意思呢?想象你在一个开发小组当中,这个小组有一个大牛级的工程师,所有的方案设计以及技术细节他都了如指掌。有一天他上班的时候突然被巴士撞了,再也不能来上班了。请问这个小组会发生什么?也许不会一夜崩塌,但肯定会遭遇巨大的困难。对你而言一定非常痛苦,无数的问题得不到解决。
能够让一个核心程序员离职或者是离开的并不一定是车祸,还有许许多多其他的原因。比如他准备结婚了,生孩子了,中彩票了等等等等。一旦某一个核心程序员因为一些私人的原因离职,团队就陷入混乱,那么说明这个团队的巴士因子很高。即大量的技术依赖都在同一个人身上,相反如果核心的人员离职并不会引起震动和海啸,那么这样的团队的巴士因子就很低,也就是说抗风险能力很强。
那怎么样才能降低团队内部的巴士因子呢?大佬们没有明说,但答案已经就在眼前了,就是要走出洞穴,多多和其他同事交流,彼此做code review,知道对方都在做一些什么。
放下自我
单枪匹马是做不出优秀的产品的,同样单打独斗也不可能成为行业中的大佬。我们向上攀登和成长的过程必然伴随着与他人的交流和互相学习,我们不要惧怕这一点。
Fitz举了Apache开源社区的例子,一群互不相识的工程师聚集在一起,完成了一款伟大的产品。但是在这个过程当中,人是比代码更重要的东西。这些代码不是凭空产生的,突然凭空得来一堆代码并没有任何意义。有意义的是一群工程师的灵感互相碰撞,互相启发,彼此都觉得自己在做一件伟大的事情,彼此都为自己所做的事情为傲,在这个过程当中,大家都放下了自我。
放下自我的英文他用的是drop the ego,ego有自我和自尊的意思。我们放下自我,才可以接纳别人的想法,才可以融入一个集体或者是社区当中,才能为了当下所做的事情骄傲。
尾声这一篇作为开篇,主要讲了这么几点。人们想象中单打独斗完成伟大作品的情况几乎不不存在。伟大的产品往往都是一个团队或者是一群人共同完成的。天才级别的程序员往往也不是一个人闭门造成就能成长成的,在这过程当中也少不了和团队以及其他人的交流和学习。当我们置身在一个项目或者是团队中的时候,要注意团队里的巴士因子,也要放下自我,为了当下做的事情自豪,enjoy这个过程。
深刻的道理往往是朴实无华的,如果大家待过职场就会知道,如今的职场现状主旋律就是浮躁。人人都在想着更好的机会,更好的发展,能够专注眼前,专注团队成长学习,专注手中事情的人少之又少。但我相信,只有这样朴素追求的人才能把这条路长久地走下去,才能成为别人眼中的天才程序员。
最后,我把B站的链接放在原文当中,大家可以点击阅读原文跳转。