什么原因成就了一位優秀的程序員?

這些年我曾和很多程序員一起工作,他們之中的一些人非常厲害,而另一些人顯得平庸。不久前因為和一些技術非常熟練的程序員工作感覺很愉快,我花了一些時間在考慮我佩服他們什么呢?什么原因讓優秀的程序員那么優秀,糟糕的程序員那么糟糕?簡而言之,什么原因成就了一位優秀的程序員呢?

根據我的經驗,成為一個優秀程序員同年齡,教育程度,還有和你賺多少錢沒有任何關系。關鍵在于你的做法,更深入地說,就是你的想法。我注意到我所欽佩的程序員都有一些相似習慣。不是他們所選語言的知識,也不是對數據結構和算法的深入理解,甚至不是多年的工作經驗。而是他們的溝通方式,他們管理自己的方式,以及以他們精湛技術水平編程演講的方式。

當然成為一個優秀的程序員還要具備更多特質,我也不能單單依靠是否存在(或者缺少)這些特質來評判一個程序員。但是我知道當我看見它,當我看見一個程序員具備這些特質的時候,我認為,“這個人真的知道他們正在做什么”。

?

他們做調查研究

或者叫“三思而后行”,或者叫“谷歌一下”

不論你怎么稱呼它,大多數可能會遇到的編程問題已經以某種形式解決,傳道書早就記載著世界上本來就沒有什么新鮮事。優秀的程序員在解決問題之前知道通過GitHub圖書館、網絡博客,或者通過與經驗豐富的程序員交流等形式來做調查研究。

我見過甚至是優秀的程序員可以快速找出解決方案,但是和我一起工作過的糟糕的程序員從來不求助于他人,結果做了大量的重復工作或者錯誤地解決問題,不幸的是,后來他們終將為自己犯下的錯誤付出了代價。

?

他們閱讀錯誤信息(并按照它們行事)

這包括解析堆棧路徑信息。是的,這是一件非常不幸的事情。但是如果你不愿意這么做的話,怎么才能知道哪里錯了呢?我知道的高效程序員是不會害怕深究問題的。低效的程序員看見有錯誤,但就是不愿意甚至是去讀這些錯誤信息。(這聽起來很可笑,但你會驚訝我遇到它的頻率)

更進一步地說,優秀的程序員發現問題馬上就解決它。讀錯誤信息對他們來說僅僅是個開始,他們渴望深究問題并查出問題的根源。他們不喜歡推卸責任,而是愿意查找解決問題的方案,問題在他們這里止步。

?

他們去看源代碼

文檔、測試、團隊,這些都會說謊。盡管不是故意的,但是如果你想確切地知道事情是怎么回事,你必須自己親自看源代碼。

如果它不是你最擅長的語言,你也不要害怕。如果你是一個Ruby的程序員,你懷疑在Ruby的C語言庫中有個錯誤,破解打開看看。是的,你可能拿不到源代碼,但是誰知道呢?你只是可能而已,你有更好的機會,總比你根本不去嘗試好吧。

不幸的是,如果你處在一個封閉源代碼的環境中,這會變得非常難,但道理是不變的。糟糕的程序員對于查看源代碼沒有絲毫的興趣,結果問題困擾他們時間,要比愿意看源代碼的時間長得多。

?

They just do it

優秀的程序員趨向于主動去做。他們的內心有著難以控制的沖動,當他們確定問題或者發現新的需求時他們立刻會實現解決方案,有時過早有時太過激進。但是他們對問題本能的反應是正面解決問題。

有時這會令人很煩惱,但是他們的熱情是他們做好事情的一個重要部分。一些人可能拖延時間回避問題或者等待問題自己能夠消失,然而優秀的程序員一開始就解決它。簡而言之(或者顯而易見),如果你看見有人興致勃勃地查找問題并在解決,很可能你的手下有位優秀的程序員。

?

他們避免危機

這通常是糟糕程序員的特點:他們輕易地從一個人為危機跳到另一個人為危機,在沒有真正理解一個問題之前就進入到下一個問題。他們會把責任歸咎于程序的錯誤,然后花費大把的時間調試已經運行良好的代碼。他們讓情感占據主動,相信直覺,而不是仔細嚴謹的分析。

如果你匆匆忙忙地解決一個問題,甚至視每一個問題為震驚世界的災難。你很可能犯錯誤或者沒有解決潛在的問題。優秀的程序員花時間去了解發生了什么錯誤,哪怕災難來臨的時候;但更重要的是,他們對待平常的問題像是要解決的重要問題,因此他們更準確地解決更多的問題,并且這樣做沒有提高團隊的緊張程度。

?

他們善于溝通交流

說到底,編程是一種形式的溝通交流。寫代碼和寫散文創作一樣,能夠簡潔地表達你的想法很重要。我發現那些可以寫簡潔郵件,優雅的狀態報告,或者甚至只是一個有效的備忘錄的程序員也將會是優秀的程序員。

這能應用在寫代碼還有英語上。用圓括號、括號和單個字母的函數寫出一行代碼當然是有可能的,但是如果沒有人理解它,有什么意義呢。優秀的程序員會花時間以各種渠道交流他們的想法。

?

他們激情四射

我認為這可能是優秀的程序員最重要的方面(也許這點也適用于除計算機科學領域的其它領域)

如果你真的在乎你所做的事情,如果不把它當成工作,當作一個業余愛好、興趣或一件很有吸引力的事情,那么在該領域你比其他人更有優勢。優秀的程序員一直不斷編程。普通程序員一天工作八小時,并且沒有業余項目,也沒興趣回饋社區。他們不會不斷地嘗試新方法,而只是為了看看它們是如何運行而執著于編程語言。

當我看見一個程序員利用周末的時間做自己喜歡的項目時,參與創作他們每天能用到的工具時,執著于新的有意義的事情時:那個時候我確信我眼前的是一個令人驚奇的人。最后,優秀的程序員視他們的職業不僅僅是賺錢的途徑,更是讓生活變得有些不同的方法。我認為那就是成就最優秀程序員的真正原因。對于他們來說,編寫代碼是改變世界的一種方法,也是我非常尊敬崇拜他們的原因。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447330.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis的哨兵模式Sentinel

sentinel功能 redis的sentinel系統用于管理多個redis服務器,該系統主要執行三個任務:監控、提醒、自動故障轉移。 1、監控(Monitoring): Redis Sentinel實時監控主服務器和從服務器運行狀態,并且實現自動…

csdn 到底怎么了?不準轉載?

我轉載了20多文章,很多人閱讀過,但是今天看到閱讀量是0, csdn 到底怎么了? 對用戶這樣?請大家看看是不是這樣?

python3之后版本讀取網頁的內容

import urllib.request url "http://helloworldbook2.com/data/message.txt" #直接通過url來獲取網頁數據 print(第一種) response urllib.request.urlopen(url) code response.getcode() html response.read() mystr html.decode("utf8") response.c…

三十功名塵與土——資深程序員生涯自白

摘要:作者Codist(網名)在程序員崗位上工作了三十多年,在這期間他悟出了一些真理,比如,成功來自對失敗的總結學習;條條大路通羅馬,羅馬并不在乎你用什么方式到達。你在生活中積累了哪…

linux/unix核心設計思想

1) 程序應該小而專一,程序應該盡量的小,且只專注于一件事上,不要開發那些看起來有用但是90%的情況都用不到的特性; 2) 程序不只要考慮性能, 程序的可移植性更重要,shell和perl&…

操作系統環境變量

在 Java中,許多類都是 Iterable ,主要包括所有的 Collection 類(但不包括各種 Maps )。 例如,下面的代碼可以顯示所有的操作系統環境變量: // collections/EnvironmentVariables.java // {VisuallyInspect…

用Unix的設計思想來應對多變的需求

摘要:無論是Unix設計,還是面向對象設計,還是別的什么如SOA,ECB,消息,事件,MVC,網絡七層模型,數據庫設計,等等,他們都在干三件事——解耦&#xff…

學習較底層編程:動手寫一個C語言編譯器

動手編寫一個編譯器,學習一下較為底層的編程方式,是一種學習計算機到底是如何工作的非常有效方法。 編譯器通常被看作是十分復雜的工程。事實上,編寫一個產品級的編譯器也確實是一個龐大的任務。但是寫一個小巧可用的編譯器卻不是這么困難。…

Arrays.deepToString() 方法同時適用于基元數組和對象數組

Arrays.deepToString() 方法同時適用于基元數組和對象數組: import java.util.*;public class MultiDimWrapperArray {public static void main(String[] args) {Integer[][] a1 { // Autoboxing{ 1, 2, 3, },{ 4, 5, 6, },};Double[][][] a2 { // Autoboxing{ {…

高效程序員的7個共同特征

要想成為高效的程序員,你需要具備一定的綜合素質才能夠讓你用你所掌握的技能、經驗和知識編寫出有效的代碼。有一些開發人員在技術方面具備一定的技巧,但他們永遠無法成為高效的程序員,就是因為他們缺乏所需的其它幾項特質。本文將給出成為一…

java.util.Array中的方法

概述 asList(): 獲取任何序列或數組,并將其轉換為一個 列表集合 (集合章節介紹了此方法)。 copyOf():以新的長度創建現有數組的新副本。 copyOfRange():創建現有數組的一部分的新副本。 equals():比較兩…

有關編程的12個猜想

摘要:編程世界的將來如何目前仍難預料,但可以肯定的一點是技術一直在加速發展。本文搜羅出12個獨特的編程視角猜想,一起來看看有哪些猜想在不久的將來就能變為現實。 編程世界的將來如何目前仍難預料,但可以肯定的一點是技術一直…

面試中如何剔除“魚目混珠”程序員?

公司招聘面試事宜是一個耗時耗錢的項目,從挑選簡歷開始,還要花更多的時間面試候選人。有的時候這些人才機構會向你保證這些人都是Java天才、SQL專家、堆棧開發者等等,但實際上真實情況遠不及你想想的。對于一個公司來說,執行招聘面…

InputStream 類型

輸入流類型 I/O-1 類功能構造器參數如何使用ByteArrayInputStream允許將內存的緩沖區當做 InputStream 使用緩沖區,字節將從中取出作為一種數據源:將其與 FilterInputStream 對象相連以提供有用接口StringBufferInputStream將 String 轉換成 InputStr…

java容器相關問題

同步類容器 1,這些復合操作在多線程并發地修改容器時,可能會表現出意外的行為,最經典的便是ConcurrentModificationException,原因是當容器迭代的過程中,被并發的修改了內容,這是由于早期迭代器設計的時候…

趣文:如果編程語言是車

C語言是全能手,小巧,強大,所向披靡,可靠,任何事情都能對付。 C是新的C,雙倍的能力,雙倍的尺寸,適應險惡的環境,但是你如果沒練好就去駕駛,很可能會撞車。 C#是…

Java 線程安全

線程安全 線程安全概念:當多個線程訪問某一個類(對象或方法)時,這個類始終都能表現出正確的行為,那么這個類(對象或方法)就是線程安全的。synchronized:可以在任意對象及方法上加鎖…

開發者應該了解的API技術清單!

摘要:有人說,有API的地方就有App,借助這些API開發者輕松構建出一款應用,極大地提高開發效率和開發質量。文中整理了一份API服務清單,內容涵蓋:監控/調試、 CDN 、數據庫、儀表盤、支付、通信等方面&#xf…

提高程序員職場價值的10大技巧

如果你已經是個很牛叉的程序員,但是依然覺得覺得還不夠的話,歡迎閱讀此文。本文旨在幫助各位更上一層樓。 你是不是覺得自己已經掌握了所有的編程技巧?別太自以為是了! 會寫代碼的確很重要,但是要拿到更好薪水&#…

google python的風格規范

點擊鏈接,查看內容