編程語(yǔ)言新生兒到底因何成功 又為何失敗?
譯文【51CTO外電頭條】某些語(yǔ)言在出現(xiàn)之后逐漸成為業(yè)界的驕子,而另一些則自誕生以來(lái)始終默默無(wú)聞,難以躋身主流之列。編程語(yǔ)言新生兒們到底因何成功,又是怎樣失敗的呢?
51CTO推薦專題:51CTO編程語(yǔ)言排行榜
我們身邊如今正充斥著大量不同種類的編程語(yǔ)言,數(shù)量之多甚至難于統(tǒng)計(jì),而其中絕大部分我們都不曾耳聞。但在這里我們要討論的是,為什么會(huì)這樣?為什么某些語(yǔ)言獲得主流認(rèn)可,在業(yè)界內(nèi)大紅大紫,而有些則始終默默無(wú)聞?
在閱讀了由Cristina Videira Lopes撰寫的博文后,我對(duì)這一話題很感興趣,正是她在文章中對(duì)這一話題發(fā)起分析。Lopes指出,只有極少數(shù)成功的現(xiàn)代語(yǔ)言在學(xué)術(shù)界站穩(wěn)了腳跟,而她作為學(xué)術(shù)界中的一員,對(duì)這一現(xiàn)狀深感失望。
她的這種反應(yīng)是否正常?根據(jù)Lopes的說(shuō)法,當(dāng)下幾乎任何人都有能力創(chuàng)造出新的編程語(yǔ)言——情況也確實(shí)如此,從業(yè)余編程愛好者到大型企業(yè),關(guān)注IT行業(yè)的每個(gè)人都在打造新語(yǔ)言方面躍躍欲試。與上個(gè)世紀(jì)七十年代不同,如今創(chuàng)建一套編程語(yǔ)言已經(jīng)算不上什么浩大的工程。盡管如此,這些語(yǔ)言新生兒們大多數(shù)無(wú)法取得成功,它們最終的結(jié)果要么是成為純粹的內(nèi)部試點(diǎn)項(xiàng)目,要么是淪為實(shí)驗(yàn)探索好奇心的理論性產(chǎn)物。
為什么會(huì)這樣?編程語(yǔ)言到底要怎樣才能取得成功,那些成功的語(yǔ)言與默默無(wú)聞的其它語(yǔ)言相比又具有哪些獨(dú)特的優(yōu)勢(shì)呢?通過(guò)對(duì)以往數(shù)款成功語(yǔ)言的簡(jiǎn)要調(diào)研,我們從中找到了一些端倪。
成功的語(yǔ)言令人感到熟悉與親切
我們目前手頭常用的數(shù)種語(yǔ)言已經(jīng)完全能夠應(yīng)對(duì)工作中的各類需求。開發(fā)人員中很少有人愿意徹底放棄自己固有的知識(shí)基礎(chǔ),從零開始涉獵一門全新的編程語(yǔ)言。出于這一原因,新的語(yǔ)言不應(yīng)該與原有主流語(yǔ)言之間存在過(guò)大的差異。推出一套新的標(biāo)準(zhǔn)庫(kù)當(dāng)然很正常,但新語(yǔ)言的核心語(yǔ)法必須令人感到熟悉與親切。
也就是說(shuō),新語(yǔ)言應(yīng)該至少在某種程度上類似于C語(yǔ)言。毫無(wú)疑問(wèn),這種設(shè)定會(huì)令那些討厭C語(yǔ)言、想到大括號(hào)及其難以捉摸的執(zhí)行機(jī)制就犯惡心的程序員們感到極度痛恨;然而C語(yǔ)言已經(jīng)存在了35年了,在它身后還有一眾包括C++、Java、JavaScript以及其它類C型語(yǔ)言的追隨者,這一切都表明我們?nèi)缃裾娴暮茈y找出一位完全不了解C語(yǔ)言及其描述風(fēng)格的程序員。
某些現(xiàn)代語(yǔ)言的確選擇了不同的發(fā)展方向,Python就是其中最典型的例子。不過(guò)Python所使用的獨(dú)特語(yǔ)法并不是為了嘩眾取寵或是故意顯得特立獨(dú)行,這一切與語(yǔ)言自己的特點(diǎn)與功能息息相關(guān)。這很重要,你可以是個(gè)古怪的人,但不能為了古怪而讓自己顯得古怪,在這一點(diǎn)上大多數(shù)不成功的獨(dú)特語(yǔ)言都未能擁有像Python那樣的說(shuō)服力。
此外,新語(yǔ)言應(yīng)該支持大家熟悉的編程風(fēng)格。創(chuàng)新沒(méi)有問(wèn)題,但最好別在大家所熟知的方面搞創(chuàng)新。我們可以想象,一種不從某種角度提供面向?qū)ο筇匦缘恼Z(yǔ)言,根本不可能在今天的IT環(huán)境之下走得很遠(yuǎn)。
當(dāng)我們?cè)谧约旱恼Z(yǔ)言中引入全新概念時(shí),最好抱持著嬰兒學(xué)步的態(tài)度。多種主流語(yǔ)言已經(jīng)開始從函數(shù)型程序設(shè)計(jì)中汲取靈感,例如閉包以及高階函數(shù)等內(nèi)容,而這些也的確贏得了廣泛贊譽(yù)。但需要強(qiáng)調(diào)的一點(diǎn)是,純函數(shù)型語(yǔ)言仍然很不受歡迎。開發(fā)人員喜歡創(chuàng)新型理念,但絕不希望自己為了適應(yīng)一款新語(yǔ)言而被迫從自己最熟悉的安樂(lè)窩中搬出來(lái)。
成功的語(yǔ)言必須開源
別再糾結(jié)于專有語(yǔ)言了,那些時(shí)光已然一去不復(fù)返。Visual Basic雖然也在磕磕絆絆中一路走來(lái),但根據(jù)我最近所做的調(diào)查,所有新型尖端語(yǔ)言都選擇了開源——甚至由微軟推出的F#也未能例外。
現(xiàn)代開發(fā)人員不喜歡那種由單獨(dú)一家供應(yīng)商推出、各個(gè)方面都深為掣肘的編程語(yǔ)言。開源給了開發(fā)人員們一種保證,令他們?cè)诋?dāng)下所編寫的代碼不至于被未來(lái)可能出現(xiàn)的工具、語(yǔ)言或許可內(nèi)容變化所影響。這種保障成果一以貫之的機(jī)制成為開發(fā)者們最為看重的優(yōu)勢(shì)。
但開發(fā)者層面的優(yōu)勢(shì)并不是開源的全部好處,設(shè)計(jì)者們同樣能從中獲得種種裨益。與大多數(shù)軟件不同,編譯器用戶群體很明顯完全是由開發(fā)人員構(gòu)成的。他們中的每一位成員都有能力及機(jī)會(huì)對(duì)語(yǔ)言及其附屬工具做出改進(jìn),這一點(diǎn)非常重要。除此之外,這種態(tài)勢(shì)還能有效幫助語(yǔ)言開發(fā)者對(duì)現(xiàn)有標(biāo)準(zhǔn)庫(kù)進(jìn)行擴(kuò)充,這也正是Java大獲成功的先見之明所在。
這倒不是說(shuō)編程語(yǔ)言本身不能用來(lái)創(chuàng)造商業(yè)價(jià)值。免費(fèi)的C與C++編譯器都已經(jīng)存在了幾十年,而英特爾公司也始終利用它們所帶來(lái)的高性能優(yōu)化編譯器創(chuàng)造著不菲的經(jīng)濟(jì)收入。但這種經(jīng)營(yíng)模式只適用于已經(jīng)步入運(yùn)轉(zhuǎn)正軌的語(yǔ)言,對(duì)于一種新型語(yǔ)言來(lái)說(shuō),要想在當(dāng)今的市場(chǎng)環(huán)境中贏得廣泛接受及贊賞,最基本的原則就是必須完全免費(fèi)及開放。至于“專業(yè)級(jí)”市場(chǎng),我們稍后再進(jìn)行討論。
利基是語(yǔ)言獲得成功的必要前提
像C++及Java這樣的語(yǔ)言之所以能獲得成功,是因?yàn)樗鼈冊(cè)跇I(yè)界整體當(dāng)中找到了自己的立足點(diǎn)。無(wú)論大家在開發(fā)工作中偏向哪個(gè)領(lǐng)域,這些語(yǔ)言都能夠?yàn)槲覀兲峁┮欢◣椭?,讓自己成為我們工作?dāng)中不可或缺的一部分。
但在這種形勢(shì)下,固有主流語(yǔ)言的地位同樣難以撼動(dòng)。我們已經(jīng)有了Java——真的還需要再接納一款相似的語(yǔ)言嗎?由于開發(fā)人員對(duì)于常用語(yǔ)言的依賴性相當(dāng)巨大,新的通用語(yǔ)言幾乎不可能獲得與老前輩們平起平坐的競(jìng)爭(zhēng)機(jī)會(huì),因?yàn)槔?mdash;—也就是特定需求市場(chǎng)已經(jīng)趨近飽和。
舉例來(lái)說(shuō),Perl最初是作為一款增強(qiáng)型shell腳本工具為系統(tǒng)管理員提供便利的;但由于原始目標(biāo)市場(chǎng)空間狹小,它最終憑借著自身豐富的文字處理工具在CGI腳本領(lǐng)域大展拳腳,并最終成功以此為基礎(chǔ)順利轉(zhuǎn)型。
與此類似,Ruby在剛剛誕生時(shí)對(duì)自身的發(fā)展定位與Perl頗為類似,只是在功能方面更加強(qiáng)大。這種思路當(dāng)然不錯(cuò),但Ruby始終未能借此一鳴驚人。直到Rails框架的出現(xiàn)才使其真正步入熱門工具的行列,并成為Web應(yīng)用程序開發(fā)領(lǐng)域的一朵奇葩。
C#的利基在于Windows開發(fā),這與編程語(yǔ)言界的老前輩Visual Basic如出一轍。但C#作為由供應(yīng)商推出的一款針對(duì)性語(yǔ)言,之所以能夠獲得成功完全要感謝Windows運(yùn)行環(huán)境的超高普及度。與之相對(duì)應(yīng),谷歌費(fèi)力開發(fā)出的語(yǔ)言雖然同樣出身供應(yīng)商,卻始終無(wú)法獲得與之相仿的成功。
通過(guò)對(duì)當(dāng)前十大尖端語(yǔ)言的觀察,我發(fā)現(xiàn)其中絕大部分都迎合了特定領(lǐng)域中某些特定情況的實(shí)際需求。其中一些被設(shè)計(jì)用于Web應(yīng)用程序,其它一些能夠有效解決并行計(jì)算方面的棘手問(wèn)題,還有一些則專攻科學(xué)應(yīng)用領(lǐng)域??偠灾?,沒(méi)有任何一款語(yǔ)言妄圖替代目前主流的通用型語(yǔ)言,看來(lái)開發(fā)者們已經(jīng)意識(shí)到人類固有的惰性是語(yǔ)言新生兒們的最大天敵。
編程語(yǔ)言要獲得成功還需要一點(diǎn)運(yùn)氣
當(dāng)然,對(duì)于某些家伙鼓吹的“我們已經(jīng)不需要任何新的編程語(yǔ)言”的說(shuō)法,我個(gè)人表示強(qiáng)烈反對(duì)。不過(guò)根據(jù)當(dāng)前的形勢(shì)來(lái)看,主流市場(chǎng)似乎明顯不打算接納任何新的語(yǔ)言成員。一款新的語(yǔ)言要想獲得成功,必須更令受眾感到親切熟悉、又具備必要的創(chuàng)新特色——更重要的是,不要太過(guò)野心勃勃。一口吃成胖子的想法無(wú)異于癡人說(shuō)夢(mèng)。
至于學(xué)術(shù)界為什么從客觀角度上沒(méi)有推出更多語(yǔ)言,我想這大概和每個(gè)人的天性有關(guān)。沉悶而規(guī)則嚴(yán)謹(jǐn)?shù)恼Z(yǔ)言往往令許多不那么硬派的開發(fā)人員們避之而唯恐不速——Ada就是一個(gè)很好的例子。正如Lopes在她的文章中所說(shuō),不少當(dāng)下常用的主流語(yǔ)言在剛剛發(fā)布最初版本時(shí),還只是一套在一個(gè)月時(shí)間里東拼西湊搭配出來(lái)的粗糙半成品。
至少?gòu)膶?shí)際情況分析,一款語(yǔ)言究竟能否取得成功,運(yùn)氣因素仍然是相當(dāng)重要的,這與唱片工業(yè)中的成功個(gè)案不謀而合。不過(guò)對(duì)于一款語(yǔ)言來(lái)說(shuō),在市場(chǎng)上獲得認(rèn)同及接納仍然比歌星的成名之路來(lái)得容易些、順暢些。
無(wú)論成功的關(guān)鍵性要素到底是什么,只要仍然有人熱愛編程語(yǔ)言、關(guān)注編程語(yǔ)言(就像Lopes那樣),新的語(yǔ)言就仍然會(huì)不斷出現(xiàn)。至于它們能否脫離搖籃茁壯成長(zhǎng),那又是另一回事了。
原文鏈接:http://www.infoworld.com/d/application-development/why-new-programing-languages-succeed-or-fail-188648?page=0,0
【編輯推薦】