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

























