Bruce Eckel:編程生涯

Bruce Eckel:編程生涯

作者 Bruce Eckel 是編程界的大牛,著有大名鼎鼎的《Thinking in C++》和《Thinking in Java》。
本文是他對程序員(尤其是新手)的忠告。

大家總是問一個錯誤的問題:“我應該學習C++還是Java?”在本文中,我將告訴大伙兒:對于選擇編程生涯真正需要關(guān)注的是哪些問題。

請注意,這篇文章的目標讀者并不是那些已經(jīng)做出自己選擇的人。(對于這些人而言)你會繼續(xù)自己的編程生涯,而不管別人會怎么說。因為它已經(jīng)滲透到你的血液中,你已經(jīng)無法擺脫。你已經(jīng)知道答案:C++、Java、Shell腳本、Python、還有其它一大堆的語言和技術(shù),你都理所當然地會去學習。甚至有可能你才僅僅14歲,就已經(jīng)知道好幾種不同的語言。

問我這樣的問題的人可能來自其他行業(yè),或者來自諸如Web開發(fā)之類的領域。他們知道HTML是一種類編程語言,而且想嘗試構(gòu)建某些更大型的應用。但我特別希望,當你在問這個問題時,你已經(jīng)意識到了想要在計算機領域取得成功,你需要掌握自學能力,而且永不停息。

在這個領域做得越多,我越覺得軟件開發(fā)比任何行業(yè)都更接近于寫作。 我們從來不知道是什么造就了優(yōu)秀的作者,我們只知道什么時候我們會喜歡某個人的文字。編程不是一種工程,僅需要把東西從入口倒進去,然后再轉(zhuǎn)動手柄。把軟件開發(fā)看成確定性的,是一個誘人的想法。因為這個想法,人們總想搞出一些工具來幫我們開發(fā)出想要的軟件。但是我的經(jīng)驗告訴我,事實并非如此——人的重要性遠高于流程。而軟件是否運行在一部精確的機器上已經(jīng)越來越不重要了——這猶如測不準原理對人類的影響。

我的父親是造房子的,小時候我偶爾會幫忙打下手,放放磚塊之類。他和他的木工告訴我,他們是為我好才讓我干這些活——這樣我就不至于走入這個行業(yè)。事實確實是這樣。

我們不妨把軟件開發(fā)比作蓋房子。造房子的人當然不可能完全一樣。這些人里面有:混凝土工、屋頂工、管道工、電工、磚瓦工、水泥工、瓦片工、搬運工、粗木工、細木工。當然,還有工頭。每個工種都需要相應的技能,這些技能都需要花時間和精力去掌握。跟軟件開發(fā)一樣,造房子也是一個“建立/推翻”的過程。如果你想很快地獲得回報,你可能從搬運工和磚瓦工開始做,這樣的話,你無需太多的學習曲線就可以獲得回報。當需求很多時,你的工作會很穩(wěn)固,甚至收入也可能提升——如果沒有足夠的人手的話。但是,一旦行情不妙,木匠甚至工頭就可能把磚瓦工一腳踢開。

當互聯(lián)網(wǎng)剛剛興起時,僅僅是花一點時間學習HTML,你就可以得到一份薪水豐厚的工作。但是當形勢慘淡時,對于技能的要求更高了——HTML程序員(就像搬運工和磚瓦工一樣)第一個被拋棄了,而擁有更高技能的程序員則留了下來。

我想說的是: 除非你準備活到老學到老,不然的話,不要進入這個行業(yè)!編程看起來似乎是一個高收入而又穩(wěn)定的工作。但要做到這一點,唯一的途徑是:始終讓自己更有價值。

當然,你總能找到例外??傆心敲匆恍┤耍瑑H僅學了一門編程語言,就可以勝任留在一個崗位上,而不需要增長他的技能。但他們只是幸免于難而已,他們最終無疑是很脆弱的。為了不讓自己變得脆弱,你需要持續(xù)的提高自己,通過閱讀、加入用戶組、參加研討會...... 你學得越深入,你就越有價值,也就意味著你有更好的職業(yè)前景,可以配得上更高的薪水。

另一個方法是:先大致了解這個領域,找到最適合你的地方。打個比方:我的兄弟對軟件很感興趣,也入了這行,只不過他的工作是安裝、維修、升級電腦。他總是一絲不茍,所以當他把電腦搞好,一定會很完美——不光是軟件,連電線都會被仔細地捆好。他總是生意興隆,遠超出他的精力所能及。他甚至都不用擔心 .com 泡沫的崩潰。顯然他的飯碗不容易被搶走。

我在高校里待了很久,甚至還在UCLA(加州大學洛杉磯分校)進修博士學位,后來又幸運地終止了。我說“幸運”是因為我不再喜歡呆在學校,而我之前在高校待了那么久,只是因為我很享受它。但我所享受的,基本上是不務正業(yè)的東西——藝術(shù)和舞蹈課,在校報工作,還有一小撮計算機課程(之所以說計算機課程“不務正業(yè)”,是因為我本科是物理專業(yè),研究生才是計算機專業(yè))。雖然我在學術(shù)上遠談不上卓越(有意思的是很多當時也許不會接受我這個學生的學?,F(xiàn)在卻用我的書做教材)。我真的很享受作為學生的日子,當我完成博士課程,也許會以一個教授的身份終老一生。

但就如現(xiàn)在看到的,我在學校里最大的收獲恰恰來自我那些“不務正業(yè)”的課程,它們拓展了我的思維,使之超越了“我們已經(jīng)知道的東西”。在計算機領域中,你總是為某種目標而編程。你對目標了解得越多,你就做得越好。我遇到過一些歐洲的研究生,他們需要結(jié)合其它專業(yè)領域來搞編程,他們的論文需要解決這個專業(yè)領域的特定的問題。

了解編程之外的領域,將會極大得提高你解決問題的能力 (就如同多學幾種編程語言將極大地提高你的編程技能)。很多時候,我發(fā)現(xiàn)僅僅學習計算機專業(yè)的學生,比那些(除了計算機之外)擁有其它背景的學生,在思維上有更多的局限性。因為后者有著更嚴謹?shù)乃季S,也不那么容易想當然。

有一次我組織了一次會議,其中一個議題是:理想的應聘者有哪些特征:
◇把學習當成生活方式。比如:你應該知道不止一種語言,沒有什么比學習一門新語言更能讓你開闊眼界了。
◇知道如何獲取知識
◇Study prior art
◇善用工具
◇學會把事情簡化
◇理解業(yè)務
◇為自己的錯誤負責?!拔揖褪沁@樣的”是不能接受的托詞。能找到自己的失誤。
◇成為一個領導者,善于溝通和激勵。
◇搞清楚你在為誰服務
◇沒有絕對正確的答案(更好的方法總是存在的)。展示并討論你的代碼,不要帶著感情因素——你的代碼并不等于你本人。
◇明白完美是漸進的

適當嘗試一些冒險——尤其是能令人感到害怕的冒險。當你嘗試之后,將體會到出乎意料的興奮。(在冒險的過程中)最好不要刻意去計劃某個特定的結(jié)果。當你過于注重結(jié)果,你往往會錯過那些真正有價值的問題。我的冒險往往是這樣開始的——“我們先做些試驗,看看它會把我們帶到什么地方”。

或許某些人會對我的回答感到失望,并回復我說:“是的,這很有趣也很有用。但我到底應該學什么?C++還是Java?” 我再重復一次:并不是所有的問題都有一個唯一的簡單的答案。問題的關(guān)鍵不在于選擇某個編程語言,然后掌握之。問題的關(guān)鍵在于:持續(xù)學習,并且很多時候,有不止一個選擇。 相信我所說的,你的生活會更精彩!

原文出處:
http://www.artima.com/weblogs/viewpost.jsp?thread=259358

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容