是什么成就了卓越的程序員?
這件事仿佛發(fā)生在昨天一樣令我印象深刻。那是2000年,帕爾加斯博士站在我們的數(shù)據(jù)結(jié)構(gòu)課教室的前方,講解著一些y型數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,同時(shí)把一個(gè)SSH 的窗口投影在我們前面的墻上。有人提出了一個(gè)問(wèn)題,隨后他用下面的話(huà)回答道:“如果你想成為一個(gè)真正的計(jì)算機(jī)科學(xué)家,你就得開(kāi)始用 Vi 。”我感覺(jué)他在說(shuō)這些話(huà)的時(shí)候還在微微笑著,而事后發(fā)現(xiàn)他說(shuō)的這個(gè)觀點(diǎn)根本不對(duì)。 但是由于年輕并且易受影響,當(dāng)時(shí)的我回到宿舍后立刻了開(kāi)始了自學(xué)如何使用 Vi 。我度過(guò)了很長(zhǎng)一段艱苦的時(shí)間,但是當(dāng)我開(kāi)始變得對(duì)其熟悉的時(shí)候,我意識(shí)到我用 Vi 會(huì)干的非常快。
(譯者注:SSH 為 Secure Shell的簡(jiǎn)稱(chēng);Vi 是 linux 環(huán)境下的文本編輯器。)
六年之后的我愛(ài)上了TextMate。我當(dāng)時(shí)的工作是Java開(kāi)發(fā),而在那同時(shí)我也在閑暇時(shí)間學(xué)習(xí) Rails 并制作 Rails 項(xiàng)目。我感覺(jué)我看過(guò)的所有文章和視頻都在講述如何使用 TextMate 來(lái)完成文本編輯的苦行。其實(shí),每天使用Eclipse 使我像書(shū)呆子一樣脾氣暴躁。于是我買(mǎi)了臺(tái)Mac,并且十分鐘之內(nèi)就購(gòu)買(mǎi)并安裝上了 TextMate.
(譯者注:TextMate是一款文本編輯軟件,Eclipse是一個(gè)著名的集成開(kāi)發(fā)環(huán)境。)
老實(shí)說(shuō),我并沒(méi)有因哪款文本編輯器而成為一個(gè)更優(yōu)秀的程序員。
特別好用的工具并不能讓你變得突飛猛進(jìn)。你所使用的那些工具的確很重要,或者說(shuō),它們其實(shí)非常好用。然而老虎伍茲就算用一套爛球桿也會(huì)打敗我們所有人,梅 西就算不穿球鞋都能勝過(guò)我們,拉斐爾·納達(dá)爾也許用一把六十年代的老式木質(zhì)球拍就能在網(wǎng)球場(chǎng)上擊敗我們中的任何一個(gè)人。見(jiàn)鬼,估計(jì)他用一個(gè)乒乓球拍就能打敗我。你所積累的那些技術(shù),知識(shí)和經(jīng)驗(yàn)才是最重要的部分。
工具并不能使你變成一個(gè)程序員。那什么可以呢?我認(rèn)為,成為一個(gè)優(yōu)秀的程序員在很多方面取決于:你做什么工作,你和什么人一起工作。然而我發(fā)現(xiàn),在軟件開(kāi)發(fā)領(lǐng)域取得很大成功的人身上都有些共有的特質(zhì),是值得我們分享的。我不確定這些是你需要去特地學(xué)習(xí)的技巧亦或是你與生俱來(lái)的能力,但我非常確定的是,我若在這些方面多花些心思,少花些功夫更換文本編輯器,那么我一定比現(xiàn)在的職位更高。
(補(bǔ)充:關(guān)于編程工具,羅布·沃林(Rob Walling)在《成為更優(yōu)秀的開(kāi)發(fā)人員》中的觀點(diǎn)是:從長(zhǎng)遠(yuǎn)看,程序員必須使用可以最大地提高工作效率并且不會(huì)影響到其他的組員的工具。)
1. People First 以人為本
我所認(rèn)識(shí)的最好的程序員們會(huì)把人放在第一位。他們已經(jīng)意識(shí)到就算他們編寫(xiě)的軟件,其實(shí)只是個(gè)復(fù)雜系統(tǒng)的后臺(tái)或是只有開(kāi)發(fā)者會(huì)使用的協(xié)議,它還是給人們使用的。他們?yōu)檐浖帉?xiě)文檔,因?yàn)檫@很重要,他們?yōu)閯e人重用他們的代碼伸出援手。他們?cè)敢馊プ鲱~外的工作,并且處理更復(fù)雜的問(wèn)題,只為了給使用他們軟件的人們一 個(gè)最好的解決方案。
2. Appetite for Learning 求知若渴
那些出類(lèi)拔萃的程序員們都對(duì)知識(shí)如饑似渴。他們總是告訴你一些前沿的或有趣的東西。他們讀著成百上千的書(shū)(既有在線(xiàn)讀物也有離線(xiàn)讀物),而且他們似乎總是樂(lè)于親手嘗試,也樂(lè)于在經(jīng)驗(yàn)中汲取知識(shí)。他們不懼怕嘗試新語(yǔ)言或者新平臺(tái)。
3. Skillful at Problem Pattern Matching 擅長(zhǎng)匹配問(wèn)題
當(dāng)你寫(xiě)了一陣軟件程序后,你開(kāi)始發(fā)現(xiàn)問(wèn)題的存在。那些問(wèn)題和你曾解決過(guò)的問(wèn)題看起來(lái)相似得讓人頭痛。認(rèn)識(shí)到這件事情并把原來(lái)的解決方案應(yīng)用到當(dāng)前狀況,這種能力是非常重要的。如果你能每次改進(jìn)你的解決方案那就更好了。
注意,就算如此,你也不應(yīng)該盲目的說(shuō)什么“因?yàn)橛眠@個(gè)舊方案解決過(guò)老問(wèn)題,所以它肯定可以用來(lái)解決新問(wèn)題”。 這個(gè)部分才是應(yīng)用“問(wèn)題模式匹配”的技巧所在。你必須擁有一雙可以甄別應(yīng)用舊方案是否可行的慧眼。
4. A Little Bit Insane 少許瘋狂
我的兄弟在高中四年級(jí)上了Python課程,當(dāng)我問(wèn)起他喜不喜歡這個(gè)課的時(shí)候,他表示我想當(dāng)程序員這個(gè)主意真是瘋了,那個(gè)課是他上過(guò)的最無(wú)聊的課程之一。在某些程度上,我同意他的觀點(diǎn)。我和計(jì)算機(jī)交流的時(shí)間比和人交談的時(shí)間更多。我能把一行行基本上稱(chēng)之為胡言亂語(yǔ)的東西變成可以運(yùn)行的軟件,這一事實(shí)令我大吃一驚。并不是所有的人都熱愛(ài)這些東西,但是那些我所認(rèn)識(shí)的最好的程序員們絕對(duì)是熱愛(ài)制作軟件的。
5. Persistentence 堅(jiān)持不懈
軟件開(kāi)發(fā)總是比所有人想象的都要慢。它很花時(shí)間。有時(shí)候你只能足夠耐心的去做出你需要寫(xiě)的代碼。有時(shí),作為開(kāi)發(fā)者,我們想去寫(xiě)一些很有趣的代碼,但是有時(shí)我們也會(huì)因?yàn)橐デ么蚰切┮呀?jīng)寫(xiě)了上百遍的代碼而厭煩。我相信那些最棒的開(kāi)發(fā)者們能堅(jiān)持下來(lái),是因?yàn)樗麄兛梢钥吹揭环麄冋诟傻氖虑榈暮陥D,并且他們喜歡為最終結(jié)果而添磚加瓦的過(guò)程。
以上這些特點(diǎn)是我認(rèn)為一個(gè)真正優(yōu)秀的程序員所應(yīng)該具備的,這當(dāng)然不盡完善,所以我也樂(lè)于了解你們的意見(jiàn)。你覺(jué)得要怎樣才成為一個(gè)卓越的程序員呢?
英文:Alan Johnson
原文鏈接:http://blog.jobbole.com/11761/
【編輯推薦】