諸如Apple啊终、Facebook及Google這樣的大公司正在開發(fā)他們自己的編程語言镜豹,開發(fā)者們被迫只有適應。前不久的世界開發(fā)者大會上蓝牲,Apple公布了它的新開發(fā)語言Swift趟脂。這是最近大型技術(shù)公司們開發(fā)的一大波新語言中的最新成員,這些新語言某種程度上都是專門應用于他們自己的平臺例衍。
161902f8zrltgzvjg4vbe4.jpg
對iOS開發(fā)者昔期,Apple有Swift;而Facebook 有 Hack —— 一門用于后端開發(fā)的語言佛玄。與此同時硼一,Google已經(jīng)擁有了它自己的Javascript替代者 Dart,以及一門新的通用編程語言Go梦抢。
這一波又一波的新語言般贼,給開發(fā)者們帶來了許多問題。也許其中最嚴重的問題正如我一位同事Adriana Lee在Apple發(fā)布Swift后所說:
(開發(fā)者們到底還得學習多少門語言奥吩?) ——Adriana Lee (@adra_la) June 2, 2014
計算機語言的通天塔
目前已經(jīng)存在的編程語言有數(shù)百種哼蛆,同時還有更多的語言正在涌現(xiàn)。其中許多都是被設計用在相對較窄的應用程序范圍內(nèi)霞赫,大多數(shù)甚至從未走出過項目小組的范圍腮介。
與此類似,大技術(shù)公司開發(fā)的新語言其實也是伴隨著公司一起成長的绩脆。通用語言的鼻祖萤厅,C語言橄抹,就源于上世紀70年代初的AT&T貝爾實驗室靴迫。Java,目前作為Android app開發(fā)的主要語言楼誓,誕生于上世紀90年代Sun公司的Microsystems系統(tǒng)玉锌。
發(fā) 展到現(xiàn)在,不同之處在于疟羹,公司們擁抱新語言主守、從而想要延伸的特定商業(yè)目標的范圍不一樣了 —— 這一過程同時建立了一個忠心耿耿的開發(fā)者基礎禀倔,他們被牢牢鎖定在了某個公司的特定平臺上。這類一石二鳥的戰(zhàn)略参淫,最早可以追溯到Sun對Java的采用救湖,當 時公司就將其作為了挑戰(zhàn)微軟PC桌面統(tǒng)治地位的一種手段。(事情雖然沒有像Sun計劃的那樣發(fā)展下去涎才,但在Google轉(zhuǎn)向Android之前鞋既,Java 大體上也算是在企業(yè)中間件系統(tǒng)中找到了自己的一席之地。)
這么看來耍铜,Apple的Swift其目標也就很明確了邑闺。Swift應該不會辜負公 司前期的大肆宣傳,通過磨平Objective-C那粗糙的毛邊棕兼,看起來它能夠成功簡化iOS app開發(fā)者的開發(fā)過程陡舅。但是同樣還是這些開發(fā)者,他們卻需要學習一門新語言的輸入和輸出伴挚,而這些功能很可能在其他地方都不會用到靶衍。
大公司們?yōu)槭裁匆貜驮燧喿?/strong>
“不要重復造輪子”這一哲學在絕大多數(shù)開發(fā)者心中根深蒂固,大公司們對此卻并不買賬章鲤。那他們?yōu)楹尾恢皇切薷南卢F(xiàn)有語言用于新的用途呢摊灭?
答案很簡單,公司們發(fā)明他們自己的語言败徊,是因為他們有這個能力帚呼。設計一門新語言可能很復雜,但對資源要求卻并不很高皱蹦。困難之處也就在對其提供支持煤杀,包括提供軟件資源(共享代碼庫、API沪哺、編譯器沈自、文檔等)以及贏得開發(fā)者的支持。大公司們在這兩方面尤其擅長辜妓。
還有一個事實枯途,現(xiàn)有語言通常很難硬塞進如今的復雜代碼框架中。舉個栗子籍滴,Facebook決定發(fā)明的Hack酪夷,就是一個普遍適用于Web開發(fā)的腳本語言PHP的超集合(superset)。
Facebook 的Hack最近已經(jīng)比較普遍孽惰,其主要目標就是改進代碼的穩(wěn)定性晚岭,針對這一目的,它強制在程序運行之前對數(shù)據(jù)類型進行檢測勋功。這樣的檢測確保了一個程序坦报,比方 說库说,不會將一個整數(shù)解析為一個字符串,這樣的錯誤如果捕獲不到很可能會導致不可預知的后果片择。在Hack中潜的,這些檢測會預先執(zhí)行,以便程序員能夠在程序上線 前早早發(fā)現(xiàn)這樣的錯誤字管。
據(jù)Facebook的Hack項目組核心成員Julien Verlaguet透露夏块,公司之前嘗試過用一門現(xiàn)有語言實現(xiàn)更高效的編程。但是Facebook的大部分代碼都是由PHP編寫的纤掸,公司實際上已經(jīng)建立了一 個支持PHP及其分支的軟件架構(gòu)脐供。即使能夠讓PHP同其他語言編寫的代碼協(xié)同工作,實現(xiàn)的難易程度和運行速度都無法滿足要求借跪。
“比如說我們 嘗試用Scala重寫PHP代碼庫政己,”Verlaguet說√统睿“Scala是一門設計優(yōu)秀的漂亮語言歇由,但是它與PHP完全不兼容。每次我需要從Scala 的代碼庫部分調(diào)用PHP的時候果港,都會損失性能沦泌。我們很愿意使用一門現(xiàn)有語言,但是對于我們來說辛掠,這條路行不通谢谦。”
于是萝衩,F(xiàn)acebook發(fā)明了Hack回挽,它與PHP一樣能夠共用公司現(xiàn)有的架構(gòu)。Verlaguet介紹說猩谊,F(xiàn)acebook的代碼庫主體已經(jīng)從PHP遷移到了Hack千劈,同時公司將Hack開源,希望獨立開發(fā)者們能夠幫公司找到Facebook以外的用途牌捷。
“你仍然可以使用PHP墙牌,”他說,“但是我們希望你有使用Hack的欲望暗甥∠脖酰”
誰說了算
公司和開發(fā)者之間有一種微妙的平衡。公司可以按照自己的喜好發(fā)明語言淋袖。但是如果開發(fā)者都不愿使用這門語言鸿市,那就沒人用了锯梁,公司以外的人也就沒人愿意將自己的職業(yè)生涯托付給這家公司即碗。
公 司在開發(fā)過程中同時使用不同的語言焰情,這并不少見。例如剥懒,你可能用Objective-C開發(fā)iOS app内舟,但卻用Java開發(fā)Android app。對開發(fā)者來說初橘,這從來都不是癥結(jié)所在验游,因為Objective-C和Java都是通用面向?qū)ο笳Z言。它們用途廣泛適用于很多場合保檐。
然 而耕蝉,Hack、Dart夜只、Go和Swift垒在,到目前為止,仍然只適用于嚴格特定公司的編程解決方案扔亥,往往和公司選擇的編程環(huán)境相對應场躯。誠然,現(xiàn)在下結(jié)論可 能還太早旅挤。比方說Hack踢关,就可以用在一些后端的實現(xiàn)中;它只是太新了粘茄,以至于Facebook還沒有任何數(shù)據(jù)供人們?nèi)绱耸褂谩?br> 不是開發(fā)者 不能學習多門語言签舞。事實上,大多數(shù)人已經(jīng)掌握了多門語言柒瓣。這好比羅曼斯語(一種由拉丁語演變而成的語言)瘪菌,如果你會說西班牙語,再去學法語就比那些不會西 班牙語的人簡單許多嘹朗。與此類似师妙,如果你已經(jīng)會Java,再學Ruby或Perl就簡單得多屹培。如果你會PHP默穴,基本上就已經(jīng)學會了Hack。
與此相反褪秀,學習多門語言更多的是一個習慣問題蓄诽。如果Java已經(jīng)解決了你的問題,你就不再有動力去學Ruby媒吗。如果你用Objective-C編寫iOS app感覺很爽仑氛,你就不會有強烈的意愿去學Swift。
另外,對于一些開發(fā)者來說锯岖,封閉生態(tài)系統(tǒng)的語言只會使每個人的生活變得更糟介袜。例如熊镣,自由設計師Jack Watson-Hamblin就告訴我說溅固,像Apple這樣強勢推出Swift,其實是在冒險增加程序員的負擔据沈,同時將開發(fā)者社區(qū)割裂開來:
程序員掌握多門語言固然重要捶牢,但是不斷強迫他們緊跟新語言鸠珠,卻是行不通的。如果我正在開發(fā)一個簡單的跨平臺app秋麸,我可不想被迫掌握四門語言再來完成它渐排。如果真的需要,我也只想使用一門語言灸蟆。
Watson- Hamblin就主張說飞盆,當每家公司都為了自家需要發(fā)明自己的語言時,程序員的注意力被分散次乓,開發(fā)的視野也局限于一種吓歇,這只會拖慢整個開發(fā)進程。他說票腰, “如果拿公司負責一門語言與負責一個開源社區(qū)相比較城看,這兩者的區(qū)別就好比一家大企業(yè)與一個初創(chuàng)小公司的區(qū)別”。社區(qū)生來就更加靈活杏慰,適應能力更強测柠。
當然,Apple有許多非常好的理由推出Swift從零開始缘滥,就像當初Facebook發(fā)明Hack的時候一樣轰胁。我并不是說,大公司不會強迫開發(fā)者接受這種改變朝扼,在這方面赃阀,有些公司一直都很讓人討厭。
“新語言的發(fā)明擎颖,伴隨著霸權(quán)的支配榛斯,”Verlaguet說,“被迫不停追趕搂捧,確實令人沮喪驮俗,但另一方面,你又多了一種解決問題的新語言允跑。反過來想想王凑,要是全世界的程序員都用同樣一門語言做所有事情搪柑,即使啥都湊合著能干,這門語言也一定干得不怎么樣”索烹。
題圖來自于Flickr user Ruiwen Chua工碾,CC 2.0
譯者:Mr小眼兒 校對:wxy
本文由 LCTT 原創(chuàng)翻譯,Linux中國 榮譽推出
本站文章除注明轉(zhuǎn)載外术荤,均為本站原創(chuàng)或編譯。歡迎任何形式的轉(zhuǎn)載每篷,但請務必注明出處瓣戚,尊重他人勞動共創(chuàng)開源社區(qū)。
轉(zhuǎn)載請注明:文章轉(zhuǎn)載自 開源中國社區(qū) [http://www.oschina.net]
本文標題:到底開發(fā)者需要掌握多少門語言焦读?
本文地址:https://www.oschina.net/news/53480/how-many-programming-language-we-should-learn