這些年我曾和很多程式設計師一起工作,他們之中的一些人非常厲害,而另一些人顯得平庸。不久前因為和一些技術非常熟練的程式設計師工作感覺很愉快,我花了一些時間在考慮我佩服他們什麼呢?什麼原因讓優秀的程式設計師那麼優秀,糟糕的程式設計師那麼糟糕?簡而言之,什麼原因成就了一位優秀的程式設計師呢?
根據我的經驗,成為乙個優秀程式設計師同年齡,教育程度,還有和你賺多少錢沒有任何關係。關鍵在於你的做法,更深入地說,就是你的想法。我注意到我所欽佩的程式設計師都有一些相似習慣。不是他們所選語言的知識,也不是對資料結構和演算法的深入理解,甚至不是多年的工作經驗。而是他們的溝通方式,他們管理自己的方式,以及以他們精湛技術水平程式設計演講的方式。
當然成為乙個優秀的程式設計師還要具備更多特質,我也不能單單依靠是否存在(或者缺少)這些特質來評判乙個程式設計師。但是我知道當我看見它,當我看見乙個程式設計師具備這些特質的時候,我認為,「這個人真的知道他們正在做什麼」。
或者叫「三思而後行」,或者叫「谷歌一下」
不論你怎麼稱呼它,大多數可能會遇到的程式設計問題已經以某種形式解決,傳道書早就記載著世界上本來就沒有什麼新鮮事。優秀的程式設計師在解決問題之前知道通過github圖書館、網路部落格,或者通過與經驗豐富的程式設計師交流等形式來做調查研究。
我見過甚至是優秀的程式設計師可以快速找出解決方案,但是和我一起工作過的糟糕的程式設計師從來不求助於他人,結果做了大量的重複工作或者錯誤地解決問題,不幸的是,後來他們終將為自己犯下的錯誤付出了代價。
這包括解析堆疊路徑資訊。是的,這是一件非常不幸的事情。但是如果你不願意這麼做的話,怎麼才能知道**錯了呢?我知道的高效程式設計師是不會害怕深究問題的。低效的程式設計師看見有錯誤,但就是不願意甚至是去讀這些錯誤資訊。(這聽起來很可笑,但你會驚訝我遇到它的頻率)
更進一步地說,優秀的程式設計師發現問題馬上就解決它。讀錯誤資訊對他們來說僅僅是個開始,他們渴望深究問題並查出問題的根源。他們不喜歡推卸責任,而是願意查詢解決問題的方案,問題在他們這裡止步。
文件、測試、團隊,這些都會說謊。儘管不是故意的,但是如果你想確切地知道事情是怎麼回事,你必須自己親自看源**。
如果它不是你最擅長的語言,你也不要害怕。如果你是乙個ruby的程式設計師,你懷疑在ruby的c語言庫中有個錯誤,破解開啟看看。是的,你可能拿不到源**,但是誰知道呢?你只是可能而已,你有更好的機會,總比你根本不去嘗試好吧。
不幸的是,如果你處在乙個封閉源**的環境中,這會變得非常難,但道理是不變的。糟糕的程式設計師對於檢視源**沒有絲毫的興趣,結果問題困擾他們時間,要比願意看源**的時間長得多。
優秀的程式設計師趨向於主動去做。他們的內心有著難以控制的衝動,當他們確定問題或者發現新的需求時他們立刻會實現解決方案,有時過早有時太過激進。但是他們對問題本能的反應是正面解決問題。
有時這會令人很煩惱,但是他們的熱情是他們做好事情的乙個重要部分。一些人可能拖延時間迴避問題或者等待問題自己能夠消失,然而優秀的程式設計師一開始就解決它。簡而言之(或者顯而易見),如果你看見有人興致勃勃地查詢問題並在解決,很可能你的手下有位優秀的程式設計師。
這通常是糟糕程式設計師的特點:他們輕易地從乙個人為危機跳到另乙個人為危機,在沒有真正理解乙個問題之前就進入到下乙個問題。他們會把責任歸咎於程式的錯誤,然後花費大把的時間除錯已經執行良好的**。他們讓情感佔據主動,相信直覺,而不是仔細嚴謹的分析。
如果你匆匆忙忙地解決乙個問題,甚至視每乙個問題為震驚世界的災難。你很可能犯錯誤或者沒有解決潛在的問題。優秀的程式設計師花時間去了解發生了什麼錯誤,哪怕災難來臨的時候;但更重要的是,他們對待平常的問題像是要解決的重要問題,因此他們更準確地解決更多的問題,並且這樣做沒有提高團隊的緊張程度。
說到底,程式設計是一種形式的溝通交流。寫**和寫散文創作一樣,能夠簡潔地表達你的想法很重要。我發現那些可以寫簡潔郵件,優雅的狀態報告,或者甚至只是乙個有效的備忘錄的程式設計師也將會是優秀的程式設計師。
這能應用在寫**還有英語上。用圓括號、括號和單個字母的函式寫出一行**當然是有可能的,但是如果沒有人理解它,有什麼意義呢。優秀的程式設計師會花時間以各種渠道交流他們的想法。
我認為這可能是優秀的程式設計師最重要的方面(也許這點也適用於除電腦科學領域的其它領域)
如果你真的在乎你所做的事情,如果不把它當成工作,當作乙個業餘愛好、興趣或一件很有吸引力的事情,那麼在該領域你比其他人更有優勢。優秀的程式設計師一直不斷程式設計。普通程式設計師一天工作八小時,並且沒有業餘專案,也沒興趣回饋社群。他們不會不斷地嘗試新方法,而只是為了看看它們是如何執行而執著於程式語言。
當我看見乙個程式設計師利用週末的時間做自己喜歡的專案時,參與創作他們每天能用到的工具時,執著於新的有意義的事情時:那個時候我確信我眼前的是乙個令人驚奇的人。最後,優秀的程式設計師視他們的職業不僅僅是賺錢的途徑,更是讓生活變得有些不同的方法。我認為那就是成就最優秀程式設計師的真正原因。對於他們來說,編寫**是改變世界的一種方法,也是我非常尊敬崇拜他們的原因。
一位程式設計師的忠告
諸位,咱當網路工程師也是幾年了,不算有出息,環顧四周,也沒有看見幾個有出息的!回顧工程師生涯,感慨萬千,願意講幾句掏心窩子的話,也算給咱們師弟師妹們提個醒,希望他們比咱們強!1 好好規劃自己的路,不要跟著感覺走!根據個人的理想決策安排,絕大部分人並不指望成為什麼院士或教授,而是希望活得滋潤一些,爽一...
一位程式設計師的忠告
1 好好規劃自己的路,不要跟著感覺走!根據個人的理想決策安排,絕大部分人並不指望成為什麼院士或教授,而是希望活得滋潤一些,爽一些。那麼,就需要慎重安排自己的軌跡。從哪個行業入手,逐漸對該行業深入了解,不要頻繁跳槽,特別是不要為了一點工資而轉移陣地,從長遠看,這點錢根本不算什麼,當你對乙個行業有那麼幾...
一位程式設計師的忠告
1 好好規劃自己的路,不要跟著感覺走!根據個人的理想決策安排,絕大部分人並不指望成為什麼院士或教授,而是希望活得滋潤一些,爽一些。那麼,就需要慎重安排自己的軌跡。從哪個行業入手,逐漸對該行業深入了解,不要頻繁跳槽,特別是不要為了一點工資而轉移陣地,從長遠看,這點錢根本不算什麼,當你對乙個行業有那麼幾...