是什麼成就了卓越的程序員?

這件事彷彿發生在昨天一樣令我印象深刻。那是2000年,帕爾加斯博士站在我們的數據結構課教室的前方,講解着一些y型數據結構的內容,同時把一個SSH 的窗口投影在我們前面的牆上。

AD:

 

這件事彷彿發生在昨天一樣令我印象深刻。那是2000年,帕爾加斯博士站在我們的數據結構課教室的前方,講解着一些y型數據結構的內容,同時把一個SSH 的窗口投影在我們前面的牆上。有人提出了一個問題,隨後他用下面的話回答道:“如果你想成爲一個真正的計算機科學家,你就得開始用 Vi 。”我感覺他在說這些話的時候還在微微笑着,而事後發現他說的這個觀點根本不對。 但是由於年輕並且易受影響,當時的我回到宿舍後立刻了開始了自學如何使用 Vi 。我度過了很長一段艱苦的時間,但是當我開始變得對其熟悉的時候,我意識到我用 Vi 會幹的非常快。

(譯者注:SSH 爲 Secure Shell的簡稱;Vi 是 linux 環境下的文本編輯器。)

六年之後的我愛上了TextMate。我當時的工作是Java開發,而在那同時我也在閒暇時間學習 Rails 並製作 Rails 項目。我感覺我看過的所有文章和視頻都在講述如何使用 TextMate 來完成文本編輯的苦行。其實,每天使用Eclipse 使我像書呆子一樣脾氣暴躁。於是我買了臺Mac,並且十分鐘之內就購買並安裝上了 TextMate.

(譯者注:TextMate是一款文本編輯軟件,Eclipse是一個著名的集成開發環境。)

老實說,我並沒有因哪款文本編輯器而成爲一個更優秀的程序員。

特別好用的工具並不能讓你變得突飛猛進。你所使用的那些工具的確很重要,或者說,它們其實非常好用。然而老虎伍茲就算用一套爛球杆也會打敗我們所有人,梅 西就算不穿球鞋都能勝過我們,拉斐爾·納達爾也許用一把六十年代的老式木質球拍就能在網球場上擊敗我們中的任何一個人。見鬼,估計他用一個乒乓球拍就能打敗我。你所積累的那些技術,知識和經驗纔是最重要的部分。

工具並不能使你變成一個程序員。那什麼可以呢?我認爲,成爲一個優秀的程序員在很多方面取決於:你做什麼工作,你和什麼人一起工作。然而我發現,在軟件開發領域取得很大成功的人身上都有些共有的特質,是值得我們分享的。我不確定這些是你需要去特地學習的技巧亦或是你與生俱來的能力,但我非常確定的是,我若在這些方面多花些心思,少花些功夫更換文本編輯器,那麼我一定比現在的職位更高。

(補充:關於編程工具,羅布·沃林(Rob Walling)在《成爲更優秀的開發人員》中的觀點是:從長遠看,程序員必須使用可以最大地提高工作效率並且不會影響到其他的組員的工具。)

put people first 以人爲本

 

1. People First 以人爲本

我所認識的最好的程序員們會把人放在第一位。他們已經意識到就算他們編寫的軟件,其實只是個複雜系統的後臺或是隻有開發者會使用的協議,它還是給人們使用的。他們爲軟件編寫文檔,因爲這很重要,他們爲別人重用他們的代碼伸出援手。他們願意去做額外的工作,並且處理更復雜的問題,只爲了給使用他們軟件的人們一 個最好的解決方案。

 

2. Appetite for Learning 求知若渴

那些出類拔萃的程序員們都對知識如飢似渴。他們總是告訴你一些前沿的或有趣的東西。他們讀着成百上千的書(既有在線讀物也有離線讀物),而且他們似乎總是樂於親手嘗試,也樂於在經驗中汲取知識。他們不懼怕嘗試新語言或者新平臺。

 

3. Skillful at Problem Pattern Matching 擅長匹配問題

當你寫了一陣軟件程序後,你開始發現問題的存在。那些問題和你曾解決過的問題看起來相似得讓人頭痛。認識到這件事情並把原來的解決方案應用到當前狀況,這種能力是非常重要的。如果你能每次改進你的解決方案那就更好了。

注意,就算如此,你也不應該盲目的說什麼“因爲用這個舊方案解決過老問題,所以它肯定可以用來解決新問題”。 這個部分纔是應用“問題模式匹配”的技巧所在。你必須擁有一雙可以甄別應用舊方案是否可行的慧眼。

 

4. A Little Bit Insane 少許瘋狂

我的兄弟在高中四年級上了Python課程,當我問起他喜不喜歡這個課的時候,他表示我想當程序員這個主意真是瘋了,那個課是他上過的最無聊的課程之一。在某些程度上,我同意他的觀點。我和計算機交流的時間比和人交談的時間更多。我能把一行行基本上稱之爲胡言亂語的東西變成可以運行的軟件,這一事實令我大吃一驚。並不是所有的人都熱愛這些東西,但是那些我所認識的最好的程序員們絕對是熱愛製作軟件的。

堅持不懈 Persistentence

 

5. Persistentence 堅持不懈

軟件開發總是比所有人想象的都要慢。它很花時間。有時候你只能足夠耐心的去做出你需要寫的代碼。有時,作爲開發者,我們想去寫一些很有趣的代碼,但是有時我們也會因爲要去敲打那些已經寫了上百遍的代碼而厭煩。我相信那些最棒的開發者們能堅持下來,是因爲他們可以看到一幅他們正在乾的事情的宏圖,並且他們喜歡爲最終結果而添磚加瓦的過程。

 

以上這些特點是我認爲一個真正優秀的程序員所應該具備的,這當然不盡完善,所以我也樂於瞭解你們的意見。你覺得要怎樣才成爲一個卓越的程序員呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章