那些優秀程序員身上的共同特質

你是否發現,在我們身邊的那些優秀程序員身上總是能找到一些共同的特質,這些特質并非與生俱來,但卻逐漸在他們身上留下深深的烙印,這也使得他們變得與眾不同,更成為我們心目中的佼佼者。


至少深入理解一門編程語言

學習編程和學駕駛很像,你很容易就能學會駕駛,比如,經過一個月的駕校培訓,你就能獲得駕照,但要真正成為一名優秀的司機,卻必須經過長時間的駕駛實踐才行,這將幫助你在頭腦中形成一套完整意識體系以應對駕駛中所遇到的不同情況。編程也是一樣,當程序員們作出那些優秀的程序設計時,看似自然,但它的背后卻是程序設計者們經過長時間編程實踐之后所構建起來的編程思維。

優秀的程序員不僅熟練掌握一門編程語言的語法和語義,他們還會

  • 掌握這門語言的使用哲學,包括那些最佳實踐、設計模式以及它們背后所蘊含的原則
  • 深入理解語言的特性,每一門語言都有各自的特性,而很多新的特性還會被不斷加入到語言的最新版本之中,充分了解這些特性,能夠幫助程序員更準確、高效地使用它們
  • 了解語言的局限,任何程序語言都會有其局限性,這會讓我們在解決某些問題時產生麻煩,我們需要了解這些限制,并知道如何使用一些方法或技巧去繞過這些限制并解決問題。
  • 理解語言的缺陷,有些語言在設計之初就存在一些先天不足,比如JAVA語言中的日期處理,那些原始數據類型,可能會給你帶來一些疑惑,了解這些缺陷,并盡可能在編程中避免涉及這些缺陷,會讓你的程序在日后更易于維護。
  • 了解語言的未來,有些編程語言如新生兒般茁壯成長,如Swift、Go,有些則如青壯年般看上去年富力強,比如Java、PHP、Python,而有些則已進入暮年,不再受到關注,比如VB、Pascal。優秀的程序員能很快掌握一門新的編程語言,但只有了解語言的發展方向,才能讓你更有信心地去應對未來。

看上去有些“傻”

聽起來或許有些可笑,但那些出色的程序員往往容易給人留下“傻”的印象。他們對某些事物的看法可能顯得單純而幼稚,他們的待人接物經常會鬧出笑話。但這些并不會阻礙他們成為一名優秀的程序員,因為“傻”——知道自己不夠聰明,反而能使他們變得更加強大。

  • 不會停止學習的腳步:認為自己不夠聰明才會通過不斷學習去提高自己。而一旦你停止了學習的腳步,你將無法得到那些能夠讓你變得更加優秀的方法和技能。
  • 使得他們在工作中變得更加嚴謹:他們會花更多時間review自己的代碼,進行測試以保證交付的質量。雖然過程可能并不輕松,但他們卻總是能交出令人滿意的結果,這也讓大家對他們充滿信任。
  • 幫助他們獲得更好的想法:在軟件開發領域,那些最優的解決方案,往往需要你通過深入思考并探索盡可能多的可行方案后才能獲得。這意味著你必須具有開放的思維,而不是那些聰明人的自以為是。

他們都是現實主義者

相信每個人都有一顆追求完美的心,程序員也不例外。然而在軟件開發中完美并不存在,所謂的完美只是想象中的一個瞬間狀態,而它是無法達到或者即使達到也極易被摧毀的。任何一段新的代碼,一個新的功能中所存在的缺陷都可能將這種完美的狀態打破,而為了達到完美所付出的代價更是我們所無法承受的。那些成熟的程序員更加現實,他們關注于如何高效地解決問題,并在此基礎上給用戶帶來好的感受。

優秀的程序員懂得平衡,他們理解時間、人員等資源都是受限的,因此他們會選擇最簡明有效的方法去實現需求或解決問題。而非為了不必要的完善和未知的將來,把一切想得過于完美,反而增加了系統的開發和維護成本。他們不會把代碼寫得過于復雜,因為他們知道團隊中大部分的程序員都處于中等水平,過于復雜的代碼會讓他們產生困惑。優秀的程序員也深知完成即是價值的道理,他們知道從來沒有絕對的對與錯,與其長時間的關在會議室里,去討論或設想產品,倒不如嘗試用較小的代價去實現出某一個功能或產品,然后通過用戶的實際使用去證明它,然后在反復的迭代中不斷完善。他們尊重流程,但會靈活應用。每個公司或團隊都會有自己定義的開發、測試、發布流程,優秀的程序員們尊重這些流程,但在某些時候他們也會對流程中阻礙自己效率的部分作適當的裁剪。

優秀的程序員都很現實,這使得他們在不同的環境、團隊、項目中都能快速獲得成功。他們所開發出的系統往往處于“較好”的狀態之下,它并不完美,但卻非常穩定。

從自己的失敗中學習

作為程序員,你不可能總是對的,你或許會錯誤地選擇了某個技術或框架,你或許錯誤理解了用戶提出的需求。但不經過這些失敗,你可能永遠無法得到那些正確的方法

誠實地面對自己的錯誤非常重要,這意味著你或者你的同伴能夠及時地去修復錯誤,而這對你、對團隊、對項目都是最有益的。而每一次的失敗也會成為一次自我提升的良機,造成失敗的原因是什么?如何有效地避免失敗?通過及時反思,并果斷采取措施,那些失敗將成為你獲得進步的最佳途徑。

然而,承認失敗往往需要極大的勇氣,特別是在一些軟件公司,他們營造了一些不良的文化,當產品出現問題時總是對用戶掩蓋搪塞,并想方設法蒙混過關。這對你個人無益,甚至可能因為延誤了問題的最佳解決時機,而導致更慘重的失敗。如果你希望變得更加優秀,那你必須具備直面失敗的勇氣,并學會從每一次失敗中獲得進步。

很懶卻又很高效

那些優秀的程序員有時看上去很懶,他們會在上班時間做那些與工作毫無關系的事情,比如在紙上隨意地亂涂亂畫,長時間坐在那里發呆,甚至玩手機。但一旦他們進入編程狀態,你又會發現他們變得像打字員般,指尖飛舞,瞬間完成他們的工作。

優秀的程序員非常珍視自己的時間,他們會利用一切手段提高效率:

  • 常年的編程工作使他們都能熟練操作鍵盤,往往從一個程序員的打字速度上就能判斷他是否優秀。
  • 他們能夠熟練地使用IDE,他們不依賴菜單,而是使用快捷鍵來操控代碼,從查找文件,文本編輯到格式化代碼,文本替換都盡可能使用快捷鍵,這使得他們的開發工作更加連貫,也更高效。
  • 他們善于使用或發明工具,他們尋找一切能提高效率的工具,必要時他們還自己編寫自動化腳本、發明新的工具,從而徹底拋開那些惱人的重復勞動或機械性工作。

編程的過程是一個深入思考的過程,而非簡單的不斷敲出代碼。那些看上去很懶的優秀程序員,他們的思維卻可能一刻不停地在運轉著,這也是他們總是能夠給我們帶來驚喜的原因。

善于發現并改造輪子

今天幾乎每個程序員都知道不要重復發明輪子的道理,但問題往往是他們無法找到那個需要的輪子,或者他們無法很好地使用他們。

優秀的程序員知道如何找到他們想要的輪子

  • 他們會用幾個與待解決問題相關的關鍵字在互聯網上進行搜索。他們不僅使用國內的搜索引擎還會想方設法借助Google、Bing等國外搜索引擎,因為很多解決方法、意見、建議往往會出現在國外的技術論壇中。
  • 他們會利用社交網絡進行搜索,因為那里往往包含著最新的信息,相比傳統互聯網搜索,你往往會得到那些更具時效性的解答。
  • 他們善于提問,互聯網上很少有人認識你,所以你完全不必害羞,在Stackoverflow等社群提出你的問題,你很快就會獲得熱心人的回復。當然對任何回復都保持友好和善意也很重要,否則沒人會愿意幫助你。

優秀的程序員善于組合和改造輪子
雖然我們比以往任何時候都更容易得到輪子,但如何用好它們卻是另一個學問。我們往往需要一些技巧將幾個輪子組合在一起使用,必要時還需要對它們進行一些改造。優秀的程序員往往能通過閱讀相關的文檔、API以及代碼,快速地判斷一種技術、框架、工具是否適合自己的需要。并且憑借扎實的技術功力,他們還能基于這些輪子,改造出更強大、更適合自己需要的輪子。

并行工作,有效利用時間

效率可能是優秀程序員與那些普通程序員之間最大的區別,優秀的程序員總能更快、更好地完成布置給他們的任務。這背后當然有技術熟練度方面的原因,但我看到的另一個重要原因是,他們更善于將工作進行切分,并充分利用時間并行地去完成他們。

程序員每天都會參與很多活動,比如參加需求討論會議,和其他開發者討論設計方案,大量的閱讀學習,當然還有編碼。很多時候,我們會按照別人的意愿,去安排自己的工作,但這對我們來說可能并不是最有效的工作方式。工作中充滿了選擇,你不可能一下子完成所有的事情,在開始之前想一想如何把時間最有效地利用起來對你來說非常重要

優秀的程序員非常善于多線程工作,他們能夠如項目經理一般,拆分并安排好自己的每一項工作。如果你長時間做一件事,很容易會覺得疲勞,但把幾件事切分成更小的任務后,交錯并行地去完成它們,你便能更輕松地完成它們。就像我們在生活中,會利用坐地鐵,等公交的時間,拿出手機來獲得咨詢一樣。優秀的程序員能將所有的可支配的時間碎片化,利用這些時間片段,他們閱讀、學習、開發、做個人項目......他們并不比任何人有更多的時間,只是他們更會利用時間

具備不錯的軟技能

你可能是一個代碼高手,但這并不足以使你成為一個優秀的程序員,因為優秀往往是他人對你的評價,而你的老板、客戶可能都不擅長或根本不懂編程,他們往往并不會給一個只懂得編程的員工以很高的評價。當然,我們不可能去責備一個程序員過于鉆研技術,因為技術發展得太快,他們需要不斷學習才能跟上技術的發展腳步。但程序員們仍然不應忽視那些對他們的發展同樣重要的軟技能。優秀的程序員往往需要具備:

  • 一定的語言表達能力,這樣才能向他人準確而清晰地表達你的設計或想法
  • 學會傾聽,這樣才能獲得他人的優秀想法或意見,幫助你取得進步
  • 有足夠的信心成為一個領導者,盡管可能只是一個2,3人的團隊,但那是一個很好的開始
  • 指導他人的能力,教授方法和思想,而不僅僅局限于技術本身
  • 持續學習的能力,你需要不斷進步,否則即使你曾經優秀,也會很難維持
  • 謙遜的態度會讓你更像是一個大師
  • 尊重每一個人的同時,你也將會迎得他人的尊重
  • 敢于承擔責任,機遇往往就會隨之而來

優秀的程序員不僅具備優秀的技術能力,他們也往往擁有這些軟技能。在我所看到的所有項目中,很少會因為技術原因導致項目的失敗,而大部分的失敗往往來自于程序員們軟技能方面缺失所導致的團隊協作問題。反而是那些被認為水平一般的團隊,卻經常能依靠著團隊成員間的通力協作創造出讓人驚訝的成果來。

身邊有一些優秀的伙伴

我認為程序員會向著個人化、多樣性的方向發展。越來越多的個人程序員和更小的開發團隊將會產生,在不同領域內,他們借助技術的進步與工具的發展,能做出以前只有較大規模團隊才能開發出的優秀產品來。盡管如此,我仍然相信那些優秀的程序員并不會成為一匹獨狼,相反的,他們身邊總是會伴隨一批同樣優秀的伙伴。

回想我們的程序員生涯,當我們還是一個菜鳥時,身邊總會出現一些導師,他們可能是你的團隊Leader,或負責帶你的資深程序員,那時我們那些編程時的錯誤和缺點總是被無情地暴露在他們面前,經過他們的指正或批評,我們從不斷修正自己的錯誤中獲得了成長。隨著我們技能的不斷增長,在不同時期,因為不同的興趣,我們身邊的伙伴也在不斷變化,他們成了團隊中與你能力相當的同事,或是你所做業余項目中的志同道合者,又或者是你參與的開源項目中那些不同領域的專家,他們都成為了一名優秀程序員身邊不可或缺的優秀伙伴。這讓我想到結對編程中關于輪轉(Rotate)原則——并非固定兩人一組,而是根據任務的不同,不斷輪換搭檔。任何時候,你都需要那些優秀的伙伴不斷帶來啟發,給予指導,一起去完成不同目標,更重要的還有坦誠地指正你的問題。與優秀者同行,你也將變得更加優秀

對生活充滿熱情

有很多因素會使一名程序員走向平庸,而最最直接的便是失去對編程熱情和興趣。當一名程序員不再能夠感受編程所能帶來的樂趣時,編程對他來說,只是一項不得不去完成的工作,而他也將失去繼續學習的動力,無法再與優秀沾邊了。

我看到的那些優秀的程序員,總是對編程充滿著熱情,每次完成一個新的功能,解決一個有難度的問題,甚至修復一個不易被發現的缺陷都能讓他們興奮不已,而這些又會成為他們不斷去提升技能,學習新技能的動力。他們在不斷突破自己的極限中,并從中體會編程所帶來的樂趣

同時,優秀的程序員們也懂得生活,他們對那些新鮮事物總是充滿好奇,樂于嘗試,他們也會有各自不同的興趣愛好,攝影、寫作、旅行,亦或是游戲、追劇,他們總能很好地掌控這些興趣愛好與他們所熱愛的編程之間的關系。他們會每天有規律地完成如閱讀、學習、運維自己的個人項目之后,投入到自己的其他興趣愛好之中,他們很少熬夜,這保證了他們每天都能迎來一個新鮮的開始。他們能夠掌控生活,而不是反過來被生活所控制


優秀程序員們的身上一定還有著更多我們所未見的特質,但歸根結底,還是內心深處那份對于編程的熱愛與執著,推動著他們去不斷獲得那些天賦與才能吧......

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

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,643評論 25 708
  • 本文把程序員所需掌握的關鍵知識總結為三大類19個關鍵概念,然后給出了掌握每個關鍵概念所需的入門書籍,必讀書籍,以及...
    dle_oxio閱讀 11,157評論 6 244
  • 也不知道多久沒有好好的玩玩籃球了,今天衛校的學姐跟我說好久沒見了,下午先去你們學校吃東西,然后來我們學校打籃球。 ...
    楊旭海Asahi閱讀 366評論 0 1
  • 窗外的陽光輕柔地輕吻著白色的頭紗,蕾絲的百合在溫暖的空氣里含苞待放。百合下的容顏美的像一副畫,足以讓手中的玫瑰失色...
    乙厹閱讀 278評論 0 0
  • 云層疊疊 青山層層 戰斗機轟隆隆的震顫了 南山的夜 月懸在清涼里 聽著天山的心跳 故事埋藏在牛羊糞中 發酵的濃烈 ...
    東者西迷閱讀 220評論 0 1