為什么一些古老的編程語言不會消亡?
我們鐘愛我們已知的。
當今許多知名的編程語言已經(jīng)都非常古老了。PHP 語言20年、Python 語言23年、HTML 語言21年、Ruby 語言和 JavaScript 語言已經(jīng)19年,C 語言更是高達42年之久。
這是沒人能預料得到的,即使是計算機科學家 Brian Kernighan 也一樣。他是寫著***本關于 C 語言的作者之一,直到今天這本書還在印刷著。(C 語言本身的*** Dennis Ritchie 是 Kernighan 的合著者,他于 2011 年已辭世。)
“我依稀記得早期跟編輯們的談話,告訴他們我們已經(jīng)賣出了5000冊左右的量,”最近采訪 Kernighan 時他告訴我說。“我們設法做的更好。我沒有想到的是在2014年的教科書里學生仍然在使用***個版本的書。”
關于 C 語言的持久性特別顯著的就是 Google 開發(fā)出了新的語言 Go,解決同一問題比用 C 語言更有效率。不過,我仍然很難想象 Go 能徹底殺死 C,無論它有多么好。
“大多數(shù)語言并不會消失或者至少很大一部分用戶承認它們不會消失,”他說。“C 語言仍然在一定的領域獨領風騷,所以它很接地氣。”
編寫所熟悉的
為什么某些計算機編程語言要比其它的更流行?因為開發(fā)者都選擇使用它們。邏輯上來說,這解釋已經(jīng)足夠,但還想深入了解為什么開發(fā)人員會選擇使用它們呢,這就有點棘手了。
分別來自普林斯頓大學和加州大學伯克利分校的研究者 Ari Rabkin 和 Leo Meyerovich 花費了兩年時間來研究解決上面的問題。他們的研究報告,《編程語言使用情況實例分析》,記錄了對超過 200,000 個 Sourceforge 項目和超過 13,000 個程序員投票結(jié)果的分析。
他們主要的發(fā)現(xiàn)是什么呢?大多數(shù)時候程序員選擇的編程語言都是他們所熟悉的。
“這些我們使用的語言還繼續(xù)存在是因為我們經(jīng)常使用他們,” Rabkin 告訴我。“例如:天文學家就經(jīng)常使用 IDL [交互式數(shù)據(jù)語言]來開發(fā)他們的計算機程序,并不是因為它具有什么特殊的亮點功能或其它特點,而是因為用它形成習慣了。他們已經(jīng)用些語言構(gòu)建出很優(yōu)秀的程序了,并且想保持原狀。”
換句話說,它部分要歸功于這些語言所創(chuàng)立的知名度仍保持較高。當然,這并不意味著流行的語言不會變化。Rabkin 指出我們今天在使用的 C 語言就跟 Kernighan ***次創(chuàng)建時的一點都不同,那時的 C 編譯器跟現(xiàn)代的也不是完全兼容。
“有一個古老的,關于工程師的笑話。工程師被問到哪一種編程語言人們會使用30年,他說,‘我不知道,但它總會被叫做 Fortran’,” Rabkin 說到。“長期存活的語言跟他們在70年代和80年代剛設計出來的時候不太一樣了。人們通常都是在上面增加功能,而不會刪除功能,因為要保持向后兼容,但有些功能會被修正。”
向后兼容意思就是當語言升級后,程序員不僅可以使用升級語言的新特性,也不用回去重寫已經(jīng)實現(xiàn)的老代碼塊。老的“遺留代碼”的語法規(guī)則已經(jīng)不用了,但舍棄是要花成本的。只要它們存在,我們就有理由相信相關的語言也會存在。
PHP: 存活長久語言的一個案例學習
遺留代碼指的是用過時的源代碼編寫的程序或部分程序。想想看,一個企業(yè)或工程項目的關鍵程序功能部分是用沒人維護的編程語言寫出來的。因為它們?nèi)云鹬饔?,用現(xiàn)代的源代碼重寫非常困難或著代價太高,所以它們不得不保留下來,即使其它部分的代碼都變動了,程序員也必須不斷折騰以保證它們能正常工作。
任何編程語言,存在了超過幾十年時間都具有某種形式的遺留代碼問題, PHP 也不例外。PHP 是一個很有趣的例子,因為它的遺留代碼跟現(xiàn)在的代碼明顯不同,支持者或評論家都承認這是一個巨大的進步。
Andi Gutmans 是已經(jīng)成為 PHP4 的標準編譯器的 Zend Engine 的***之一。Gutmans 說他和搭檔本來是想改進完善 PHP3 的,他們的工作如此成功,以至于 PHP 的原*** Rasmus Lerdorf 也加入他們的項目。結(jié)果就成為了 PHP4 和他的后續(xù)者 PHP5 的編譯器。
因此,當今的 PHP 與它的祖先——即最開始的 PHP 是完全不同的。然而,在 Gutmans 看來,在用古老的 PHP 語言版本寫的遺留代碼的地方一直存在著偏見以至于上升到整個語言的高度。比如 PHP 充滿著安全漏洞或沒有“集群”功能來支持大規(guī)模的計算任務等概念。
“批評 PHP 的人們通常批評的是在 1998 年時候的 PHP 版本,”他說。“這些人都沒有與時俱進。當今的 PHP 已經(jīng)有了很成熟的生態(tài)系統(tǒng)了。”
如今,Gutmans 說,他作為一個管理者最重要的事情就是鼓勵人們升級到***版本。“PHP有個很大的社區(qū),足以支持您的遺留代碼的問題,”他說。“但總的來說,我們的社區(qū)大部分都在 PHP5.3 及以上的。”
問題是,任何語言用戶都不會全部升級到***版本。這就是為什么 Python 用戶仍在使用 2000 年發(fā)布的 Python 2,而不是使用 2008 年發(fā)布的 Python 3 的原因。甚至在六年后,大多數(shù)像 Google 這樣的用戶仍沒有升級。這種情況是多種原因造成的,但它使得很多開發(fā)者在承擔風險。
“任何東西都不會消亡的,”Rabkin 說。“任何語言的遺留代碼都會一直存在。重寫的代價是非常高昂的,如果它們不出問題就不要去改動。”
開發(fā)者是稀缺的資源
當然,開發(fā)者是不會選擇那些僅僅只是為了維護老舊代碼的的程序語言的。當談論到對語言選擇的偏好時,Rabkin 和 Meyerovich 發(fā)現(xiàn)年齡僅僅只代表個數(shù)字。Rabkin 告訴我說:
有一件事使我們被深深震撼到了。這事最重要的就是我們給人們按年齡分組,然后詢問他們知道多少編程語言。我們主觀的認為隨著年齡的增長知道的會越來越多,但實際上卻不是,25歲年齡組和45歲年齡組知道的語言數(shù)目是一樣的。幾個反復詢問的問題這里持續(xù)不變的。您知道一種語言的幾率并不與您的年齡掛鉤。
換句話說,不僅僅年長的開發(fā)者堅持傳統(tǒng),年輕的程序員也會認可并采用古老的編程語言作為他們的***們語言。這可能是因為這些語言具有很有趣的開發(fā)庫及功能特點,也可能是因為在社區(qū)里開發(fā)者都是喜愛這種開發(fā)語言的一伙人。
“在全球程序員關注的語言的數(shù)量是有定數(shù)的,” Rabkin 說。“如果一們語言表現(xiàn)出足夠獨特的價值,人們將會學習和使用它。如果是和您交流代碼和知識的的某個人分享一門編程語言,您將會學習它。因此,例如,只要那些 Python 庫存在、 社區(qū)也對 Python 語言很有經(jīng)驗的話,那么 Python 仍將會大行其道。”
研究人員發(fā)現(xiàn)關于語言實現(xiàn)的功能,社區(qū)是一個巨大的因素。雖然像 Python 和 Ruby 這樣的高級語言并沒有太大的差別,但,程序員總是容易覺得一種比另一種優(yōu)越。
“Rails 不一定要用 Ruby 語言編寫,但它用了,這就是社區(qū)因素在起作用,” Rabkin 說。“例如,復活 Objective-C 語言這件事就是蘋果的工程師團隊說‘讓我們使用它吧,’ 他們就沒得選擇了。”
通觀社會的影響及老舊代碼這些問題,我們發(fā)現(xiàn)最古老的和***的計算機語言都有巨大的惰性。Go 語言怎么樣才能超越 C 語言呢?如果有合適的人或公司說它超越它就超越。
“它歸結(jié)為誰傳播的更好誰就好,” Rabkin 說。
開始的圖片來自 Blake Patterson
via: http://readwrite.com/2014/09/02/programming-language-coding-lifetime
作者:Lauren Orsini 譯者:runningwater 校對:wxy