下面是我在編程這個行當里獲得成功的處方:
·對編程感興趣,因為樂趣而去編程。確定始終都能保持足夠的樂趣,以致你能夠?qū)?0年時間投入其中。
·跟其他程序員交談;閱讀其他程序。這比任何書籍或訓(xùn)練課程都更重要。
·編程。最好的學(xué)習(xí)是從實踐中學(xué)習(xí)。用更加技術(shù)性的語言來講,“個體在特定領(lǐng)域最高水平的表現(xiàn)不是作為長期的經(jīng)驗的結(jié)果而自動獲得的,但即使是非常富有經(jīng)驗的個體也可以通過刻意的努力而提高其表現(xiàn)水平!(p. 366),而且“最有效的學(xué)習(xí)要求為特定個體制定適當難度的任務(wù),有意義的反饋,以及重復(fù)及改正錯誤的機會!(p. 20-21)《cognition in practice: mind, mathematics, and culture in everyday life》(在實踐中認知:心智、數(shù)學(xué)和日常生活的文化)是關(guān)于這個觀點的一本有趣的參考書。
·如果你愿意,在大學(xué)里花上4年時間(或者再花幾年讀研究生)。這能讓你獲得一些工作的入門資格,還能讓你對此領(lǐng)域有更深入的理解,但如果你不喜歡進學(xué)校,(作出一點犧牲)你在工作中也同樣能獲得類似的經(jīng)驗。在任何情況下,單從書本上學(xué)習(xí)都是不夠的!坝嬎銠C科學(xué)的教育不會讓任何人成為內(nèi)行的程序員,正如研究畫筆和顏料不會讓任何人成為內(nèi)行的畫家”,eric raymond,《the new hacker’s dictionary》(新黑客字典)的作者如是說。我曾經(jīng)雇用過的最優(yōu)秀的程序員之一僅有高中學(xué)歷;但他創(chuàng)造出了許多偉大的軟件,甚至有討論他本人的新聞組,而且股票期權(quán)讓他達到我無法企及的富有程度(譯注:指jamie zawinski,xemacs和netscape navigator的作者)。
·跟別的程序員一起完成項目。在一些項目中成為最好的程序員;在其他一些項目中當最差的一個。當你是最好的程序員時,你要測試自己領(lǐng)導(dǎo)項目的能力,并通過你的洞見鼓舞其他人。當你是最差的時候,你學(xué)習(xí)高手們在做些什么,以及他們不喜歡做什么(因為他們讓你幫他們做那些事)。
·接手別的程序員完成項目。用心理解別人編寫的程序?纯丛跊]有最初的程序員在場的時候理解和修改程序需要些什么。想一想怎樣設(shè)計你的程序才能讓別人接手維護你的程序時更容易一些。
·學(xué)會至少半打編程語言。包括一門支持類抽象(class abstraction)的語言(如java或c++),一門支持函數(shù)抽象(functional abstraction)的語言(如lisp或ml),一門支持句法抽象(syntactic abstraction)的語言(如lisp),一門支持說明性規(guī)約(declarative specification)的語言(如prolog或c++模版),一門支持協(xié)程(coroutine)的語言(如icon或scheme),以及一門支持并行處理(parallelism)的語言(如sisal)。
·記住在“計算機科學(xué)”這個詞組里包含“計算機”這個詞。了解你的計算機執(zhí)行一條指令要多長時間,從內(nèi)存中取一個word要多長時間(包括緩存命中和未命中的情況),從磁盤上讀取連續(xù)的數(shù)據(jù)要多長時間,定位到磁盤上的新位置又要多長時間。
·嘗試參與到一項語言標準化工作中?梢允莂nsi c++委員會,也可以是決定自己團隊的編碼風格到底采用2個空格的縮進還是4個。不論是哪一種,你都可以學(xué)到在這門語言中到底人們喜歡些什么,他們有多喜歡,甚至有可能稍微了解為什么他們會有這樣的感覺。
·擁有盡快從語言標準化工作中抽身的良好判斷力。
抱著這些想法,我很懷疑從書上到底能學(xué)到多少東西。在我第一個孩子出生前,我讀完了所有“怎樣……”的書,卻仍然感到自己是個茫無頭緒的新手。30個月后,我第二個孩子出生的時候,我重新拿起那些書來復(fù)習(xí)了嗎?不。相反,我依靠我自己的經(jīng)驗,結(jié)果比專家寫的幾千頁東西更有用更靠得住。
fred brooks在他的短文《no silver bullets》(沒有銀彈)中確立了如何發(fā)現(xiàn)杰出的軟件設(shè)計者的三步規(guī)劃:
1、盡早系統(tǒng)地識別出最好的設(shè)計者群體。
2、指派一個事業(yè)上的導(dǎo)師負責有潛質(zhì)的對象的發(fā)展,小心地幫他保持職業(yè)生涯的履歷。
3、讓成長中的設(shè)計師們有機會互相影響,互相激勵。
這實際上是假定了有些人本身就具有成為杰出設(shè)計師的必要潛質(zhì);要做的只是引導(dǎo)他們前進。alan perlis說得更簡潔:“每個人都可以被教授如何雕塑;而對米開朗基羅來說,能教給他的倒是怎樣能夠不去雕塑。杰出的程序員也一樣”。
所以盡管去買那些java書;你很可能會從中找到些用處。但你的生活,或者你作為程序員的真正的專業(yè)技術(shù),并不會因此在24小時、24天甚至24個月內(nèi)發(fā)生真正的變化。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |