到底開發者需要掌握多少門語言?

jopen 10年前發布 | 12K 次閱讀 編程語言

諸如Apple、非死book及Google這樣的大公司正在開發他們自己的編程語言,開發者們被迫只有適應。前不久的世界開發者大會上,Apple公布了它的新開發語言Swift。這是最近大型技術公司們開發的一大波新語言中的最新成員,這些新語言某種程度上都是專門應用于他們自己的平臺。

到底開發者需要掌握多少門語言?

對iOS開發者,Apple有Swift;而非死book 有 Hack —— 一門用于后端開發的語言。與此同時,Google已經擁有了它自己的Javascript替代者 Dart,以及一門新的通用編程語言Go。

這一波又一波的新語言,給開發者們帶來了許多問題。也許其中最嚴重的問題正如我一位同事Adriana Lee在Apple發布Swift后所說:

(開發者們到底還得學習多少門語言?) ——Adriana Lee (@adra_la) June 2, 2014

計算機語言的通天塔

目前已經存在的編程語言有數百種,同時還有更多的語言正在涌現。其中許多都是被設計用在相對較窄的應用程序范圍內,大多數甚至從未走出過項目小組的范圍。

與此類似,大技術公司開發的新語言其實也是伴隨著公司一起成長的。通用語言的鼻祖,C語言,就源于上世紀70年代初的AT&T貝爾實驗室。Java,目前作為Android app開發的主要語言,誕生于上世紀90年代Sun公司的Microsystems系統

發 展到現在,不同之處在于,公司們擁抱新語言、從而想要延伸的特定商業目標的范圍不一樣了 —— 這一過程同時建立了一個忠心耿耿的開發者基礎,他們被牢牢鎖定在了某個公司的特定平臺上。這類一石二鳥的戰略,最早可以追溯到Sun對Java的采用,當 時公司就將其作為了挑戰微軟PC桌面統治地位的一種手段。(事情雖然沒有像Sun計劃的那樣發展下去,但在Google轉向Android之前,Java 大體上也算是在企業中間件系統中找到了自己的一席之地。)

這么看來,Apple的Swift其目標也就很明確了。Swift應該不會辜負公 司前期的大肆宣傳,通過磨平Objective-C那粗糙的毛邊,看起來它能夠成功簡化iOS app開發者的開發過程。但是同樣還是這些開發者,他們卻需要學習一門新語言的輸入和輸出,而這些功能很可能在其他地方都不會用到。

大公司們為什么要重復造輪子

“不要重復造輪子”這一哲學在絕大多數開發者心中根深蒂固,大公司們對此卻并不買賬。那他們為何不只是修改下現有語言用于新的用途呢?

答案很簡單,公司們發明他們自己的語言,是因為他們有這個能力。設計一門新語言可能很復雜,但對資源要求卻并不很高。困難之處也就在對其提供支持,包括提供軟件資源(共享代碼庫、API、編譯器、文檔等)以及贏得開發者的支持。大公司們在這兩方面尤其擅長。

還有一個事實,現有語言通常很難硬塞進如今的復雜代碼框架中。舉個栗子,非死book決定發明的Hack,就是一個普遍適用于Web開發的腳本語言PHP的超集合(superset)。

非死book 的Hack最近已經比較普遍,其主要目標就是改進代碼的穩定性,針對這一目的,它強制在程序運行之前對數據類型進行檢測。這樣的檢測確保了一個程序,比方 說,不會將一個整數解析為一個字符串,這樣的錯誤如果捕獲不到很可能會導致不可預知的后果。在Hack中,這些檢測會預先執行,以便程序員能夠在程序上線 前早早發現這樣的錯誤。

據非死book的Hack項目組核心成員Julien Verlaguet透露,公司之前嘗試過用一門現有語言實現更高效的編程。但是非死book的大部分代碼都是由PHP編寫的,公司實際上已經建立了一 個支持PHP及其分支的軟件架構。即使能夠讓PHP同其他語言編寫的代碼協同工作,實現的難易程度和運行速度都無法滿足要求。

“比如說我們 嘗試用Scala重寫PHP代碼庫,”Verlaguet說。“Scala是一門設計優秀的漂亮語言,但是它與PHP完全不兼容。每次我需要從Scala 的代碼庫部分調用PHP的時候,都會損失性能。我們很愿意使用一門現有語言,但是對于我們來說,這條路行不通。”

于是,非死book發明了Hack,它與PHP一樣能夠共用公司現有的架構。Verlaguet介紹說,非死book的代碼庫主體已經從PHP遷移到了Hack,同時公司將Hack開源,希望獨立開發者們能夠幫公司找到非死book以外的用途。

“你仍然可以使用PHP,”他說,“但是我們希望你有使用Hack的欲望。”

誰說了算

公司和開發者之間有一種微妙的平衡。公司可以按照自己的喜好發明語言。但是如果開發者都不愿使用這門語言,那就沒人用了,公司以外的人也就沒人愿意將自己的職業生涯托付給這家公司。

公 司在開發過程中同時使用不同的語言,這并不少見。例如,你可能用Objective-C開發iOS app,但卻用Java開發Android app。對開發者來說,這從來都不是癥結所在,因為Objective-C和Java都是通用面向對象語言。它們用途廣泛適用于很多場合。

然 而,Hack、Dart、Go和Swift,到目前為止,仍然只適用于嚴格特定公司的編程解決方案,往往和公司選擇的編程環境相對應。誠然,現在下結論可 能還太早。比方說Hack,就可以用在一些后端的實現中;它只是太新了,以至于非死book還沒有任何數據供人們如此使用。

不是開發者 不能學習多門語言。事實上,大多數人已經掌握了多門語言。這好比羅曼斯語(一種由拉丁語演變而成的語言),如果你會說西班牙語,再去學法語就比那些不會西 班牙語的人簡單許多。與此類似,如果你已經會Java,再學Ruby或Perl就簡單得多。如果你會PHP,基本上就已經學會了Hack。

與此相反,學習多門語言更多的是一個習慣問題。如果Java已經解決了你的問題,你就不再有動力去學Ruby。如果你用Objective-C編寫iOS app感覺很爽,你就不會有強烈的意愿去學Swift。

另外,對于一些開發者來說,封閉生態系統的語言只會使每個人的生活變得更糟。例如,自由設計師Jack Watson-Hamblin就告訴我說,像Apple這樣強勢推出Swift,其實是在冒險增加程序員的負擔,同時將開發者社區割裂開來:

程序員掌握多門語言固然重要,但是不斷強迫他們緊跟新語言,卻是行不通的。如果我正在開發一個簡單的跨平臺app,我可不想被迫掌握四門語言再來完成它。如果真的需要,我也只想使用一門語言。

Watson- Hamblin就主張說,當每家公司都為了自家需要發明自己的語言時,程序員的注意力被分散,開發的視野也局限于一種,這只會拖慢整個開發進程。他說, “如果拿公司負責一門語言與負責一個開源社區相比較,這兩者的區別就好比一家大企業與一個初創小公司的區別”。社區生來就更加靈活,適應能力更強。

當然,Apple有許多非常好的理由推出Swift從零開始,就像當初非死book發明Hack的時候一樣。我并不是說,大公司不會強迫開發者接受這種改變,在這方面,有些公司一直都很讓人討厭。

“新語言的發明,伴隨著霸權的支配,”Verlaguet說,“被迫不停追趕,確實令人沮喪,但另一方面,你又多了一種解決問題的新語言。反過來想想,要是全世界的程序員都用同樣一門語言做所有事情,即使啥都湊合著能干,這門語言也一定干得不怎么樣”。

題圖來自于Flickr user Ruiwen Chua,CC 2.0

譯者:Mr小眼兒 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!