新手程序員應(yīng)該選擇哪個(gè)編程語(yǔ)言
發(fā)表日期:2016-12-02 13:38:31   文章編輯:紅海小編   瀏覽次數(shù):0
很多大一的同學(xué),還有一些想要轉(zhuǎn)行的同學(xué),最近總是給我拋出這樣的話題“應(yīng)該學(xué)習(xí)什么語(yǔ)言,怎樣快速的學(xué)好這門語(yǔ)言”。好多同學(xué),包括我在內(nèi),很多時(shí)候功利性都很強(qiáng),沒有耐心,想要快速的看到結(jié)果,得到回報(bào)。學(xué)習(xí)一門語(yǔ)言往往是為了快速的找到一個(gè)工作,期待獲得更高的報(bào)酬,的確如此,很多時(shí)候,我們都是為了生計(jì)而編程,把編程看做了手段。回顧一下Bruce的這些話,深刻的認(rèn)識(shí)到了自己的不足,就好比初次讀這篇文章時(shí)根本就沒耐心讀下去,說(shuō)的什么什么啊,完全和問(wèn)題不搭邊。然而,反復(fù)的揣摩,并反思一下這些年自己的態(tài)度,的確要走的路還很遠(yuǎn)。 Bruce Eckel 是編程界的大牛,著有大名鼎鼎的《Thinking in C++》和《Thinking in Java》。本文是他對(duì)程序員(尤其是新手)的忠告。
大家總是問(wèn)一個(gè)錯(cuò)誤的問(wèn)題:“我應(yīng)該學(xué)習(xí)C++還是Java?”在本文中,我將告訴大伙兒:對(duì)于選擇編程生涯真正需要關(guān)注的是哪些問(wèn)題。
請(qǐng)注意,這篇文章的目標(biāo)讀者并不是那些已經(jīng)做出自己選擇的人。(對(duì)于這些人而言)你會(huì)繼續(xù)自己的編程生涯,而不管別人會(huì)怎么說(shuō)。因?yàn)樗呀?jīng)滲透到你的血液中,你已經(jīng)無(wú)法擺脫。你已經(jīng)知道答案:C++、Java、Shell腳本、Python、還有其它一大堆的語(yǔ)言和技術(shù),你都理所當(dāng)然地會(huì)去學(xué)習(xí)。甚至有可能你才僅僅14歲,就已經(jīng)知道好幾種不同的語(yǔ)言。
問(wèn)我這樣的問(wèn)題的人可能來(lái)自其他行業(yè),或者來(lái)自諸如Web開發(fā)之類的領(lǐng)域。他們知道HTML是一種類編程語(yǔ)言,而且想嘗試構(gòu)建某些更大型的應(yīng)用。但我特別希望,當(dāng)你在問(wèn)這個(gè)問(wèn)題時(shí),你已經(jīng)意識(shí)到了想要在計(jì)算機(jī)領(lǐng)域取得成功,你需要掌握自學(xué)能力,而且永不停息。
在這個(gè)領(lǐng)域做得越多,我越覺得軟件開發(fā)比任何行業(yè)都更接近于寫作。 我們從來(lái)不知道是什么造就了優(yōu)秀的作者,我們只知道什么時(shí)候我們會(huì)喜歡某個(gè)人的文字。編程不是一種工程,僅需要把東西從入口倒進(jìn)去,然后再轉(zhuǎn)動(dòng)手柄。把軟件開發(fā)看成確定性的,是一個(gè)誘人的想法。因?yàn)檫@個(gè)想法,人們總想搞出一些工具來(lái)幫我們開發(fā)出想要的軟件。但是我的經(jīng)驗(yàn)告訴我,事實(shí)并非如此——人的重要性遠(yuǎn)高于流程。而軟件是否運(yùn)行在一部精確的機(jī)器上已經(jīng)越來(lái)越不重要了——這猶如測(cè)不準(zhǔn)原理對(duì)人類的影響。
我的父親是造房子的,小時(shí)候我偶爾會(huì)幫忙打下手,放放磚塊之類。他和他的木工告訴我,他們是為我好才讓我干這些活——這樣我就不至于走入這個(gè)行業(yè)。事實(shí)確實(shí)是這樣。
我們不妨把軟件開發(fā)比作蓋房子。造房子的人當(dāng)然不可能完全一樣。這些人里面有:混凝土工、屋頂工、管道工、電工、磚瓦工、水泥工、瓦片工、搬運(yùn)工、粗木工、細(xì)木工。當(dāng)然,還有工頭。每個(gè)工種都需要相應(yīng)的技能,這些技能都需要花時(shí)間和精力去掌握。跟軟件開發(fā)一樣,造房子也是一個(gè)“建立/推翻”的過(guò)程。如果你想很快地獲得回報(bào),你可能從搬運(yùn)工和磚瓦工開始做,這樣的話,你無(wú)需太多的學(xué)習(xí)曲線就可以獲得回報(bào)。當(dāng)需求很多時(shí),你的工作會(huì)很穩(wěn)固,甚至收入也可能提升——如果沒有足夠的人手的話。但是,一旦行情不妙,木匠甚至工頭就可能把磚瓦工一腳踢開。
當(dāng)互聯(lián)網(wǎng)剛剛興起時(shí),僅僅是花一點(diǎn)時(shí)間學(xué)習(xí)HTML,你就可以得到一份薪水豐厚的工作。但是當(dāng)形勢(shì)慘淡時(shí),對(duì)于技能的要求更高了——HTML程序員(就像搬運(yùn)工和磚瓦工一樣)第一個(gè)被拋棄了,而擁有更高技能的程序員則留了下來(lái)。
我想說(shuō)的是: 除非你準(zhǔn)備活到老學(xué)到老,不然的話,不要進(jìn)入這個(gè)行業(yè)!編程看起來(lái)似乎是一個(gè)高收入而又穩(wěn)定的工作。但要做到這一點(diǎn),唯一的途徑是:始終讓自己更有價(jià)值。
當(dāng)然,你總能找到例外。總有那么一些人,僅僅學(xué)了一門編程語(yǔ)言,就可以勝任留在一個(gè)崗位上,而不需要增長(zhǎng)他的技能。但他們只是幸免于難而已,他們最終無(wú)疑是很脆弱的。為了不讓自己變得脆弱,你需要持續(xù)的提高自己,通過(guò)閱讀、加入用戶組、參加研討會(huì)...... 你學(xué)得越深入,你就越有價(jià)值,也就意味著你有更好的職業(yè)前景,可以配得上更高的薪水。
另一個(gè)方法是:先大致了解這個(gè)領(lǐng)域,找到最適合你的地方。打個(gè)比方:我的兄弟對(duì)軟件很感興趣,也入了這行,只不過(guò)他的工作是安裝、維修、升級(jí)電腦。他總是一絲不茍,所以當(dāng)他把電腦搞好,一定會(huì)很完美——不光是軟件,連電線都會(huì)被仔細(xì)地捆好。他總是生意興隆,遠(yuǎn)超出他的精力所能及。他甚至都不用擔(dān)心 .com 泡沫的崩潰。顯然他的飯碗不容易被搶走。
我在高校里待了很久,甚至還在UCLA(加州大學(xué)洛杉磯分校)進(jìn)修博士學(xué)位,后來(lái)又幸運(yùn)地終止了。我說(shuō)“幸運(yùn)”是因?yàn)槲也辉傧矚g呆在學(xué)校,而我之前在高校待了那么久,只是因?yàn)槲液芟硎芩5宜硎艿模旧鲜遣粍?wù)正業(yè)的東西——藝術(shù)和舞蹈課,在校報(bào)工作,還有一小撮計(jì)算機(jī)課程(之所以說(shuō)計(jì)算機(jī)課程“不務(wù)正業(yè)”,是因?yàn)槲冶究剖俏锢韺I(yè),研究生才是計(jì)算機(jī)專業(yè))。雖然我在學(xué)術(shù)上遠(yuǎn)談不上卓越(有意思的是很多當(dāng)時(shí)也許不會(huì)接受我這個(gè)學(xué)生的學(xué)校現(xiàn)在卻用我的書做教材)。我真的很享受作為學(xué)生的日子,當(dāng)我完成博士課程,也許會(huì)以一個(gè)教授的身份終老一生。
但就如現(xiàn)在看到的,我在學(xué)校里最大的收獲恰恰來(lái)自我那些“不務(wù)正業(yè)”的課程,它們拓展了我的思維,使之超越了“我們已經(jīng)知道的東西”。在計(jì)算機(jī)領(lǐng)域中,你總是為某種目標(biāo)而編程。你對(duì)目標(biāo)了解得越多,你就做得越好。我遇到過(guò)一些歐洲的研究生,他們需要結(jié)合其它專業(yè)領(lǐng)域來(lái)搞編程,他們的論文需要解決這個(gè)專業(yè)領(lǐng)域的特定的問(wèn)題。
了解編程之外的領(lǐng)域,將會(huì)極大得提高你解決問(wèn)題的能力 (就如同多學(xué)幾種編程語(yǔ)言將極大地提高你的編程技能)。很多時(shí)候,我發(fā)現(xiàn)僅僅學(xué)習(xí)計(jì)算機(jī)專業(yè)的學(xué)生,比那些(除了計(jì)算機(jī)之外)擁有其它背景的學(xué)生,在思維上有更多的局限性。因?yàn)楹笳哂兄鼑?yán)謹(jǐn)?shù)乃季S,也不那么容易想當(dāng)然。
有一次我組織了一次會(huì)議,其中一個(gè)議題是:理想的應(yīng)聘者有哪些特征:
◇把學(xué)習(xí)當(dāng)成生活方式。比如:你應(yīng)該知道不止一種語(yǔ)言,沒有什么比學(xué)習(xí)一門新語(yǔ)言更能讓你開闊眼界了。
◇知道如何獲取知識(shí)
◇Study prior art
◇善用工具
◇學(xué)會(huì)把事情簡(jiǎn)化
◇理解業(yè)務(wù)
◇為自己的錯(cuò)誤負(fù)責(zé)。“我就是這樣的”是不能接受的托詞。能找到自己的失誤。
◇成為一個(gè)領(lǐng)導(dǎo)者,善于溝通和激勵(lì)。
◇搞清楚你在為誰(shuí)服務(wù)
◇沒有絕對(duì)正確的答案(更好的方法總是存在的)。展示并討論你的代碼,不要帶著感情因素——你的代碼并不等于你本人。
◇明白完美是漸進(jìn)的
適當(dāng)嘗試一些冒險(xiǎn)——尤其是能令人感到害怕的冒險(xiǎn)。當(dāng)你嘗試之后,將體會(huì)到出乎意料的興奮。(在冒險(xiǎn)的過(guò)程中)最好不要刻意去計(jì)劃某個(gè)特定的結(jié)果。當(dāng)你過(guò)于注重結(jié)果,你往往會(huì)錯(cuò)過(guò)那些真正有價(jià)值的問(wèn)題。我的冒險(xiǎn)往往是這樣開始的——“我們先做些試驗(yàn),看看它會(huì)把我們帶到什么地方”。
或許某些人會(huì)對(duì)我的回答感到失望,并回復(fù)我說(shuō):“是的,這很有趣也很有用。但我到底應(yīng)該學(xué)什么?C++還是Java?” 我再重復(fù)一次:并不是所有的問(wèn)題都有一個(gè)唯一的簡(jiǎn)單的答案。問(wèn)題的關(guān)鍵不在于選擇某個(gè)編程語(yǔ)言,然后掌握之。問(wèn)題的關(guān)鍵在于:持續(xù)學(xué)習(xí),并且很多時(shí)候,有不止一個(gè)選擇。 相信我所說(shuō)的,你的生活會(huì)更精彩!
更多網(wǎng)站建設(shè)相關(guān)知識(shí)交流可聯(lián)系本溪紅海傳媒(m.reviseyourwebsite.com)(專注于本溪紅海傳媒廣告,本溪網(wǎng)站建設(shè),本溪網(wǎng)頁(yè)設(shè)計(jì),本溪做網(wǎng)站,網(wǎng)絡(luò)品牌策略建議)。