網路不打烊

程式語言的物競人擇

開放源碼帶來程式語言亟需的多樣性!

撰文/葉平

網路不打烊

程式語言的物競人擇

開放源碼帶來程式語言亟需的多樣性!

撰文/葉平


某位科學家曾說過:「當我思考問題陷入困境時,我會改用另一種語言來描述問題和思考,有時就能找到解答。」


語言是人類表達自我的工具,不同的語言有不同的語法、結構和內在邏輯;電腦程式語言則是人類表達算式讓電腦執行的工具,不同的程式語言也有不同的邏輯體系和表達能力。早期的組合語言(assembly language)是把以0和1表示的電腦指令用英文縮寫表示,撰寫程式時就不必記憶指令00是加法、89會搬資料,而可以用ADD、MOV來表示這些指令,不但寫的人方便,程式也容易理解得多。


第一個高階語言Fortran是為了表達和運算數學公式而設計的。從此之後,程式語言百花齊放。比方說,C語言是與低階系統溝通最普遍的程式語言,強調高效率,在記憶體操作上特別拿手;SQL是操作資料庫最通用的語言,專長在表達資料的結構和運算;Perl設計之初是為了處理文字的擷取、過濾、轉換等工作,用Perl語言來撰寫文字操作的程式甚為方便;Javascript則是動態網頁的主流語言,它的看家本領就是處理網頁元素;R語言則是近來大量資料分析和統計常用的語言。此外還有數以百計的其他程式語言,各擅勝場。


程式語言極少有憑空出世的,絕大多數的新語言都會借鏡一個或多個既有語言,再加上新的觀念或想法而形成。初期只有少數大學、公司或是政府能夠接觸電腦,也只有這些組織的成員有機會發展程式語言,例如Fortran出自IBM、麻省理工學院(MIT)是Lisp的家、貝爾實驗室孕育出C語言等。1980、1990年代個人電腦和網際網路普及之後,很多人都能在自己的電腦上創作並分享給同好,除了文字、音樂、圖畫這些傳統創作形式之外,程式語言也成為一種創作。Perl、Python、Ruby、PHP、CoffeeScript等語言,都是創作者為了解決自己碰到的問題而設計,再藉由網路的力量茁壯起來。這些語言在學術上或許沒有太大的突破,也沒有商業力量推廣或知名學者背書,但草根的力量使得它們不受商業利益左右,也不因學者興趣改變而沒落,只要一直有人喜歡用,就能細水長流。


「有人喜歡用」正是語言能傳世的關鍵。軟體開發人員寫程式是為了解決問題,而不是成天和語法奮鬥。在動手寫程式之前,程式語言的選擇對整個工程的開發時程、執行效能、維護成本影響甚巨,常會有好幾個候選語言競爭。換句話說,每個軟體工程的開始都是程式語言的一次「物競人擇」。軟體環境的快速變遷造成語言選擇的改變,無法跟上的語言就有滅絕的危機。


草根的程式語言大多是開放源碼的,和商業力量創造的語言形成強烈對比。以Python為例,任何人都可以在論壇上提出改良語言的想法,經過討論,把想法去蕪存菁整理成具體提案,也可以把想法實作出來、送出源碼,讓更多人審視、試用、回應,最後由Python原創人范羅蘇姆(Guido Van Rossum)決定是否接受,並說明接受或拒絕的原因。這個流程讓各種不同背景、不同應用、不同思考習慣的人理性思辨新提案的優缺點,對Python產生了極大的正面影響,就像生物多樣性會強化物種的存活能力,參與者的多樣性也大幅強化了程式語言的存活能力。