5月4日外電頭條:我們?yōu)槭裁锤枰嘣某绦騿T?
原創(chuàng)【51CTO.com快譯】太多的程序員把自己限制在C++和Java中,而錯(cuò)過(guò)了眾多的新選擇。
美國(guó)人自我感覺(jué)良好,他們只喜歡講本土語(yǔ)言,這已經(jīng)眾人皆知了。那么,美國(guó)程序員也差不多。如今的計(jì)算機(jī)科學(xué)研究生往往在離開(kāi)學(xué)校時(shí)只精通一門(mén)編程語(yǔ)言——通常是一門(mén)主流系統(tǒng)語(yǔ)言,比如Java或C++——然后在整個(gè)職業(yè)生涯中幾乎完全離不開(kāi)它。
從表面上看這是有道理的。C++和Java都是功能強(qiáng)大的復(fù)雜語(yǔ)言,它們兩個(gè)中任何一個(gè)的語(yǔ)法學(xué)習(xí)書(shū)籍都擺滿了學(xué)校的圖書(shū)館,更不要說(shuō)這兩種語(yǔ)言的用途極為廣泛。正如51CTO.com此前發(fā)布的編程語(yǔ)言排行榜歷期榜單中,Java和C++總是***,如果你對(duì)任何一個(gè)不熟悉的話,將來(lái)找工作的時(shí)候就會(huì)不得不錯(cuò)過(guò)無(wú)數(shù)的機(jī)會(huì)。
但是,如果整個(gè)軟件開(kāi)發(fā)領(lǐng)域都幾乎完全基于兩種語(yǔ)言——況且實(shí)際上是兩種非常相似的語(yǔ)言——這也是十分危險(xiǎn)的,容易導(dǎo)致停滯不前。薩皮爾-沃爾夫假說(shuō)認(rèn)為,人類的思維模式受到語(yǔ)言的深刻影響。語(yǔ)言學(xué)家們對(duì)他的假說(shuō)到底有多大效果還存在爭(zhēng)執(zhí),但是對(duì)計(jì)算機(jī)程序語(yǔ)言這個(gè)人類真實(shí)語(yǔ)言的抽象版來(lái)說(shuō),假說(shuō)似乎特別恰當(dāng)。這些年來(lái),雖然軟件開(kāi)發(fā)的理念一直在前進(jìn)著,比如功能性和面向方面編程,但是主流語(yǔ)言始終圍繞著幾十年前就出現(xiàn)的面向?qū)ο笏枷刖徛兓?/P>
然而在主流之外,我們經(jīng)常看到各式各樣的火花。每年都有新的編程語(yǔ)言出現(xiàn)——51CTO.com曾介紹過(guò)很多新興語(yǔ)言,如面向分布與并發(fā)的Erlang、具有動(dòng)態(tài)性的函數(shù)對(duì)象混合型語(yǔ)言Scala、類似Java和C#的新語(yǔ)言Fan等——其中許多是非常有價(jià)值的,也有許多真實(shí)的項(xiàng)目因?yàn)椴捎昧怂鼈兊玫搅肆己玫幕貓?bào)。是不是應(yīng)該也讓軟件開(kāi)發(fā)者們離開(kāi)一下Java和C++這兩間屋子,出去看看外面的世界?
CLI — 新語(yǔ)言的聚寶盆
優(yōu)秀的程序員并不一定要是優(yōu)秀的計(jì)算機(jī)科學(xué)家。同樣的,并不是所有的編程語(yǔ)言都一定要是異常嚴(yán)密的。微軟的.Net平臺(tái),它的CLI(Common Language Infrastructure,通用語(yǔ)言基礎(chǔ)結(jié)構(gòu))是新語(yǔ)言的豐富來(lái)源。維基百科上說(shuō)該平臺(tái)現(xiàn)在至少支持55種語(yǔ)言,而且它們之間擁有充分的互操作性。
更有趣的新東西來(lái)自微軟本身,新出現(xiàn)的Axum語(yǔ)言可以讓開(kāi)發(fā)者在多核心和多重處理的硬件上更容易的編寫(xiě)程序。你可能還記得去年我寫(xiě)過(guò)Sun的Fortress語(yǔ)言,它有類似的目的。而Axum更有趣些,因?yàn)樗⒎窍肴繌?fù)制Java或C++等系統(tǒng)語(yǔ)言的所有功能,而是專門(mén)為并行化設(shè)計(jì)。在Axum里你甚至不能定義對(duì)象,這和一些其他的CLI語(yǔ)言比如C#是不同的。Axum所作的一切就是簡(jiǎn)化多重處理,讓工作變得更友好,而這個(gè)任務(wù)傳統(tǒng)語(yǔ)言做起來(lái)卻很棘手。在51CTO.com與有著Windows編程教父之稱Jeffrey的一次關(guān)于未來(lái)編程語(yǔ)言的發(fā)展方向的對(duì)話中,Jeffrey也提到:未來(lái)編程語(yǔ)言的發(fā)展將更加自動(dòng)化,智能化。
在.NET平臺(tái)之后,開(kāi)放的JVM也收到了廣泛的歡迎。許多開(kāi)發(fā)語(yǔ)言現(xiàn)在已經(jīng)可以編譯為Java字節(jié)碼,其中一些相當(dāng)有趣。比如已經(jīng)擁有不少支持者的Groovy,它提供了類似Java的語(yǔ)法但實(shí)際上是一種動(dòng)態(tài)語(yǔ)言,和Perl、Python和Ruby類似。它們提供給開(kāi)發(fā)者Java運(yùn)行時(shí)的安全性與穩(wěn)定性,但編寫(xiě)起來(lái)不像Java語(yǔ)法那么嚴(yán)格。
還有一些語(yǔ)言并不在現(xiàn)有的平臺(tái)之中,但也已經(jīng)在商業(yè)應(yīng)用上得到接受。例如Lua,一種輕重量級(jí)嵌入式腳本語(yǔ)言,已經(jīng)在很多商業(yè)項(xiàng)目包括視頻游戲開(kāi)發(fā)中得到應(yīng)用,比如魔獸世界,還有其他許多游戲。
主流之外的成功
在大多數(shù)情況下,這些非主流的語(yǔ)言只有在特殊用途、小項(xiàng)目和研究時(shí)才會(huì)出現(xiàn)。但是,并非每個(gè)企業(yè)都不敢邁出跨越Java和C++這一步。例如,博客***Twitter最近就宣布,計(jì)劃放棄其目前的架構(gòu),基于Scala語(yǔ)言進(jìn)行全新的設(shè)計(jì)。Scala和Groovy有些相似,在JVM上運(yùn)行。Twitter的工程師Alex Payne說(shuō),“我們知道人們能夠用C++寫(xiě)出性能***的代碼……但我們真的喜愛(ài)Scala,值得為它賭一下。”
提醒你一下,Twitter可能并不是個(gè)好的參考案例。因?yàn)樗脑技軜?gòu)是用Ruby寫(xiě)的,當(dāng)時(shí)也幾乎沒(méi)有人敢用Ruby來(lái)賭一下。況且考慮到Twitter的坎坷經(jīng)歷,他實(shí)在是想換成什么架構(gòu)都不過(guò)分。
當(dāng)然了,Twitter的例子還是值得考慮。而Scala這樣的語(yǔ)言要想得到風(fēng)險(xiǎn)投資家和行政管理層的信任還有待時(shí)間的考驗(yàn),在此之前,它們還是不得不屈尊在幾個(gè)“充滿激情”的程序員之間,就像Twitter剛創(chuàng)業(yè)時(shí)一樣,無(wú)論它們的潛力有多大。
現(xiàn)在,在開(kāi)發(fā)經(jīng)理在各種不同的語(yǔ)言之間做出選擇之前,他們需要讓自己的團(tuán)隊(duì)多了解幾種開(kāi)發(fā)語(yǔ)言。這就是為什么我希望看到更多的計(jì)算機(jī)科學(xué)系學(xué)生能成為“多元化程序員”,而不是某一種語(yǔ)言的專家。我擔(dān)心那些把大部分時(shí)間都花在學(xué)習(xí)語(yǔ)法上的程序員會(huì)錯(cuò)過(guò)更大的場(chǎng)面。良好的語(yǔ)言技巧永遠(yuǎn)是最重要的工具,但全面扎實(shí)的軟件設(shè)計(jì)基礎(chǔ)將幫助你成為一個(gè)了不起的程序員,無(wú)論你使用什么語(yǔ)言。
【51CTO.com譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】
原文:We need more polyglot programmers 作者:Neil Mcallister
【編輯推薦】