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