[翻譯]傳說中的10倍效率程序員

原文鏈接:http://antirez.com/news/112
infoQ翻譯:http://www.infoq.com/cn/news/2017/04/Redis-father-10x?utm_source=infoq&utm_medium=popular_widget&utm_campaign=popular_content_list&utm_content=homepage

傳說中的10x程序員是指那些工作效率超過普通程序員10倍的人褪子。我們所說的普通程序員可以勝任一個他的本職工作苛败,但是卻沒有10x程序員的神奇能力。更準確一些词爬,我們所說的“普通程序員”是指那些可以達到業(yè)內(nèi)平均水平的編程人員永乌。

編程社區(qū)中對于這樣的“怪物”是否存在吨述,有著很大的爭議:部分人認為10x程序員根本就不存在,而其他的人認為不僅僅他是存在的歧寺,甚至還能找到100x程序員燥狰。

如果你認為編程是一種“線性”的工作棘脐,那毫無疑問10x程序員是不可能存在的,就像不可能有人能比其他人跑得快10倍一樣龙致,也不可能有建筑工人在同一時間內(nèi)比別人多干10倍的活蛀缝。然而編程是一種特殊的設(shè)計工作。即使一個程序員從來沒有刻意訓練過編程方面的架構(gòu)設(shè)計目代,在實現(xiàn)功能的過程中也需要一些簡單的設(shè)計屈梁。

在我看來,設(shè)計和實現(xiàn)程序都不是“線性”能力榛了,它是由經(jīng)驗在讶,編碼能力,知識霜大,對無用部分的甄別能力等這一系列非線性優(yōu)勢組合而成的构哺,尤其是當一個程序員同時負責設(shè)計和實現(xiàn)時,這個現(xiàn)象就更加明顯战坤。任務越是目標明確曙强,10x程序員就月能釋放他的潛力來盡快達成目標。如果手上的工作非常死板途茫,比如規(guī)定了必須要用什么工具來用什么方式完成任務旗扑,那么10x程序員的高效能力則會被削弱。他們始終可以在“局部地區(qū)”通過設(shè)計完成更好的工作慈省,然而卻不能用更直接的方法來完成目標(甚至是拋棄現(xiàn)有工程的某些部分)∶吖剑看上去最終達成的目標是相同的边败,但是效率卻大打折扣。

在二十年的職業(yè)生涯中捎废,我關(guān)注著其他和我一起協(xié)作的程序員笑窜。他們在我制定的目標下一起完成一些任務,例如給Redis打補丁等等登疗。同時許多人告訴我排截,他們認為我是一名十分高效的程序員。雖然我并不是一名工作狂辐益,但我也經(jīng)常會那自己來作為快速編碼的例子來介紹給別人聽断傲。

下面列舉的品質(zhì)是我認為的高產(chǎn)程序員的獨特品質(zhì)。

分解編程任務的能力:完成各個子任務
將程序的分解為各種子任務(函數(shù)智政,算法或者其他)认罩,是程序員最顯著的能力之一。然而令人震驚的是续捂,并沒有那么多人使用最基本的變成結(jié)構(gòu)來有效地實現(xiàn)一些功能垦垂。我觀察到一些連最簡單的排序算法都不會的“低能”程序員宦搬,卻比那些受過良好理論教育(但缺乏實踐)的程序員完成更多的工作。

經(jīng)驗:模式匹配
這里我說的經(jīng)驗是指對于那些經(jīng)常出現(xiàn)的任務的一系列解決方案劫拗。一名有經(jīng)驗的程序員事實上知道如何去將問題分解间校。這樣就避免了很多的設(shè)計工作并且可以避免出現(xiàn)簡化問題時出現(xiàn)的最大問題——設(shè)計錯誤。

專注:實際時間VS假想時間
拋開時間的利用質(zhì)量页慷,只關(guān)注寫代碼所話費的時間憔足,都是耍流氓。注意力無法集中可能由外因和內(nèi)因兩方面導致差购。內(nèi)因包括拖延癥四瘫,或者對手頭的項目不感興趣(你無法好好的做自己不喜歡的事情),缺乏鍛煉或者身體狀況不佳欲逃,以及缺乏睡眠找蜜。外因則是頻繁的會議,工作環(huán)境不佳稳析,協(xié)作者的頻繁打斷洗做。所以人們會很自然地想要提高注意力的集中程度,以及去減少打斷的次數(shù)來創(chuàng)造一個沒有邊界效應的編程環(huán)境彰居。有時候為了可以更好地集中注意力诚纸,一些極端的方法也是必要的。比如我只在固定的時間點去閱讀郵件并且不會進行回復陈惰。

設(shè)計方面的犧牲:舍棄5%來贏得90%
項目的非基本功能會大大增加設(shè)計的復雜度畦徘,或者導致另外一個重要的目標難以達成,這是因為由于不重要的目標和基本功能之間總是存在著牽連抬闯,所以這么做會使任務變得非常復雜井辆。所以設(shè)計者必須要意識到,項目中哪些部分是投入和產(chǎn)出不成正比的溶握。如果一個工程是為了將輸出最大化杯缺,那我們只需要將精力集中在與之相關(guān)的方面,這樣就可以在合理的時間內(nèi)完成它睡榆。舉個例子萍肆,當我們設(shè)計消息隊列 Disque時,我意識到最值得付出的功能是將消息組織排序胀屿,從而其他的各個方面就會有實質(zhì)上的進步塘揣,包括可用性,請求語言和客戶端交互碉纳,簡潔性和性能勿负。

簡潔性
這顯然是成敗的分界點。為了理解簡潔性是什么,我們有必要去找到復雜性產(chǎn)生的原因奴愉。我認為兩個導致復雜性的主要原因是不愿意犧牲部分設(shè)計琅摩,以及設(shè)計上的錯誤積累。
試想一下锭硼,在設(shè)計的過程中每一次我們都誤入歧途房资,最終會使我們離最優(yōu)解越來越遠。最初的設(shè)計錯誤并不會讓這整個系統(tǒng)被重新設(shè)計檀头,而是會導致下一次使用另一個復雜的解決方案來掩蓋它轰异。從而整個工程會變得越來越復雜,并且在每一次錯誤的設(shè)計之后變得更加低效暑始。
在腦海中進行許多細碎的“概念驗證”后搭独,大量的簡介設(shè)計會在程序員的心里浮現(xiàn),從而開始構(gòu)建靈活而又有效的解決方案并最終達到簡潔性廊镜。之后牙肝,經(jīng)驗和個人設(shè)計能力將會進一步提升設(shè)計和找到合理的子任務解決方案。
然而每當需要用到復雜的解決方案時嗤朴,就需要花大量的時間來構(gòu)思如何避免它配椭,直到實在沒有其他可以代替的方案之后才能繼續(xù)前行。

完美主義雹姊, 為了偏袒設(shè)計而削弱生產(chǎn)力
完美主義有兩種:追求工程師文化中理論上的最強性能股缸,或者追求個人特色。我認為這兩種都將阻礙程序員的生產(chǎn)力吱雏。完美主義和害怕外部的評價導致了設(shè)計上的偏袒敦姻,從而導致最終只是根據(jù)個人意愿和性能指標來作出設(shè)計方案,健壯性歧杏、簡潔性和按時交付都不會被考慮在內(nèi)替劈。

學識:某些理論知識是很有用的
如果了解數(shù)據(jù)結(jié)構(gòu),知道計算的極限性能得滤,以及對于某些模型非差給你適用的算法,那么在面對復雜問題時就能給出非常合適的設(shè)計盒犹。你并不需要在各個方面都十分精通懂更,但是知道問題的多種解決方案確實很有必要的。例如我們在設(shè)計上做出部分妥協(xié)(接受一定比例的錯誤)和并且預估了總體的基數(shù)急膀,那么兩者結(jié)合就可以避免在一個數(shù)據(jù)流中進行統(tǒng)計特定目標這個問題上沮协,給出一個復雜低速和內(nèi)存使用率低的方案。

了解底層原理
即使在使用高級語言的時候卓嫂,我們?nèi)匀粫驗椴焕斫庥嬎銠C的運行原理而導致編寫出來的程序有些問題慷暂。這會導致我們必須推翻之前的設(shè)計,因為在某些工具或者算法上存在根本性的錯誤。深入理解C語言行瑞,并清楚的知道CPU和內(nèi)核的工作原理奸腺,可以避免在工程后期發(fā)現(xiàn)一些根本上的問題。

調(diào)試技巧
尋找bug總是會花掉很多時間血久。所以如果你善于發(fā)現(xiàn)bug出現(xiàn)的原因突照,知道如何將它修復,并且更傾向與寫那些簡短的無誤代碼氧吐,將會大大提高你的編程效率讹蘑。

對我而言,擁有上述品質(zhì)的人能到達10倍的產(chǎn)出一點也不奇怪筑舅。這些品質(zhì)讓程序員可以給出一個擁有靈活的模型的好設(shè)計座慰,并且比其他的方案更加的簡潔。我認為簡潔性就是一種“投機取巧的編程”翠拣。簡而言之版仔,就是在開發(fā)的每個階段選擇性地實現(xiàn)一些功能,以最小化的付出為用戶帶來最大化的影響心剥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邦尊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子优烧,更是在濱河造成了極大的恐慌蝉揍,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畦娄,死亡現(xiàn)場離奇詭異又沾,居然都是意外死亡,警方通過查閱死者的電腦和手機熙卡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門杖刷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人驳癌,你說我怎么就攤上這事滑燃。” “怎么了颓鲜?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵表窘,是天一觀的道長。 經(jīng)常有香客問我甜滨,道長乐严,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任衣摩,我火速辦了婚禮昂验,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己既琴,他們只是感情好占婉,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呛梆,像睡著了一般锐涯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上填物,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天纹腌,我揣著相機與錄音,去河邊找鬼滞磺。 笑死升薯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的击困。 我是一名探鬼主播涎劈,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼阅茶!你這毒婦竟也來了蛛枚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤脸哀,失蹤者是張志新(化名)和其女友劉穎蹦浦,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撞蜂,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡盲镶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝌诡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溉贿。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖浦旱,靈堂內(nèi)的尸體忽然破棺而出宇色,到底是詐尸還是另有隱情,我是刑警寧澤颁湖,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布代兵,位于F島的核電站,受9級特大地震影響爷狈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裳擎,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一涎永、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦羡微、人聲如沸谷饿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽博投。三九已至,卻和暖如春盯蝴,著一層夾襖步出監(jiān)牢的瞬間毅哗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工捧挺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虑绵,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓闽烙,卻偏偏與公主長得像翅睛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子黑竞,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,527評論 25 707
  • 本文把程序員所需掌握的關(guān)鍵知識總結(jié)為三大類19個關(guān)鍵概念捕发,然后給出了掌握每個關(guān)鍵概念所需的入門書籍,必讀書籍很魂,以及...
    dle_oxio閱讀 11,083評論 6 244
  • 文字/攝影:若木菡 天高云淡碧江空扎酷,遠山如黛蔥蘢。遍林柔漫染輕紅莫换,寫意秋風霞玄。 促織金蟬聲透,菊花玉桂香濃拉岁。陌阡累累...
    若木菡閱讀 542評論 27 29
  • 最近小編有聽說一個重磅消息喊暖,星巴克的終于開通了支付寶付款啦惫企!所謂身在馬云爸爸支付寶的家鄉(xiāng)杭州,你不能用支付寶付款怎...
    知食百科閱讀 260評論 0 0
  • 原文鏈接: 插入間隔 問題:給定一組非重疊和排序的區(qū)間陵叽,在區(qū)間內(nèi)插入一個新的區(qū)間(如果需要的話合并)狞尔。 思想:每當...
    _凌浩雨閱讀 400評論 0 1