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

edithfang發表於2014-07-09

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



對iOS開發者,Apple有Swift;而Facebook 有 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、編譯器、文件等)以及贏得開發者的支援。大公司們在這兩方面尤其擅長。

還有一個事實,現有語言通常很難硬塞進如今的複雜程式碼框架中。舉個例子,Facebook決定發明的Hack,就是一個普遍適用於Web開發的指令碼語言PHP的超集合(superset)。

Facebook 的Hack最近已經比較普遍,其主要目標就是改進程式碼的穩定性,針對這一目的,它強制在程式執行之前對資料型別進行檢測。這樣的檢測確保了一個程式,比方 說,不會將一個整數解析為一個字串,這樣的錯誤如果捕獲不到很可能會導致不

可預知的後果。在Hack中,這些檢測會預先執行,以便程式設計師能夠在程式上線 前早早發現這樣的錯誤。

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

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

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

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

誰說了算

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

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

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

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

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

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

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

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

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

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

相關文章