天才程序員不為人知的秘密
最近在YouTube里看了一條谷歌大佬的公開演講,題目叫做The Myth of the Genius Programmer,翻譯過(guò)來(lái)就是天才程序員的秘密。這篇演講是兩位在谷歌subversion team工作的技術(shù)大佬Fitz和Ben在2009年Google IO上進(jìn)行的,他們兩人在谷歌內(nèi)部被公認(rèn)為頂級(jí)的天才級(jí)程序員。于是他們基于此做出了分享,這篇視頻給了我很多啟發(fā)。
我后來(lái)在B站里找到了克隆版本,但是很遺憾的是,這個(gè)視頻由于知名度比較低,所以現(xiàn)在只有生肉。對(duì)于英語(yǔ)不好的同學(xué)來(lái)說(shuō)可能看起來(lái)會(huì)比較吃力,所以我開辟了這個(gè)專題,希望能夠結(jié)合這篇視頻,把所有驚艷到我的觀點(diǎn)分享出來(lái),希望也能給大家一些啟發(fā)。
靈魂拷問
演講的一開始,兩位大佬先拋出了一系列靈魂拷問。
有多少人是完全獨(dú)立編程,從來(lái)不與任何人合作?有多少人希望自己完全獨(dú)立編程?
有多少人會(huì)把code review當(dāng)做是開發(fā)的必須流程之一?
有多少人不希望在別人面前犯二?
如果你已經(jīng)是一個(gè)程序員的話,我想你的回答應(yīng)該和大多數(shù)人是一致的。我們希望我們能更多地獨(dú)立完成一些事情,也不喜歡像是code review這樣繁文縟節(jié)的環(huán)節(jié),我們自己保證代碼的質(zhì)量就可以了嘛,為什么非常接受別人的審判呢?有的時(shí)候一些低級(jí)錯(cuò)誤會(huì)讓我們顯得很傻,但錯(cuò)誤在所難免不是嗎?
大佬們沒有直接給出觀點(diǎn),但他們給出了一個(gè)事實(shí),就是在Google,所有的代碼都必須經(jīng)過(guò)code review才允許合并。其實(shí)這些問題與其說(shuō)是強(qiáng)調(diào)code review的重要性,不如是拷問一下我們的心態(tài),我們對(duì)于與人合作這件事情究竟有多么的包容。
走出洞穴
在一些美劇或者是一些電影當(dāng)中,往往會(huì)被程序員描繪成躲在洞穴里的原始人。他們搗鼓著只有他們自己懂的東西,卻突然有一天拿出一款驚艷的產(chǎn)品來(lái)改變世界。
比如營(yíng)銷號(hào)經(jīng)常提到的寫出Linux系統(tǒng)內(nèi)核的Linus,還有寫出Windows系統(tǒng)的比爾蓋茨等等。很多不明就里的程序員也是這么自居的,他們的內(nèi)心也渴望著能夠成為一個(gè)這樣的原始人。但實(shí)際上事實(shí)是,世界上幾乎沒有任何一款被大眾所熟知或者是廣泛使用的軟件或者程序是由一個(gè)人寫出來(lái)的,Linus沒有寫出Linux系統(tǒng),他完成的只是系統(tǒng)內(nèi)核,Guido也沒有寫出完整的Python。這些營(yíng)銷號(hào)傳頌的故事都是錯(cuò)的。
渴望獨(dú)居,希望孤軍奮戰(zhàn)也許是眾多程序員們內(nèi)心的渴望,但這樣其實(shí)是不對(duì)的,我們不能真住在洞穴里。Ben說(shuō)由于他們負(fù)責(zé)的是subversion的開發(fā),subversion就是一款類似于Git的產(chǎn)品,用來(lái)做代碼版本控制的。他說(shuō)每年他們接收到最多的反饋就是,你們能不能做一個(gè)功能可以把我的一些提交隱藏起來(lái)?你們能不能把我的整個(gè)repo藏起來(lái),直到我覺得代碼已經(jīng)OK了才顯示?你們能不能提供把repo里代碼全部清除的功能?因?yàn)槲矣X得之前的代碼太蠢了?
要知道寫這些反饋的人都是Google的工程師,號(hào)稱是容納了全世界最多天才的地方。就這樣頂級(jí)公司的頂級(jí)工程師,居然會(huì)覺得自己的代碼蠢,也會(huì)想要隱藏起來(lái)不被他人看見。這其實(shí)某種程度上說(shuō)明了,心態(tài)和實(shí)力也許并沒有什么關(guān)系。所謂的強(qiáng)者也可能有弱弱的心態(tài)。
bus factor
大佬們沒有生硬地告訴我們,不能當(dāng)原始人,需要走出洞穴與其他人交流,再給一些雞湯什么的。他們提出了一個(gè)非常非常有意思的理論,叫做bus factor,即巴士因子。
這個(gè)理論是什么意思呢?想象你在一個(gè)開發(fā)小組當(dāng)中,這個(gè)小組有一個(gè)大牛級(jí)的工程師,所有的方案設(shè)計(jì)以及技術(shù)細(xì)節(jié)他都了如指掌。有一天他上班的時(shí)候突然被巴士撞了,再也不能來(lái)上班了。請(qǐng)問這個(gè)小組會(huì)發(fā)生什么?也許不會(huì)一夜崩塌,但肯定會(huì)遭遇巨大的困難。對(duì)你而言一定非常痛苦,無(wú)數(shù)的問題得不到解決。
能夠讓一個(gè)核心程序員離職或者是離開的并不一定是車禍,還有許許多多其他的原因。比如他準(zhǔn)備結(jié)婚了,生孩子了,中彩票了等等等等。一旦某一個(gè)核心程序員因?yàn)橐恍┧饺说脑螂x職,團(tuán)隊(duì)就陷入混亂,那么說(shuō)明這個(gè)團(tuán)隊(duì)的巴士因子很高。即大量的技術(shù)依賴都在同一個(gè)人身上,相反如果核心的人員離職并不會(huì)引起震動(dòng)和海嘯,那么這樣的團(tuán)隊(duì)的巴士因子就很低,也就是說(shuō)抗風(fēng)險(xiǎn)能力很強(qiáng)。
那怎么樣才能降低團(tuán)隊(duì)內(nèi)部的巴士因子呢?大佬們沒有明說(shuō),但答案已經(jīng)就在眼前了,就是要走出洞穴,多多和其他同事交流,彼此做code review,知道對(duì)方都在做一些什么。
放下自我
單槍匹馬是做不出優(yōu)秀的產(chǎn)品的,同樣單打獨(dú)斗也不可能成為行業(yè)中的大佬。我們向上攀登和成長(zhǎng)的過(guò)程必然伴隨著與他人的交流和互相學(xué)習(xí),我們不要懼怕這一點(diǎn)。
Fitz舉了Apache開源社區(qū)的例子,一群互不相識(shí)的工程師聚集在一起,完成了一款偉大的產(chǎn)品。但是在這個(gè)過(guò)程當(dāng)中,人是比代碼更重要的東西。這些代碼不是憑空產(chǎn)生的,突然憑空得來(lái)一堆代碼并沒有任何意義。有意義的是一群工程師的靈感互相碰撞,互相啟發(fā),彼此都覺得自己在做一件偉大的事情,彼此都為自己所做的事情為傲,在這個(gè)過(guò)程當(dāng)中,大家都放下了自我。
放下自我的英文他用的是drop the ego,ego有自我和自尊的意思。我們放下自我,才可以接納別人的想法,才可以融入一個(gè)集體或者是社區(qū)當(dāng)中,才能為了當(dāng)下所做的事情驕傲。
尾聲這一篇作為開篇,主要講了這么幾點(diǎn)。人們想象中單打獨(dú)斗完成偉大作品的情況幾乎不不存在。偉大的產(chǎn)品往往都是一個(gè)團(tuán)隊(duì)或者是一群人共同完成的。天才級(jí)別的程序員往往也不是一個(gè)人閉門造成就能成長(zhǎng)成的,在這過(guò)程當(dāng)中也少不了和團(tuán)隊(duì)以及其他人的交流和學(xué)習(xí)。當(dāng)我們置身在一個(gè)項(xiàng)目或者是團(tuán)隊(duì)中的時(shí)候,要注意團(tuán)隊(duì)里的巴士因子,也要放下自我,為了當(dāng)下做的事情自豪,enjoy這個(gè)過(guò)程。
深刻的道理往往是樸實(shí)無(wú)華的,如果大家待過(guò)職場(chǎng)就會(huì)知道,如今的職場(chǎng)現(xiàn)狀主旋律就是浮躁。人人都在想著更好的機(jī)會(huì),更好的發(fā)展,能夠?qū)W⒀矍?,專注團(tuán)隊(duì)成長(zhǎng)學(xué)習(xí),專注手中事情的人少之又少。但我相信,只有這樣樸素追求的人才能把這條路長(zhǎng)久地走下去,才能成為別人眼中的天才程序員。
最后,我把B站的鏈接放在原文當(dāng)中,大家可以點(diǎn)擊閱讀原文跳轉(zhuǎn)。
本文轉(zhuǎn)載自微信公眾號(hào)「TechFlow」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系TechFlow公眾號(hào)。
















 
 
 



 
 
 
 