接下來的兩年你可能需要這五種語言!
對於處在程式設計世界的我們來說,現在已經走到了一個轉折點。十年前,程式設計師們對動態語言趨之若鶩。對我們中的大部分人來說,動態語言不僅使程式設計變得更加簡單,同時也意味著一種時尚。時至今日,動態語言不再享有特別的青睞,現在的程式設計師使用新語言和舊語言的搭配來開發專案。我不禁要問,為了保持自身的競爭力,哪些程式語言是程式設計師們最需要永久掌握的?
在我們討論哪些程式語言在未來會吃香這個問題之前,先來看看不同程式語言之間的的異同。
靜態語言 vs. 動態語言
當我們說到動態語言時,這個“動態”實際上說的是變數型別。使用動態語言編寫程式的時候,可以宣告一個變數,在程式執行的過程中又可以改變這個變數的型別。與動態語言相對的是靜態語言,或者叫強型別語言。比如C++和Java就是強型別的語言,而JavaScript,PHP和Perl是動態型別的語言。
在C++中,宣告變數的時候必須同時指定變數的型別。在程式執行的過程中,如果試圖去改變這個變數的型別,編譯器就會報錯。這在Java中也是一樣。
但是JavaScript不一樣,在JavaScript程式執行過程中可以改變變數的型別。事實上,在宣告變數的時候就不需要指定這個變數的型別,在使用變數的時候,可以先把一個整數賦值給這個變數,然後又用一個字串覆蓋這個整數,這在動態型別的語言中都是允許的。
儘管動態語言在最近才大行其道,可實際上這個概念在50年前就已經提出來了。
函式式語言
隨著動態語言的發展,人們對函式式語言的興趣也越來越大。在函式式語言中,函式本身可以被儲存在變數中,儲存在變數中的函式又可以作為引數傳遞給另外的函式。現在的大多數語言都在一定程度上支援函數語言程式設計。比如說C++,C++允許程式設計師將指標傳遞給函式。JavaScript等一些語言使函式的傳遞變得更加容易。所以,一般認為C++不是一個真正意義上的函式式語言,而認為JavaScript是函式式語言,而Haskell一般被認為是函式式語言的絕佳示例。
垃圾回收機制
理論上來說,只要你正確書寫程式碼,你就不會有任何bugs。這聽起來很美好。可實際上,當你和許多其他程式設計師合作完成一個大專案時,有一個bug會經常出現,這就是記憶體洩露。你定義了一個變數,使用完這個變數之後卻沒有及時回收這部分記憶體,這時我們就說發生了記憶體洩露。如果發生了記憶體洩露又沒有及時發現,隨著程式執行時間的增加,程式越來越大,直到消耗完系統的所有記憶體,然後系統崩潰。sounds terrible!
你可能會說,每次使用變數之後及時釋放記憶體,記憶體洩露不就不會發生了?想法是好的,可實際情況可能比這要複雜的多。比如說,你申請了一個連結串列來儲存資料,這個連結串列被傳遞到另外一個函式,這個函式是別人編寫的,在別人編寫的這個函式中,將這個連結串列複製了一份,但是你並不知道,你說是應該刪除這個連結串列還是繼續保留?基於這種情況,程式設計師們想到了一個變通的辦法:將記憶體回收的工作交給系統來做。當你不再使用某個變數,系統通過掃描記憶體找到這個不再使用的記憶體,然後主動回收,這就叫做垃圾回收機制。對新開發出來的語言來說,這是一個非常重要的特徵。垃圾回收背後的思想是使程式設計更加容易,從而讓程式設計師將精力放在創造偉大的軟體之上。
需要說明的是,確實存在幾種不同的垃圾回收機制:一種是系統定期掃描記憶體,發現那些不再使用的記憶體;另外一種是系統為每一個變數保留一個tab,一旦發現變數不再使用,馬上刪除之。從技術上來說,後者並不是一種垃圾回收機制,而是“引用計數”,但是達到的效果是一致的。
虛擬機器
當Java在20世紀90年代中期橫空出世的時候,人們對它不是直接將程式碼編譯成組合語言這一點十分在意。和C++相反,Java在編譯的時候先把程式編譯成一個叫位元組碼的中間程式碼。在執行的時候,系統呼叫虛擬機器執行位元組碼,有時候甚至只是將位元組碼編譯成彙編程式碼。這種編譯方式剛剛出來的時候,程式設計師們抱怨其速度慢,當然現在已經不成問題。許多語言採用虛擬機器的方式執行,比如說前面提到的Java、C#等。現在這種型別的語言在速度上得到了長足的發展。
程式語言
說了這麼多,那麼程式設計師到底應該學習哪些語言呢?下面列舉了五種在未來工作中有豐富需求的語言。除此之外,我還列舉了第六種語言,作為一個“honorable mention”。
JavaScript,HTML5和CSS3:從技術上來說,HTML5並不是一種語言,而是一項技術,這項技術和CSS3、JavaScript一起使你能夠構建基於Web的應用。你可以建立執行在瀏覽器中的軟體,這樣做的好處是,你構建的應用將會擁有前所未有的移植性——幾乎可以在所有的裝置上執行,包括手機。幾年前,Facebook開始使用HTML5來構建他們的手機應用,他們超前了這個時代,那時HTML5還不成熟。一段時間後,他們迴歸了傳統模式。過去兩年中,瀏覽器紛紛開始實現最好的HTML5技術,對JavaScript的需求隨之增加。如果想保持你的競爭力,這是一項你必須學習的技術。(在伺服器端,很多大公司以Node.js的方式使用JavaScript)。
JavaScript示例:
下面這個例子展示了JavaScript是怎麼將一個函式儲存到變數中,然後又傳遞給另外一個函式的。JavaScript方面的資源非常多,權威指南,參考Mozilla Developer Network,新手教程,參考以下網站。
var myfunc = function() { alert(‘hi’); }; setTimeout(myfunc, 2000);
C#:在15年前,Microsoft創造了C#,從那時起,C#不斷髮展壯大。C#的語法類似於Java(同時也類似於C++)。C#程式設計軟體首選Visual Studio,免費版和付費版都有。
C#是一種強型別的語言,帶有一個虛擬機器。最初的發行版對函數語言程式設計的支援非常少,在2006前後,Microsoft為這門語言加入了一些函數語言程式設計的特徵。和Java一樣,C#也有自己的垃圾回收機制。
C# 示例:
示例定義了一個叫做Program的類,Program包含一個叫做Main的函式。程式從Main函式開始執行。Main函式定義了一個強型別的整形變數x,並且在螢幕上列印x的值。學習C#方面的更多知識,移步Microsoft’s official site。
using System; class Program { static void Main() { int x = 1000; Console.WriteLine(x); } }
Java:Java即將迎來自己的20歲生日,時至今日,Java還在不斷的發展、成熟。在2004年,我的一位同事說這是一門“玩具語言”。經歷了早期的成長之痛後,Java早已不是一門玩具語言:它支撐起了不可勝數的網站和資料庫,開源office套件也是用Java開發的。現在來看,Java的前景依舊一片光明。
Java是一種強型別的語言,執行在自帶垃圾回收機制的虛擬機器中。儘管不是一種函式式語言,還是帶有一些函數語言程式設計的特徵。
Java示例:
Java和C#在很多方面類似。在Java程式中,從main函式開始執行。像上面提到的C#示例一樣,在main函式中定義了一個整形的強型別變數x,並且在螢幕上列印x的值。學習更多Java知識,參考official documentation。
public class HelloWorld { public static void main(String[] args) { int x = 1000;| System.out.println(x); } }
PHP:PHP是一種易用的通用程式語言。其語法和Java、C++類似。在一個非常簡單的層次上來說,PHP用於在網頁中嵌入可變化的文字內容。比如說,在你的網頁中可能存在列印當前日期的PHP程式碼,當你把網頁程式碼送到瀏覽器,相應的PHP程式碼就會在螢幕上列印出當前日期。PHP能做的遠比在網頁上列印日期多。PHP的類庫能夠運算元據庫(幾乎你能想到的任何資料庫都能處理),能進行科學計算,能處理文字。PHP的未來依舊一片光明。
PHP示例:
PHP程式碼嵌入在HTML文件之中。這段PHP程式碼將時區設定為Los Angeles,然後列印出當前時間。瀏覽器解析HTML文件的時候,PHP程式碼部分被程式碼的輸出結果所取代。所以最終顯示在螢幕上的是“Hello! The current time is”,後面是當前時間。學習更多PHP相關知識,參考這個網站。
<html> <body> Hello! The current time is <?php date_default_timezone_set(‘America/Los_Angeles’); echo (strftime(‘%c’)); ?> </body> </html>
Swif:這是一門全新的語言,蘋果製造。一般來說我不會推薦人們學習一門全新的語言。但是要知道我們說的是蘋果,並且現在你已經能使用這門全新的語言來建立iOS應用了。事實上,已經有跡象顯示Swift將會成為iOS平臺程式設計的未來。Swift的語法非常像JavaScript,但是沒有分號和括號。
Swift是一種強型別的語言,執行在帶垃圾回收機制的虛擬機器中。
Swift示例:
示例中定義了一個叫做str的變數,儲存一個字串。儘管沒有明確指出str的型別,但是Swift是強型別的,編譯器通過賦值語句右邊的字串判斷出str是字串型別。學習Swift的更多知識,參考蘋果官網的相關頁面。
var str = “Hello, World!” println (str)
鼓勵獎項:
Erlang是愛立信的工程師在1986年發明的程式語言。這本來是通訊領域專用的程式語言,現在已經發展成一門通用的程式語言,並且在基於雲的、高效能的平行計算中大行其道。現在人們使用Erlang編寫出了一些強大的軟體,比如說CouchDB和Riak。這是一門與眾不同的語言,其處理字串的方式非常奇怪,但是也很容易學習。
我們應該學習Erlang嗎?雖然需要Erlang的工作不多。但是,如果你真正掌握了這門語言,那你很可能得到一份極好的工作。這是一個抉擇。在真正掌握這門語言之前,你需要投入大量的精力,一旦你學成,回報也很高。
Erlang 示例:
下面的示例來自這篇部落格,這是“hello world”示例的複雜版本。記住,Erlang是一門成熟的語言,如果你真的打算學習這門語言,參考前面提到的部落格和這個網站。
-module(hello). -export([start/0]). start() -> spawn(fun() -> loop() end). loop() -> receive hello -> io:format(“Hello, World!~n”), loop(); goodbye -> ok
寫在最後
程式設計師肯定是在哪都能找到工作,但不一定是你特別喜歡的職位,關鍵還在於學習真正能用得著的技術,找到那份屬於你的好工作。學習JavaScript、C#、Java、PHP、C++不會有錯。如果你開始學習Swift,未來的就業形式一片大好。如果你想嘗試一把高效能程式設計,看看Erlang,儘管需要Erlang的工作可能不會馬上出現。不管你現在在致力於哪一門語言,都要腳踏實地的學到精,這是關鍵。
相關文章
- 接下來的兩年你可能需要這五種語言
- 未來兩年你必須掌握的五種程式語言
- 接下來該學哪種程式語言
- Dice :這 5 種程式語言未來可能各自成王
- 你需要掌握的三種程式語言
- 2015年你需要學習的15種程式語言
- 5種你可能從未聽說過的程式語言
- 你真的需要了解多種程式語言嗎?
- 你的程式語言還在“高掛”?那可能是這十種工具/庫沒用好
- 5種可能在10年後消失的開發語言
- 你可能也罵過這兩個面試題!面試題
- 易語言執行js的兩種方式JS
- 校招季到來,你可能需要這一份求職作戰計劃!求職
- 未來五年最具前景的一門程式語言是什麼?
- 最適合人工智慧的6種程式語言 —— 有1種你能運用好,但3種你可能不知道!人工智慧
- 初創企業產品需要適配多少種語言?到2020年需要48種
- 盤點:你最可能面對的五種網路攻擊
- 聊聊 C 語言和 ABAP 這兩門程式語言的關係
- 用72種語言說愛你
- 13 種程式語言名稱的來歷
- 掌握這幾種開發語言,讓你玩轉人工智慧人工智慧
- SQL語句大全,你需要的SQL在這裡SQL
- 你的程式語言能這樣做嗎?
- C語言的角落——這些C語言不常用的特性你知道嗎?C語言
- 為什麼《七週七語言》選中的是這幾種語言?
- 好你個C語言,原來還有這麼多副面孔!C語言
- 線上分享?原來就這五種動機
- 幫你提升 Python 的 27 種程式語言Python
- 未來5年最掙錢的程式語言是哪個?這些免費教程帶你入門
- 【c語言】期望輸出str = hello world 的兩種方法C語言
- 存在可能替代C語言的其他語言嗎? -Erik EngheimC語言
- 印尼接下來的重要消費市場你瞭解嗎?
- 你可能不需要VueVue
- 這五種ios簽名型別你知道多少?iOS型別
- 關於Go語言,這5種學習訣竅幫你省去50%精力!Go
- 我們需要一種其他人能使用的程式語言
- 你不可不知的9種Lisp語言思想Lisp
- 你應該學習哪種程式語言?