Bruce Eckel:編程生涯
作者 Bruce Eckel 是編程界的大牛台盯,著有大名鼎鼎的《Thinking in C++》和《Thinking in Java》。
本文是他對程序員(尤其是新手)的忠告畏线。
大家總是問一個錯誤的問題:“我應(yīng)該學(xué)習(xí)C++還是Java静盅?”在本文中,我將告訴大伙兒:對于選擇編程生涯真正需要關(guān)注的是哪些問題寝殴。
請注意蒿叠,這篇文章的目標(biāo)讀者并不是那些已經(jīng)做出自己選擇的人。(對于這些人而言)你會繼續(xù)自己的編程生涯蚣常,而不管別人會怎么說市咽。因為它已經(jīng)滲透到你的血液中,你已經(jīng)無法擺脫抵蚊。你已經(jīng)知道答案:C++施绎、Java、Shell腳本贞绳、Python谷醉、還有其它一大堆的語言和技術(shù),你都理所當(dāng)然地會去學(xué)習(xí)冈闭。甚至有可能你才僅僅14歲俱尼,就已經(jīng)知道好幾種不同的語言。
問我這樣的問題的人可能來自其他行業(yè)萎攒,或者來自諸如Web開發(fā)之類的領(lǐng)域号显。他們知道HTML是一種類編程語言臭猜,而且想嘗試構(gòu)建某些更大型的應(yīng)用。但我特別希望押蚤,當(dāng)你在問這個問題時,你已經(jīng)意識到了想要在計算機(jī)領(lǐng)域取得成功羹应,你需要掌握自學(xué)能力揽碘,而且永不停息。
在這個領(lǐng)域做得越多园匹,我越覺得軟件開發(fā)比任何行業(yè)都更接近于寫作雳刺。 我們從來不知道是什么造就了優(yōu)秀的作者,我們只知道什么時候我們會喜歡某個人的文字裸违。編程不是一種工程掖桦,僅需要把東西從入口倒進(jìn)去,然后再轉(zhuǎn)動手柄供汛。把軟件開發(fā)看成確定性的枪汪,是一個誘人的想法。因為這個想法怔昨,人們總想搞出一些工具來幫我們開發(fā)出想要的軟件雀久。但是我的經(jīng)驗告訴我,事實(shí)并非如此——人的重要性遠(yuǎn)高于流程趁舀。而軟件是否運(yùn)行在一部精確的機(jī)器上已經(jīng)越來越不重要了——這猶如測不準(zhǔn)原理對人類的影響赖捌。
我的父親是造房子的,小時候我偶爾會幫忙打下手矮烹,放放磚塊之類越庇。他和他的木工告訴我,他們是為我好才讓我干這些活——這樣我就不至于走入這個行業(yè)奉狈。事實(shí)確實(shí)是這樣卤唉。
我們不妨把軟件開發(fā)比作蓋房子。造房子的人當(dāng)然不可能完全一樣嘹吨。這些人里面有:混凝土工搬味、屋頂工、管道工蟀拷、電工碰纬、磚瓦工、水泥工问芬、瓦片工悦析、搬運(yùn)工、粗木工此衅、細(xì)木工强戴。當(dāng)然亭螟,還有工頭。每個工種都需要相應(yīng)的技能骑歹,這些技能都需要花時間和精力去掌握预烙。跟軟件開發(fā)一樣,造房子也是一個“建立/推翻”的過程道媚。如果你想很快地獲得回報扁掸,你可能從搬運(yùn)工和磚瓦工開始做,這樣的話最域,你無需太多的學(xué)習(xí)曲線就可以獲得回報谴分。當(dāng)需求很多時,你的工作會很穩(wěn)固镀脂,甚至收入也可能提升——如果沒有足夠的人手的話。但是薄翅,一旦行情不妙沙兰,木匠甚至工頭就可能把磚瓦工一腳踢開。
當(dāng)互聯(lián)網(wǎng)剛剛興起時匿刮,僅僅是花一點(diǎn)時間學(xué)習(xí)HTML僧凰,你就可以得到一份薪水豐厚的工作。但是當(dāng)形勢慘淡時熟丸,對于技能的要求更高了——HTML程序員(就像搬運(yùn)工和磚瓦工一樣)第一個被拋棄了训措,而擁有更高技能的程序員則留了下來。
我想說的是: 除非你準(zhǔn)備活到老學(xué)到老光羞,不然的話绩鸣,不要進(jìn)入這個行業(yè)!編程看起來似乎是一個高收入而又穩(wěn)定的工作纱兑。但要做到這一點(diǎn)呀闻,唯一的途徑是:始終讓自己更有價值。
當(dāng)然潜慎,你總能找到例外捡多。總有那么一些人铐炫,僅僅學(xué)了一門編程語言垒手,就可以勝任留在一個崗位上,而不需要增長他的技能倒信。但他們只是幸免于難而已科贬,他們最終無疑是很脆弱的。為了不讓自己變得脆弱鳖悠,你需要持續(xù)的提高自己榜掌,通過閱讀优妙、加入用戶組、參加研討會...... 你學(xué)得越深入憎账,你就越有價值套硼,也就意味著你有更好的職業(yè)前景,可以配得上更高的薪水鼠哥。
另一個方法是:先大致了解這個領(lǐng)域熟菲,找到最適合你的地方。打個比方:我的兄弟對軟件很感興趣朴恳,也入了這行,只不過他的工作是安裝允蚣、維修于颖、升級電腦。他總是一絲不茍嚷兔,所以當(dāng)他把電腦搞好森渐,一定會很完美——不光是軟件,連電線都會被仔細(xì)地捆好冒晰。他總是生意興隆同衣,遠(yuǎn)超出他的精力所能及。他甚至都不用擔(dān)心 .com 泡沫的崩潰壶运。顯然他的飯碗不容易被搶走耐齐。
我在高校里待了很久,甚至還在UCLA(加州大學(xué)洛杉磯分校)進(jìn)修博士學(xué)位蒋情,后來又幸運(yùn)地終止了埠况。我說“幸運(yùn)”是因為我不再喜歡呆在學(xué)校,而我之前在高校待了那么久棵癣,只是因為我很享受它辕翰。但我所享受的,基本上是不務(wù)正業(yè)的東西——藝術(shù)和舞蹈課狈谊,在校報工作喜命,還有一小撮計算機(jī)課程(之所以說計算機(jī)課程“不務(wù)正業(yè)”,是因為我本科是物理專業(yè)河劝,研究生才是計算機(jī)專業(yè))壁榕。雖然我在學(xué)術(shù)上遠(yuǎn)談不上卓越(有意思的是很多當(dāng)時也許不會接受我這個學(xué)生的學(xué)校現(xiàn)在卻用我的書做教材)丧裁。我真的很享受作為學(xué)生的日子护桦,當(dāng)我完成博士課程,也許會以一個教授的身份終老一生煎娇。
但就如現(xiàn)在看到的二庵,我在學(xué)校里最大的收獲恰恰來自我那些“不務(wù)正業(yè)”的課程贪染,它們拓展了我的思維,使之超越了“我們已經(jīng)知道的東西”催享。在計算機(jī)領(lǐng)域中杭隙,你總是為某種目標(biāo)而編程。你對目標(biāo)了解得越多因妙,你就做得越好痰憎。我遇到過一些歐洲的研究生,他們需要結(jié)合其它專業(yè)領(lǐng)域來搞編程攀涵,他們的論文需要解決這個專業(yè)領(lǐng)域的特定的問題铣耘。
了解編程之外的領(lǐng)域,將會極大得提高你解決問題的能力 (就如同多學(xué)幾種編程語言將極大地提高你的編程技能)以故。很多時候蜗细,我發(fā)現(xiàn)僅僅學(xué)習(xí)計算機(jī)專業(yè)的學(xué)生,比那些(除了計算機(jī)之外)擁有其它背景的學(xué)生怒详,在思維上有更多的局限性炉媒。因為后者有著更嚴(yán)謹(jǐn)?shù)乃季S,也不那么容易想當(dāng)然昆烁。
有一次我組織了一次會議吊骤,其中一個議題是:理想的應(yīng)聘者有哪些特征:
◇把學(xué)習(xí)當(dāng)成生活方式。比如:你應(yīng)該知道不止一種語言静尼,沒有什么比學(xué)習(xí)一門新語言更能讓你開闊眼界了白粉。
◇知道如何獲取知識
◇Study prior art
◇善用工具
◇學(xué)會把事情簡化
◇理解業(yè)務(wù)
◇為自己的錯誤負(fù)責(zé)∶├桑“我就是這樣的”是不能接受的托詞蜗元。能找到自己的失誤。
◇成為一個領(lǐng)導(dǎo)者系冗,善于溝通和激勵奕扣。
◇搞清楚你在為誰服務(wù)
◇沒有絕對正確的答案(更好的方法總是存在的)。展示并討論你的代碼掌敬,不要帶著感情因素——你的代碼并不等于你本人惯豆。
◇明白完美是漸進(jìn)的
適當(dāng)嘗試一些冒險——尤其是能令人感到害怕的冒險。當(dāng)你嘗試之后奔害,將體會到出乎意料的興奮楷兽。(在冒險的過程中)最好不要刻意去計劃某個特定的結(jié)果。當(dāng)你過于注重結(jié)果华临,你往往會錯過那些真正有價值的問題芯杀。我的冒險往往是這樣開始的——“我們先做些試驗,看看它會把我們帶到什么地方”。
或許某些人會對我的回答感到失望揭厚,并回復(fù)我說:“是的却特,這很有趣也很有用。但我到底應(yīng)該學(xué)什么筛圆?C++還是Java裂明?” 我再重復(fù)一次:并不是所有的問題都有一個唯一的簡單的答案。問題的關(guān)鍵不在于選擇某個編程語言太援,然后掌握之闽晦。問題的關(guān)鍵在于:持續(xù)學(xué)習(xí),并且很多時候提岔,有不止一個選擇仙蛉。 相信我所說的,你的生活會更精彩碱蒙!
原文出處:
http://www.artima.com/weblogs/viewpost.jsp?thread=259358