為什麼C語言屹立不倒?

guokr發表於2012-09-30

  語言之間是不平等的。

  近年來,谷歌一直致力於開發出自己的程式語言以取代當今世上最常用的C、C++和JavaScript。在系統語言方向,谷歌的Go語言能夠為使用者在資料中心內建立大型軟體提供更多的便捷,有望取代C語言和C++的地位;而在網路開發方面,谷歌希望憑藉Dart取代JavaScript。程式語言的世界裡可謂是江山代有人才出,可有那麼一位引領風騷達數十年之久,它就是C語言。

  程式語言之間的競爭一天也沒能停歇,長江後浪推前浪,一代更比一代強。它們之中只有屈指可數的少數能夠被市場接納,成為程式設計師們日日夜夜的伴侶。究竟怎樣的程式語言才能夠成為大浪淘沙中的幸運兒?普林斯頓大學(Princeton)和加州大學伯克利分校(University of California at Berkeley)的研究者雷歐·馬耶若維奇(Leo Meyerovich)和阿里·拉布金(Ari Rabkin)希望通過自己的研究,來解開程式語言世界的叢林法則。他們在探尋一個問題——為何C語言雖垂垂老矣卻能屹而不倒?

  雷歐和阿里採訪了數以萬計的程式設計師,又在全球最大的軟體倉庫SourceForge梳理了超過30萬份的程式。“為什麼C語言沒有被淘汰?”拉布金提出了這個問題。的確,C語言距問世之初已經有了35年的歷史。在這期間裡,計算機邁出了不可測量的發展步伐,軟體和作業系統也早就今非昔比,程式語言中不乏叱吒風雲的新生代,而C語言也有了升級版。即便如此,C語言依舊風采不減當年。

  拉布金剛剛取得了加州大學伯克利分校的計算機博士學位,如今在普林斯頓大學做博士後。“在學術領域,現今的趨勢是解決那些尚未出現的難題,”拉布金說,“學者們希望能夠標新立異地建立起一個全新的語言系統,就沒有考慮這麼一套程式語言是否有實踐的價值。程式語言的開發者們缺少一個明確的目標。”他指出,有些程式語言甚至缺失了最基礎的東西,比如文件(Documentation);還有些開發者不停地在語言系統上畫蛇添足,弄到最後搞的程式設計師們只能因為它太“豐富”了不得不放棄。馬耶若維奇認為:“我們發現這個問題事實上不是一個技術領域的問題,它是因為整個學術界不夠注重實踐需求所造成的”。

  新興程式語言Scala是一個很好的例子。資料分析機構Slice-Data的創始人之一張洋(音譯)是Scala眾多使用者中的一員,他從2006年起開始接觸Scala。Scala在問世之初檔案編制就存在很大的缺陷,這給使用者的學習使用造成了很大的不便和痛苦。“我當時肯定是個受虐狂。”他回憶道。

  除卻新興語言本身的問題,這裡面還有一個要素是程式設計師的學習能力。試驗中收集的資訊表明,因為學習新語言太辛苦困難了,程式設計師們在使用一款新型的程式語言前並不會認認真真地去學習一番。馬耶若維奇拿Adobe公司開發的ActionScript作為例子。ActionScript是一款以使用者為導向的程式語言,程式設計師們普遍認為ActionScript的使用比較簡單。可是當要用ActionScript做新的事時,比如從媒體開發轉向遊戲開發,因為沒有系統的學習過,他們就束手無策了。

  我們普遍認為,程式設計師年齡越大,經驗就越老道,掌握的語言就越多。事實又是怎樣的呢?雷歐和阿里在試驗中發現,多數程式設計師都掌握了3至4種程式語言,但當他們到了35-40歲時,很多人就會步入管理崗位。脫離了程式設計一線,學習新語言的動機和機會就大打折扣了。

  馬耶若維奇認為,他們正在研究的這個課題十分重要,關乎整個行業是否能夠高速和健康地發展。他和拉布金把實驗資料都發布在網路上,希望他人能夠給出新的視角,同時為如何解決這一問題提供建議與幫助。

相關文章