優秀程序員應該具有哪些素質? 你能夠不聰明,可是你絕對不能不用心。 --《女人公敵》 程序員求職是本是一件只要「郎有情女有意」,一拍即合的事情,但是企業與求職者卻老是看不對眼、聊不到一塊去,進而致使IT市場上老是會出現結構性失衡的現象。一方面,社會每一年培養大量的計算機相關專業畢業生,他們卻找不到好的工做,但另外一方面,企業卻招不到好的程序員。據不徹底統計,大學生裏面大約有23%的人是學習計算機、通訊、電子相關專業的,均可以從事程序員相關工做,也就是說全國每一年大約有160 萬準程序員們畢業,可一樣,據傳國內某知名搜索引擎企業在2012 年應屆生名額沒用完。問題出在哪?問題偏偏就出在程序員愈來愈多,但優秀的程序員卻不是這樣。由於這個世界上歷來都不缺乏好的企業,缺乏的是好的員工。 憑什麼你就比別的程序員優秀?是由於別的程序員具有的能力你都具有,而別的程序員不具有能力你也具有,而這正是你的優秀之處。着名書籍《人月神話》裏面對優秀程序員的特性進行了一個深刻分析,認爲優秀程序員必須具有如下幾個方面的素質: (1)對編程有濃厚的興趣,而不是由於「籃球之父」喬丹(備註:喬丹曾經給NIKE代言,廣告詞爲「Just do IT」)的緣故才入行,由興趣能驅動本身的探索和鑽研精神,優秀程序員通常喜歡用業餘時間探索和本身琢磨點東西,研究點開源框架和源代碼。 (2)優秀程序員通常善於重構,懶於作重複的事情,對於重複事情有獨有的程序員思惟,即經過程序或其它自動化方式解決重複問題,而留更多時間去思考。達到一種多約束下的良好平衡。 (3)優秀程序員更多的會從簡單功能實現,花哨的界面轉移到對安全,性能,可擴展等底層架構的關注。 (4)優秀程序員通常有較明顯的自戀和偏執特徵。 (5)優秀程序員通常對計算機底層知識很是瞭解,有較爲紮實的算法,數據結構等理論知識的基礎。 對於優秀程序員而言,編程不是一份工做,而是一項充滿激情的事業,編者比較認同這個觀點,同時,編者也以爲,一名優秀程序員除了具有這些素質外,若是還能具備如下一些能力,必將錦上添花。 (1) 身體壯如牛 人生很漫長,不是一場百米衝刺,加速發力短暫的十幾秒就完了,而是一場長達兩萬多天的馬拉松比賽,二十幾歲大學畢業,只是人生馬拉松的開始,最重要的不是起跑的初速度有多快,而是是否可以堅持跑徹底程。因此,起跑時就須要有足夠的貯備可以讓本身堅持下來,這貯備就是健全的身體和人格。因此,想成爲一名優秀的程序員,身體很差確定不行。本章第4.5 節對程序員的身體健康有比較詳細的論述,此處再也不贅述。 (2) 心理素質好 編程是一項勞心勞力的活,程序員也所以須要承受巨大的精神壓力,也許壓力可以激發人的潛能,但壓力一樣能夠摧殘一我的的意志,關鍵就看如何對待了。生活彷佛並無給程序員緩解壓力的空間,反而高房價、高物價一點點地消磨掉了他們所剩很少的鬥志。此時,就對程序員的心理素質提出了更高的要求。有的程序員經不住風吹雨打,儘管實力不俗,但面對壓力,面對困難,卻畏首畏尾,瞬間崩潰,立馬變成軟蛋,而有的程序員大器沉着,面對困境,不慌不亂,可以冷靜思考,越戰越勇,儘管泰山壓頂,卻仍然巋然不動,絲毫沒有怯意。而優秀程序員屬於後者。 (3) 團隊精神和協做能力 「不怕神同樣的對手,就怕豬同樣的隊友」,一句經典的網絡用語道出了團隊合做的重要性。 衆所周知,失敗的團隊沒有成功者,成功的團隊成就每個人。真正優秀的程序員應學會怎樣和別人工做與合做,由於團隊精神和協做能力是程序員應該具有的最基本的能力,也是最重要的安身立命之本。不少人誤認爲優秀程序員是獨行俠,不吃煙火食,喜歡把本身關在一個小黑屋子裏面,一待就是幾個月,而後忽然出關,向世界宣佈本身已經如何武藝高強了,其實否則。若是沒有團隊精神,任何一個程序員也不可能有真正的成功,即便成功也是眇小的、暫時的。 隨着軟件系統的規模愈來愈大,計算機軟件的發展已經度過了早期的依靠我的能力的單兵做戰時代,「孤膽英雄」也早已成爲傳說,即使如Linus Torvalds(Linux 之父)這樣的天才,也須要經過組成強大的團隊來才能創造奇蹟。如今的軟件已經朝着大型化、商業化、定製化方向發展,所以要得到事業上的成功,必需要依靠團隊的力量才能達到,就更加須要程序員的團隊精神與合做能力了。 關於如何培養團隊精神與寫做能力,編者認爲,除了增強自身的技術水平、溝通技巧、語言表達能力等能力之外,還須要加強本身的責任心,由於責任心是贏得團隊成員尊重的最好利器。 (4) 書寫註釋與文檔的能力 程序員最煩兩件事:第一件事情是別人要他給本身的代碼寫註釋與文檔,第二件事情是別人的程序沒有留下注釋與文檔。鑑於此,爲了別人,也爲了本身,仍是應該好好書寫註釋與文檔。「本是同根生,相煎何太急」,程序員何苦爲難程序員?就如同你剛接觸項目渴望獲得前輩留下注釋與說明文檔同樣,爲你後面的兄弟留點註釋和文檔吧。 不少人覺得編程就是寫代碼,其實,這是對編程的一種誤解。程序員的世界不該該只有代碼。沒有好的建設圖紙,搬磚的力氣再大,房子也是會塌的,而文檔對於軟件的重要性絲絕不亞於建設圖紙於建築的重要性。軟件由代碼與文檔組成,寫代碼須要技術,寫好文檔也須要技術,優秀的程序員毫不僅僅只是會寫代碼,而是應該具備很強的註釋與文檔書寫能力。雖說代碼自己能夠說明問題的確是很棒的,但並非說註釋不重要,良好的註釋與文檔是正規研發流程中很是重要的環節,若是軟件缺乏註釋與文檔,那麼這個軟件就會缺少生命力,在將來的升級、排故以及模塊的複用時就都會遇到極大的麻煩,有多是毀滅性的災難。 做爲一名普通程序員,花費30%的工做時間寫技術文檔是很正常的事情,而做爲優秀程序員,這個比例會更高。