[翻譯]傳說中的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程序員的神奇能力。更準確一些,我們所說的“普通程序員”是指那些可以達到業內平均水平的編程人員。

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

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

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

在二十年的職業生涯中,我關注著其他和我一起協作的程序員。他們在我制定的目標下一起完成一些任務,例如給Redis打補丁等等。同時許多人告訴我,他們認為我是一名十分高效的程序員。雖然我并不是一名工作狂,但我也經常會那自己來作為快速編碼的例子來介紹給別人聽。

下面列舉的品質是我認為的高產程序員的獨特品質。

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

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

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

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

簡潔性
這顯然是成敗的分界點。為了理解簡潔性是什么,我們有必要去找到復雜性產生的原因。我認為兩個導致復雜性的主要原因是不愿意犧牲部分設計,以及設計上的錯誤積累。
試想一下,在設計的過程中每一次我們都誤入歧途,最終會使我們離最優解越來越遠。最初的設計錯誤并不會讓這整個系統被重新設計,而是會導致下一次使用另一個復雜的解決方案來掩蓋它。從而整個工程會變得越來越復雜,并且在每一次錯誤的設計之后變得更加低效。
在腦海中進行許多細碎的“概念驗證”后,大量的簡介設計會在程序員的心里浮現,從而開始構建靈活而又有效的解決方案并最終達到簡潔性。之后,經驗和個人設計能力將會進一步提升設計和找到合理的子任務解決方案。
然而每當需要用到復雜的解決方案時,就需要花大量的時間來構思如何避免它,直到實在沒有其他可以代替的方案之后才能繼續前行。

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

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

了解底層原理
即使在使用高級語言的時候,我們仍然會因為不理解計算機的運行原理而導致編寫出來的程序有些問題。這會導致我們必須推翻之前的設計,因為在某些工具或者算法上存在根本性的錯誤。深入理解C語言,并清楚的知道CPU和內核的工作原理,可以避免在工程后期發現一些根本上的問題。

調試技巧
尋找bug總是會花掉很多時間。所以如果你善于發現bug出現的原因,知道如何將它修復,并且更傾向與寫那些簡短的無誤代碼,將會大大提高你的編程效率。

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

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