是什么造就了偉大的程序員?
本文是從 What Makes A Great Programmer? 這篇文章翻譯而來。
回想起來就像是在昨天。那是2000年,在數(shù)據(jù)結(jié)構(gòu)課程的課堂上,Pargas博士站在前面給我們講一些關(guān)于數(shù)據(jù)結(jié)構(gòu)的話題,一個SSH的畫面投影在我們前 面的墻上。有人問了一個問題,他說了一些東西,差不多是這樣的話“是這樣,如果你想成為一個真正的計算機科學(xué)家,你需要從現(xiàn)在開始就使用vi編輯器”。我 想他是在笑談,課后感覺他說的話并不是完全的正確,但作為年輕且容易被感染的我,回到寢室立刻就開始學(xué)習(xí)如何使用vi。學(xué)習(xí)過程不容易,花費了不少時間, 但一旦掌握了其中的竅門,我發(fā)現(xiàn),使用vi的確可以更快的做事情。
時間推到6年前,那時我對TextMate十分的著迷。我的工作是做Java開發(fā),但同時我學(xué)習(xí)Rails,在業(yè)余時間開發(fā)一些Rails項目。那 時幾乎所有我讀的文章和觀看的視頻都是說明和演示如何使用TextMate來完成文本編輯工作的方法技巧的。事實上,我每天都在使用的Eclipse想要 把我變成一頭蠢豬。于是,我買了一臺Mac電腦,開機后十分鐘內(nèi)我就買了一套TextMate裝了上去。
說老實話,這兩種編輯器沒有一種使我成為一個更好的程序員。
優(yōu)秀的工具并不會把你變得更優(yōu)秀。你使用的工具確實很重要。事實上,它們非常棒。但老虎伍茲即使用幾根樹枝也能把我們?nèi)看驍。肺骷词共淮┬材?把我們踢的很慘,拉斐爾-納達(dá)爾即使使用一個60年代產(chǎn)的老式木質(zhì)網(wǎng)球拍也能把我們?nèi)魏我粋€人打敗。該死,他即使用乒乓球拍也能打敗我們。技術(shù),知識,以 及鍛煉出來的經(jīng)驗是你在與人對比中最重要的部分。
所以,工具造就不出程序員。那什么可以呢?我想,造就一個偉大的程序員的諸多因素都依賴于你所從事的事和與你共事的人,但從很多在軟件開發(fā)領(lǐng)域取得了巨大成功的人身上,我看到了很多共同的特征,我覺得值得與你們分享一下。我并不確定這些特征你是否能學(xué)得到,或者你天生就有,但我強烈的感覺到,如果我 能花更多了時間去追求這些特征,而不是鐘情于更換編輯器,我一定能取得更大的進(jìn)步。
以人為本
我知道的最好的程序員總是把人放在第一位。他們明白他們是在為人寫軟件,即使那只是一些復(fù)雜系統(tǒng)的后臺程序或協(xié)議,除了程序員沒有人會用到它們。他 們寫文檔,因為這很重要。他們幫助其它人如何使用自己的程序代碼。他們愿意付出更多的努力去解決更復(fù)雜的問題來讓人們以正確的方式使用他們的軟件。
對學(xué)習(xí)有很大的胃口
神奇的程序員對知識有一種可笑的饑渴感。他們總是對你說一些新的、有趣的東西。他們習(xí)慣于大量的閱讀(不論在線的還是線下的),他們喜歡嘗試,從中學(xué)到經(jīng)驗。他們對新出現(xiàn)的語言和平臺毫不擔(dān)憂恐懼。
掌握問題規(guī)律的本領(lǐng)
當(dāng)你做開發(fā)有了一段時間后,你會發(fā)現(xiàn)有時出現(xiàn)的問題和你曾經(jīng)處理過的問題看起來驚人的相似。能夠識別這些問題,把過往的解決方案應(yīng)用到你當(dāng)前的問題上,這是一個很有用處的本領(lǐng)。如果每次都能改進(jìn)這個方案,那是更好了。
注意,這并不意味這你可以盲目的認(rèn)為過去這個方案可行,現(xiàn)在它就一定可行。這種過往問題和現(xiàn)在出現(xiàn)的問題的類型匹配是很有技巧性的。你需要認(rèn)真判斷何時使用一個歷史方案是可行的,什么時候是不行的。
有一點神經(jīng)質(zhì)
我弟弟在高中時上了一次Python課,當(dāng)我問他是否喜歡這課時,他說我腦袋一定出問題了才去愿意當(dāng)一名程序員,他說編程是他這輩子子做過的最無聊 的一件事。從某種程度上講,他是對的。大多數(shù)的日子里我是對著計算機說話,而不是人。想到這些要把一行一行的基本的長長短短的語句拼成一個軟件,我不由的 打了大大一個冷戰(zhàn)。并不是所有的人都喜歡做這種事情,但是我知道的最優(yōu)秀的程序員絕對是熱愛制作軟件的。
執(zhí)著
軟件開發(fā)是一個實際上比任何人的想像都要緩慢的開發(fā)過程。它很費時間。有時候你必須要有最夠的耐心去精雕細(xì)琢出你需要的代碼。有時,作為程序員,我 們會寫出非常有趣的代碼,但也有時候,我們不得不哭喪著臉去寫一大堆過去曾經(jīng)寫過的代碼。想想偉大的程序員之所以能堅持下來,是因為他們能看到他們所從事 的事業(yè)的大藍(lán)景,他們喜歡這一點一點走向目標(biāo)的開發(fā)過程。
這就是我想到的構(gòu)成一個優(yōu)秀程序員的一些特征,但這并不是全部,所以我想聽聽你的觀點。你認(rèn)為是什么使一個程序員變的優(yōu)秀?
【編輯推薦】