到底開發(fā)者需要掌握多少門語言?
諸如Apple、Facebook及Google這樣的大公司正在開發(fā)他們自己的編程語言,開發(fā)者們被迫只有適應(yīng)。前不久的世界開發(fā)者大會(huì)上,Apple公布了它的新開發(fā)語言Swift。這是最近大型技術(shù)公司們開發(fā)的一大波新語言中的***成員,這些新語言某種程度上都是專門應(yīng)用于他們自己的平臺(tái)。
對(duì)iOS開發(fā)者,Apple有Swift;而Facebook 有 Hack —— 一門用于后端開發(fā)的語言。與此同時(shí),Google已經(jīng)擁有了它自己的Javascript替代者 Dart,以及一門新的通用編程語言Go。
這一波又一波的新語言,給開發(fā)者們帶來了許多問題。也許其中最嚴(yán)重的問題正如我一位同事Adriana Lee在Apple發(fā)布Swift后所說:
(開發(fā)者們到底還得學(xué)習(xí)多少門語言?) ——Adriana Lee (@adra_la) June 2, 2014
計(jì)算機(jī)語言的通天塔
目前已經(jīng)存在的編程語言有數(shù)百種,同時(shí)還有更多的語言正在涌現(xiàn)。其中許多都是被設(shè)計(jì)用在相對(duì)較窄的應(yīng)用程序范圍內(nèi),大多數(shù)甚至從未走出過項(xiàng)目小組的范圍。
與此類似,大技術(shù)公司開發(fā)的新語言其實(shí)也是伴隨著公司一起成長的。通用語言的鼻祖,C語言,就源于上世紀(jì)70年代初的AT&T貝爾實(shí)驗(yàn)室。Java,目前作為Android app開發(fā)的主要語言,誕生于上世紀(jì)90年代Sun公司的Microsystems系統(tǒng)。
發(fā) 展到現(xiàn)在,不同之處在于,公司們擁抱新語言、從而想要延伸的特定商業(yè)目標(biāo)的范圍不一樣了 —— 這一過程同時(shí)建立了一個(gè)忠心耿耿的開發(fā)者基礎(chǔ),他們被牢牢鎖定在了某個(gè)公司的特定平臺(tái)上。這類一石二鳥的戰(zhàn)略,最早可以追溯到Sun對(duì)Java的采用,當(dāng) 時(shí)公司就將其作為了挑戰(zhàn)微軟PC桌面統(tǒng)治地位的一種手段。(事情雖然沒有像Sun計(jì)劃的那樣發(fā)展下去,但在Google轉(zhuǎn)向Android之前,Java 大體上也算是在企業(yè)中間件系統(tǒng)中找到了自己的一席之地。)
這么看來,Apple的Swift其目標(biāo)也就很明確了。Swift應(yīng)該不會(huì)辜負(fù)公 司前期的大肆宣傳,通過磨平Objective-C那粗糙的毛邊,看起來它能夠成功簡化iOS app開發(fā)者的開發(fā)過程。但是同樣還是這些開發(fā)者,他們卻需要學(xué)習(xí)一門新語言的輸入和輸出,而這些功能很可能在其他地方都不會(huì)用到。
大公司們?yōu)槭裁匆貜?fù)造輪子
“不要重復(fù)造輪子”這一哲學(xué)在絕大多數(shù)開發(fā)者心中根深蒂固,大公司們對(duì)此卻并不買賬。那他們?yōu)楹尾恢皇切薷南卢F(xiàn)有語言用于新的用途呢?
答案很簡單,公司們發(fā)明他們自己的語言,是因?yàn)樗麄冇羞@個(gè)能力。設(shè)計(jì)一門新語言可能很復(fù)雜,但對(duì)資源要求卻并不很高。困難之處也就在對(duì)其提供支持,包括提供軟件資源(共享代碼庫、API、編譯器、文檔等)以及贏得開發(fā)者的支持。大公司們?cè)谶@兩方面尤其擅長。
還有一個(gè)事實(shí),現(xiàn)有語言通常很難硬塞進(jìn)如今的復(fù)雜代碼框架中。舉個(gè)栗子,Facebook決定發(fā)明的Hack,就是一個(gè)普遍適用于Web開發(fā)的腳本語言PHP的超集合(superset)。
Facebook 的Hack最近已經(jīng)比較普遍,其主要目標(biāo)就是改進(jìn)代碼的穩(wěn)定性,針對(duì)這一目的,它強(qiáng)制在程序運(yùn)行之前對(duì)數(shù)據(jù)類型進(jìn)行檢測。這樣的檢測確保了一個(gè)程序,比方 說,不會(huì)將一個(gè)整數(shù)解析為一個(gè)字符串,這樣的錯(cuò)誤如果捕獲不到很可能會(huì)導(dǎo)致不可預(yù)知的后果。在Hack中,這些檢測會(huì)預(yù)先執(zhí)行,以便程序員能夠在程序上線 前早早發(fā)現(xiàn)這樣的錯(cuò)誤。
據(jù)Facebook的Hack項(xiàng)目組核心成員Julien Verlaguet透露,公司之前嘗試過用一門現(xiàn)有語言實(shí)現(xiàn)更高效的編程。但是Facebook的大部分代碼都是由PHP編寫的,公司實(shí)際上已經(jīng)建立了一 個(gè)支持PHP及其分支的軟件架構(gòu)。即使能夠讓PHP同其他語言編寫的代碼協(xié)同工作,實(shí)現(xiàn)的難易程度和運(yùn)行速度都無法滿足要求。
“比如說我們 嘗試用Scala重寫PHP代碼庫,”Verlaguet說。“Scala是一門設(shè)計(jì)優(yōu)秀的漂亮語言,但是它與PHP完全不兼容。每次我需要從Scala 的代碼庫部分調(diào)用PHP的時(shí)候,都會(huì)損失性能。我們很愿意使用一門現(xiàn)有語言,但是對(duì)于我們來說,這條路行不通。”
于是,F(xiàn)acebook發(fā)明了Hack,它與PHP一樣能夠共用公司現(xiàn)有的架構(gòu)。Verlaguet介紹說,F(xiàn)acebook的代碼庫主體已經(jīng)從PHP遷移到了Hack,同時(shí)公司將Hack開源,希望獨(dú)立開發(fā)者們能夠幫公司找到Facebook以外的用途。
“你仍然可以使用PHP,”他說,“但是我們希望你有使用Hack的欲望。”
誰說了算
公司和開發(fā)者之間有一種微妙的平衡。公司可以按照自己的喜好發(fā)明語言。但是如果開發(fā)者都不愿使用這門語言,那就沒人用了,公司以外的人也就沒人愿意將自己的職業(yè)生涯托付給這家公司。
公 司在開發(fā)過程中同時(shí)使用不同的語言,這并不少見。例如,你可能用Objective-C開發(fā)iOS app,但卻用Java開發(fā)Android app。對(duì)開發(fā)者來說,這從來都不是癥結(jié)所在,因?yàn)镺bjective-C和Java都是通用面向?qū)ο笳Z言。它們用途廣泛適用于很多場合。
然 而,Hack、Dart、Go和Swift,到目前為止,仍然只適用于嚴(yán)格特定公司的編程解決方案,往往和公司選擇的編程環(huán)境相對(duì)應(yīng)。誠然,現(xiàn)在下結(jié)論可 能還太早。比方說Hack,就可以用在一些后端的實(shí)現(xiàn)中;它只是太新了,以至于Facebook還沒有任何數(shù)據(jù)供人們?nèi)绱耸褂谩?/p>
不是開發(fā)者 不能學(xué)習(xí)多門語言。事實(shí)上,大多數(shù)人已經(jīng)掌握了多門語言。這好比羅曼斯語(一種由拉丁語演變而成的語言),如果你會(huì)說西班牙語,再去學(xué)法語就比那些不會(huì)西 班牙語的人簡單許多。與此類似,如果你已經(jīng)會(huì)Java,再學(xué)Ruby或Perl就簡單得多。如果你會(huì)PHP,基本上就已經(jīng)學(xué)會(huì)了Hack。
與此相反,學(xué)習(xí)多門語言更多的是一個(gè)習(xí)慣問題。如果Java已經(jīng)解決了你的問題,你就不再有動(dòng)力去學(xué)Ruby。如果你用Objective-C編寫iOS app感覺很爽,你就不會(huì)有強(qiáng)烈的意愿去學(xué)Swift。
另外,對(duì)于一些開發(fā)者來說,封閉生態(tài)系統(tǒng)的語言只會(huì)使每個(gè)人的生活變得更糟。例如,自由設(shè)計(jì)師Jack Watson-Hamblin就告訴我說,像Apple這樣強(qiáng)勢推出Swift,其實(shí)是在冒險(xiǎn)增加程序員的負(fù)擔(dān),同時(shí)將開發(fā)者社區(qū)割裂開來:
程序員掌握多門語言固然重要,但是不斷強(qiáng)迫他們緊跟新語言,卻是行不通的。如果我正在開發(fā)一個(gè)簡單的跨平臺(tái)app,我可不想被迫掌握四門語言再來完成它。如果真的需要,我也只想使用一門語言。
Watson- Hamblin就主張說,當(dāng)每家公司都為了自家需要發(fā)明自己的語言時(shí),程序員的注意力被分散,開發(fā)的視野也局限于一種,這只會(huì)拖慢整個(gè)開發(fā)進(jìn)程。他說, “如果拿公司負(fù)責(zé)一門語言與負(fù)責(zé)一個(gè)開源社區(qū)相比較,這兩者的區(qū)別就好比一家大企業(yè)與一個(gè)初創(chuàng)小公司的區(qū)別”。社區(qū)生來就更加靈活,適應(yīng)能力更強(qiáng)。
當(dāng)然,Apple有許多非常好的理由推出Swift從零開始,就像當(dāng)初Facebook發(fā)明Hack的時(shí)候一樣。我并不是說,大公司不會(huì)強(qiáng)迫開發(fā)者接受這種改變,在這方面,有些公司一直都很讓人討厭。
“新語言的發(fā)明,伴隨著霸權(quán)的支配,”Verlaguet說,“被迫不停追趕,確實(shí)令人沮喪,但另一方面,你又多了一種解決問題的新語言。反過來想想,要是全世界的程序員都用同樣一門語言做所有事情,即使啥都湊合著能干,這門語言也一定干得不怎么樣”。
題圖來自于Flickr user Ruiwen Chua,CC 2.0