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

























