對于處在編程世界的我們來說,現(xiàn)在已經(jīng)走到了一個(gè)轉(zhuǎn)折點(diǎn),。十年前,,程序員們對動(dòng)態(tài)語言趨之若鶩。對我們中的大部分人來說,,動(dòng)態(tài)語言不僅使編程變得更加簡單,,同時(shí)也意味著一種時(shí)尚。時(shí)至今日,,動(dòng)態(tài)語言不再享有特別的青睞,,現(xiàn)在的程序員使用新語言和舊語言的搭配來開發(fā)項(xiàng)目。我不禁要問,,為了保持自身的競爭力,,哪些編程語言是程序員們最需要永久掌握的? 在我們討論哪些編程語言在未來會吃香這個(gè)問題之前,,先來看看不同編程語言之間的的異同,。 靜態(tài)語言 vs. 動(dòng)態(tài)語言 當(dāng)我們說到動(dòng)態(tài)語言時(shí),這個(gè)“動(dòng)態(tài)”實(shí)際上說的是變量類型,。使用動(dòng)態(tài)語言編寫程序的時(shí)候,,可以聲明一個(gè)變量,在程序運(yùn)行的過程中又可以改變這個(gè)變量的類型,。與動(dòng)態(tài)語言相對的是靜態(tài)語言,,或者叫強(qiáng)類型語言,。比如C++和Java就是強(qiáng)類型的語言,,而JavaScript,PHP和Perl是動(dòng)態(tài)類型的語言,。 在C++中,,聲明變量的時(shí)候必須同時(shí)指定變量的類型。在程序運(yùn)行的過程中,,如果試圖去改變這個(gè)變量的類型,,編譯器就會報(bào)錯(cuò)。這在Java中也是一樣,。 但是JavaScript不一樣,,在JavaScript程序運(yùn)行過程中可以改變變量的類型。事實(shí)上,,在聲明變量的時(shí)候就不需要指定這個(gè)變量的類型,,在使用變量的時(shí)候,可以先把一個(gè)整數(shù)賦值給這個(gè)變量,,然后又用一個(gè)字符串覆蓋這個(gè)整數(shù),,這在動(dòng)態(tài)類型的語言中都是允許的,。 盡管動(dòng)態(tài)語言在最近才大行其道,可實(shí)際上這個(gè)概念在50年前就已經(jīng)提出來了,。 函數(shù)式語言 隨著動(dòng)態(tài)語言的發(fā)展,,人們對函數(shù)式語言的興趣也越來越大。在函數(shù)式語言中,,函數(shù)本身可以被存儲在變量中,,存儲在變量中的函數(shù)又可以作為參數(shù)傳遞給另外的函數(shù)。現(xiàn)在的大多數(shù)語言都在一定程度上支持函數(shù)式編程,。比如說C++,,C++允許程序員將指針傳遞給函數(shù)。JavaScript等一些語言使函數(shù)的傳遞變得更加容易,。所以,,一般認(rèn)為C++不是一個(gè)真正意義上的函數(shù)式語言,而認(rèn)為JavaScript是函數(shù)式語言,,而Haskell一般被認(rèn)為是函數(shù)式語言的絕佳示例,。 垃圾回收機(jī)制 理論上來說,只要你正確書寫代碼,,你就不會有任何bugs,。這聽起來很美好??蓪?shí)際上,,當(dāng)你和許多其他程序員合作完成一個(gè)大項(xiàng)目時(shí),有一個(gè)bug會經(jīng)常出現(xiàn),,這就是內(nèi)存泄露,。你定義了一個(gè)變量,使用完這個(gè)變量之后卻沒有及時(shí)回收這部分內(nèi)存,,這時(shí)我們就說發(fā)生了內(nèi)存泄露,。如果發(fā)生了內(nèi)存泄露又沒有及時(shí)發(fā)現(xiàn),隨著程序運(yùn)行時(shí)間的增加,,程序越來越大,,直到消耗完系統(tǒng)的所有內(nèi)存,然后系統(tǒng)崩潰,。sounds terrible,! 你可能會說,每次使用變量之后及時(shí)釋放內(nèi)存,,內(nèi)存泄露不就不會發(fā)生了,?想法是好的,可實(shí)際情況可能比這要復(fù)雜的多,。比如說,,你申請了一個(gè)鏈表來存儲數(shù)據(jù),,這個(gè)鏈表被傳遞到另外一個(gè)函數(shù),這個(gè)函數(shù)是別人編寫的,,在別人編寫的這個(gè)函數(shù)中,,將這個(gè)鏈表復(fù)制了一份,但是你并不知道,,你說是應(yīng)該刪除這個(gè)鏈表還是繼續(xù)保留,?基于這種情況,程序員們想到了一個(gè)變通的辦法:將內(nèi)存回收的工作交給系統(tǒng)來做,。當(dāng)你不再使用某個(gè)變量,,系統(tǒng)通過掃描內(nèi)存找到這個(gè)不再使用的內(nèi)存,然后主動(dòng)回收,,這就叫做垃圾回收機(jī)制,。對新開發(fā)出來的語言來說,這是一個(gè)非常重要的特征,。垃圾回收背后的思想是使編程更加容易,,從而讓程序員將精力放在創(chuàng)造偉大的軟件之上。 需要說明的是,,確實(shí)存在幾種不同的垃圾回收機(jī)制:一種是系統(tǒng)定期掃描內(nèi)存,,發(fā)現(xiàn)那些不再使用的內(nèi)存;另外一種是系統(tǒng)為每一個(gè)變量保留一個(gè)tab,,一旦發(fā)現(xiàn)變量不再使用,,馬上刪除之。從技術(shù)上來說,,后者并不是一種垃圾回收機(jī)制,,而是“引用計(jì)數(shù)”,但是達(dá)到的效果是一致的,。 虛擬機(jī) 當(dāng)Java在20世紀(jì)90年代中期橫空出世的時(shí)候,,人們對它不是直接將代碼編譯成匯編語言這一點(diǎn)十分在意,。和C++相反,,Java在編譯的時(shí)候先把程序編譯成一個(gè)叫字節(jié)碼的中間代碼。在運(yùn)行的時(shí)候,,系統(tǒng)調(diào)用虛擬機(jī)執(zhí)行字節(jié)碼,,有時(shí)候甚至只是將字節(jié)碼編譯成匯編代碼。這種編譯方式剛剛出來的時(shí)候,,程序員們抱怨其速度慢,,當(dāng)然現(xiàn)在已經(jīng)不成問題。許多語言采用虛擬機(jī)的方式運(yùn)行,,比如說前面提到的Java,、C#等?,F(xiàn)在這種類型的語言在速度上得到了長足的發(fā)展。 語言 說了這么多,,那么程序員到底應(yīng)該學(xué)習(xí)哪些語言呢,?下面列舉了五種在未來工作中有豐富需求的語言。除此之外,,我還列舉了第六種語言,,作為一個(gè)“honorable mention”。 JavaScript,,HTML5和CSS3:從技術(shù)上來說,,HTML5并不是一種語言,而是一項(xiàng)技術(shù),,這項(xiàng)技術(shù)和CSS3,、JavaScript一起使你能夠構(gòu)建基于Web的應(yīng)用。你可以創(chuàng)建運(yùn)行在瀏覽器中的軟件,,這樣做的好處是,,你構(gòu)建的應(yīng)用將會擁有前所未有的移植性——幾乎可以在所有的設(shè)備上運(yùn)行,包括手機(jī),。幾年前,,F(xiàn)acebook開始使用HTML5來構(gòu)建他們的手機(jī)應(yīng)用,他們超前了這個(gè)時(shí)代,,那時(shí)HTML5還不成熟,。一段時(shí)間后,他們回歸了傳統(tǒng)模式,。過去兩年中,,瀏覽器紛紛開始實(shí)現(xiàn)最好的HTML5技術(shù),對JavaScript的需求隨之增加,。如果想保持你的競爭力,,這是一項(xiàng)你必須學(xué)習(xí)的技術(shù)。(在服務(wù)器端,,很多大公司以Node.js的方式使用JavaScript),。 JavaScript示例: 下面這個(gè)例子展示了JavaScript是怎么將一個(gè)函數(shù)存儲到變量中,然后又傳遞給另外一個(gè)函數(shù)的,。JavaScript方面的資源非常多,,權(quán)威指南,參考Mozilla Developer Network,,新手教程,,參考以下網(wǎng)站。
C#:在15年前,,Microsoft創(chuàng)造了C#,,從那時(shí)起,,C#不斷發(fā)展壯大。C#的語法類似于Java(同時(shí)也類似于C++),。C#編程軟件首選Visual Studio,,免費(fèi)版和付費(fèi)版都有。 C#是一種強(qiáng)類型的語言,,帶有一個(gè)虛擬機(jī),。最初的發(fā)行版對函數(shù)式編程的支持非常少,在2006前后,,Microsoft為這門語言加入了一些函數(shù)式編程的特征,。和Java一樣,C#也有自己的垃圾回收機(jī)制,。 C# 示例: 示例定義了一個(gè)叫做Program的類,,Program包含一個(gè)叫做Main的函數(shù)。程序從Main函數(shù)開始運(yùn)行,。Main函數(shù)定義了一個(gè)強(qiáng)類型的整形變量x,,并且在屏幕上打印x的值。學(xué)習(xí)C#方面的更多知識,,移步Microsoft’s official site,。
Java:Java即將迎來自己的20歲生日,時(shí)至今日,,Java還在不斷的發(fā)展,、成熟。在2004年,,我的一位同事說這是一門“玩具語言”,。經(jīng)歷了早期的成長之痛后,Java早已不是一門玩具語言:它支撐起了不可勝數(shù)的網(wǎng)站和數(shù)據(jù)庫,,開源office套件也是用Java開發(fā)的?,F(xiàn)在來看,Java的前景依舊一片光明,。 Java是一種強(qiáng)類型的語言,,運(yùn)行在自帶垃圾回收機(jī)制的虛擬機(jī)中。盡管不是一種函數(shù)式語言,,還是帶有一些函數(shù)式編程的特征,。 Java示例: Java和C#在很多方面類似,。在Java程序中,,從main函數(shù)開始運(yùn)行。像上面提到的C#示例一樣,,在main函數(shù)中定義了一個(gè)整形的強(qiáng)類型變量x,,并且在屏幕上打印x的值,。學(xué)習(xí)更多Java知識,參考o(jì)fficial documentation,。
PHP:PHP是一種易用的通用編程語言,。其語法和Java、C++類似,。在一個(gè)非常簡單的層次上來說,,PHP用于在網(wǎng)頁中嵌入可變化的文本內(nèi)容。比如說,,在你的網(wǎng)頁中可能存在打印當(dāng)前日期的PHP代碼,,當(dāng)你把網(wǎng)頁代碼送到瀏覽器,相應(yīng)的PHP代碼就會在屏幕上打印出當(dāng)前日期,。PHP能做的遠(yuǎn)比在網(wǎng)頁上打印日期多,。PHP的類庫能夠操作數(shù)據(jù)庫(幾乎你能想到的任何數(shù)據(jù)庫都能處理),能進(jìn)行科學(xué)計(jì)算,,能處理文本,。PHP的未來依舊一片光明。 PHP示例: PHP代碼嵌入在HTML文檔之中,。這段PHP代碼將時(shí)區(qū)設(shè)置為Los Angeles,,然后打印出當(dāng)前時(shí)間。瀏覽器解析HTML文檔的時(shí)候,,PHP代碼部分被代碼的輸出結(jié)果所取代,。所以最終顯示在屏幕上的是“Hello! The current time is”,后面是當(dāng)前時(shí)間,。學(xué)習(xí)更多PHP相關(guān)知識,,參考這個(gè)網(wǎng)站。
Swif:這是一門全新的語言,,蘋果制造,。一般來說我不會推薦人們學(xué)習(xí)一門全新的語言。但是要知道我們說的是蘋果,,并且現(xiàn)在你已經(jīng)能使用這門全新的語言來創(chuàng)建iOS應(yīng)用了,。事實(shí)上,已經(jīng)有跡象顯示Swift將會成為iOS平臺編程的未來,。Swift的語法非常像JavaScript,,但是沒有分號和括號。 Swift是一種強(qiáng)類型的語言,,運(yùn)行在帶垃圾回收機(jī)制的虛擬機(jī)中,。 Swift示例: 示例中定義了一個(gè)叫做str的變量,存儲一個(gè)字符串。盡管沒有明確指出str的類型,,但是Swift是強(qiáng)類型的,,編譯器通過賦值語句右邊的字符串判斷出str是字符串類型。學(xué)習(xí)Swift的更多知識,,參考蘋果官網(wǎng)的相關(guān)頁面,。
鼓勵(lì)獎(jiǎng)項(xiàng): Erlang是愛立信的工程師在1986年發(fā)明的編程語言。這本來是通信領(lǐng)域?qū)S玫木幊陶Z言,,現(xiàn)在已經(jīng)發(fā)展成一門通用的編程語言,,并且在基于云的、高性能的并行計(jì)算中大行其道?,F(xiàn)在人們使用Erlang編寫出了一些強(qiáng)大的軟件,,比如說CouchDB和Riak。這是一門與眾不同的語言,,其處理字符串的方式非常奇怪,,但是也很容易學(xué)習(xí)。 我們應(yīng)該學(xué)習(xí)Erlang嗎,?雖然需要Erlang的工作不多,。但是,如果你真正掌握了這門語言,,那你很可能得到一份極好的工作,。這是一個(gè)抉擇。在真正掌握這門語言之前,,你需要投入大量的精力,,一旦你學(xué)成,回報(bào)也很高,。 Erlang 示例: 下面的示例來自這篇博客,,這是“hello world”示例的復(fù)雜版本。記住,,Erlang是一門成熟的語言,,如果你真的打算學(xué)習(xí)這門語言,參考前面提到的博客和這個(gè)網(wǎng)站,。
寫在最后 程序員肯定是在哪都能找到工作,,但不一定是你特別喜歡的職位,關(guān)鍵還在于學(xué)習(xí)真正能用得著的技術(shù),,找到那份屬于你的好工作,。學(xué)習(xí)JavaScript、C#,、Java,、PHP,、C++不會有錯(cuò)。如果你開始學(xué)習(xí)Swift,,未來的就業(yè)形式一片大好,。如果你想嘗試一把高性能編程,,看看Erlang,,盡管需要Erlang的工作可能不會馬上出現(xiàn)。不管你現(xiàn)在在致力于哪一門語言,,都要腳踏實(shí)地的學(xué)到精,,這是關(guān)鍵。 原文鏈接:http://code.csdn.net/news/2821055 【編輯推薦】 【責(zé)任編輯:牛小雨 TEL:(010)68476606】
|
|