為什么需要更多的編程語言

jopen 10年前發布 | 12K 次閱讀 編程語言

蘋果公司推出了一個新的 Mac/iOS 應用開發語言——Swift。以下是一個門外漢對此的理解。

對于Swift編程語言的興奮勁逐漸消散之后,早上我醒來后在《紐約時報》看到了Farhad Manjoo的推文,他非常好奇,為什么還有人會需要新的編程語言。

I would love to read a somewhat but not extremely technical article on this question: Why are we still seeing new programming languages?

如今計算機已經普及到各個領域,我們擁有的計算機語言難道還不夠用嗎?最簡單的答案就是:不夠。只要有人想學新語言,我們就會開發新語言。這么做的原因很簡單,而且能讓反對機械自動化的人都可以接受。(向我們的Node.js項目中的高手Chris McClellan致敬,他和我討論了這個話題。)

教人編程

如果這個問題可以看做”先有雞還是先有蛋”的問題,那么我們先從蛋開始。許多語言(譬如我接觸的第一個語言,BASIC)的開發初衷是為了將編程概念簡單化,好讓初學者、愛好者甚至所有人都能掌握。計算機實際上是以二進制代碼在“思考”。這個說法的理由很簡單:如果你將下達給機器的指令都用“是”或“否”(分別用1和0來表示)的問題來表達,那么計算機是不可能將事情搞得一團糟的(當然,如果你的代碼有錯的話另當別論)。這個天才的想法是一個名為克勞德·香農的人想出來的,他在二戰后認識到無線電信號在傳輸重要信息的時候非常地不可靠,這些信息現在你可能會交給計算機來存儲或者處理。

自二進制代碼以后,幾乎每種的語言都是為了讓人們可以簡易可靠地讀寫機器指令而存在的。如果要人用冗長的二進制來寫這些指令的話,他們會無聊到自摳 雙目的。(譬如大寫字母A,用二進制代碼表示的話,是01000001。小寫字母a是01100001。因此,這樣寫一個單詞就得花不少時間,更不用說一 般的程序都得有成千上萬行的代碼了。)

如果某種語言使用了大量的通俗英語單詞而簡單易讀的話,那么它是“冗長”的。Objective-C,Apple的編程語言,其荒謬的冗長程度臭名 昭著,而這也為Apple贏得了“對用戶友好”的名聲。簡單易用的并不僅僅是計算機,還包括語言本身。以下是一段虛擬代碼,Objective-C中的函 數就是這個樣子的。即使你從來沒有編過程,你也可以一星半點地明白程序員是想讓計算機做什么事

1
[someInstance doSomethingWithObject:a andAnotherParam:b];

實際上,使用這么多“黑客工具”的原因在于 理解編程概念最愉悅的方式就是將其轉化成現實中的東西。如此一來,剛開始編程的人就可以很好地接受這些概念。如果以上這些你聽來覺得無聊的話,并不意味著編程不適合你,只是你可以從硬件開始編程,而不要從軟件開始。

自我復制

和其他創新一樣,語言最開始也是由一些固執的人想用自己的方式做事而創造出來的,“自己的方式”也就是“最佳方式”。下面這個故事發生在很久以前。

1971年的時候,人們用Lisp編程。斯坦福大學的一個工程師發明了一個工具來編輯Lisp代碼,今天的話我們會將其稱為原始的文件編輯器–就和Mac上的TextEdit應用一樣。但它用起來相當不直觀。

要替換字符的話,人們無法直接將其鍵入到文檔中,而得將一個字符先寫到TECO命令語言中,讓其切換到輸入模式,然后鍵入要替換的字符,在此期間被編輯的文檔并不會顯示在屏幕上。

然后你得敲擊ESC鍵來查看更改的地方,就和“保存并預覽”博文的草稿一樣。總之,這事讓人挺痛苦的。

另一個來自于麻省理工的工程師,在訪問帕羅奧多(斯坦福大學所在地)時看到了這項發明,回到劍橋市(麻省理工所在地)之后決定自己重做一個改進版。他的同行們最后開始為這種新的接口編寫“宏”–重用部分代碼來節省時間。當他們將這些宏規范化到系統中之后,他們將其稱為 EMACS,“Editing MACroS”的縮寫。

你也許會說:“可這根本不算一個新語言啊。”的確如此,但和人類語言一樣,編程語言經常也是從一個相近的語言發展而來,當發展到和原語言相當不一樣的時候,就會被它的支持者們冠以“新語言”的名頭。EMACS的故事說明了新語言被發明的另外一個原因:它們省事。

抽象

如果你是一個自由主義藝術家,不要被抽象這個術語嚇到–它在編程中的意思和生活中的意思其實是一樣的。試著這樣想下:在寫作的時候,我們將一段文字 稱為“段落”。這是對一種想法,或者一些語句的概念作出的抽象。我們采用“段落”這個詞,于是我們向別人說起這段文字時不用將整個段落的文字背誦出來。

同樣的道理,程序員總是在創建可重用的代碼,因為和其他人類一樣,他們很懶,不想做重復勞動。大約30年之前,產生了一項重大的開發運動,計算機程序幾乎都可以用可重用部件組裝而成,程序員們將這些部件成為“類”。(這和建筑、汽車或家具設計中的模塊化運動相 似。)這個設計模式就是人們熟知的“面向對象編程”。NeXT,也就是喬布斯在Apple之后創立的公司,將這個創意無限的模式稱為編程的未來。他們對對 “面向對象編程”興趣十足,決定將其用來命名他們自己版本的C語言,于是Objective-C誕生了。Apple在收購NeXT之后也繼承了 Objective-C,并將OS變成了Mac OS X。

Swift,Apple 編程語言的新生兒,就是基于Objective-C的另一個抽象層,Web開發人員因此可以用更合適他們風格來寫代碼。但是當程序運行時,Swift還是 將其編譯成舊風格的C語言代碼。很多語言都是這樣–僅僅是為了適應開發者的風格。另一個例子是CoffeeScript,它是另一種風格的 JavaScript,但是當計算機編譯運行程序時,還是將CoffeeScript代碼轉換成JavaScript。(Swift和Objective-C的不同之處

新的基礎結構

有時你會為了適應構造上的改變而需要一種新的語言。在“云”的概念出來之后,這種情況一直在發生。

傳統上程序是運行在本地計算機上的。這些程序就是你下載并安裝在計算機上的那些“應用”。有時,被稱為“網絡”的東西可以將一臺計算機上的應用運行 到遠程的其它計算機上。這些被稱為網頁應用,譬如非死book.com或者推ter.com。它們被稱為應用程序,因為他們并不僅僅是靜態的信 息頁面。在網頁應用中,你可以做出動作,并立即看到隨之產生的改變,雖然真正的非死book.com應用是運行在某處的服務器上的,而不是在你自己的 計算機上面。

創建這樣的應用實際上代價是很高的:你耗費大量的計算力和帶寬來將分發“作為服務的軟件”,也就是“運行于云端”。運行這些云要耗費大量的金錢,尤其是用于冷卻服務器的空調。因此最近一群天才聚集到一起創造了一個被稱為Node.js的開源平臺,它可以大幅度地降低網頁中運行應用的成本,至于原因,在此我不會有所涉及。

許多開發者更愿意他們的應用能作為服務來運行,因為網頁與可下載的應用相比有更多優點,譬如:沒有東西可下載!Node.js可以讓網頁應用大規模 地降低運行成本,因此參與到此項目中的人數有爆炸性地增長。Node.js平臺使用JavaScript寫的。Node(以及其他的一些流行的庫,譬如 Meteor.js和Angular.js)解釋了為何JavaScript的使用人數最近呈爆炸性增長。。

為什么需要更多的編程語言

這并不是說最流行的語言就獨領風騷。其它語言譬如Erlang重新激起了人們的興趣,因為應用正在趨向于運行在云端。實際上,正是這款并不怎么流行的語言 Erlang給WhatsApp提供了強勁的動力

文化

編程語言是由一些人為另外一些人創造的。因此,它們承載著創造者的文化印記,有些文化印記不為其他群體的工程師們喜愛,因此他們轉而創造出了自己的版本。這在計算機科學歷史中無數次上演,導致產生了許多流行語言的方言。最明顯例子就是首個阿拉伯語編程語言。去年有篇關于Ramsey Nasser的文章,他創造了第一個表情文字編程語言:

Nasser評論到: “我們使用的工具承載著它們創造者的文化設想。”當Nasser創造???的時候,他在將true和false翻譯成阿拉伯語時遇到了困難。最終他使用了 correct和incorrect這兩個詞,雖然兩者的概念并不完全吻合,但是他說這最終演變成了一場他不得不和他父母以及朋友進行的奇妙對話。 Nasser旨在創造編碼的通用性:“Emojinal意在甩掉文化包袱。”

這是一個古老格言的另一種版本:你說的語言改變了你思考的方式。有些語言有助于某些類型的思考;而有些有助于其他類型的。正如我們在四月份寫下的文字所說

“語言不僅是針對不同工作的不同工具,它們還是可以描繪你思考編程的技術。”Richard Pattis說。他是加州大學的信息學高級講師,他于1981年發明了Karel教育編程語言。Pattis 建議多才多藝的程序員要擴展思維的話,最好學習不同編程范式的語言,從面向對象語言(譬如C++/JAVA),到函數式語言(譬如ML和 Haskell),到腳本語言(譬如Lisp和Python),到邏輯基礎語言(譬如Prolog),到低級語言(譬如C,Java虛擬機或者機器語 言)。目標不是為了熟練運用這些語言,而是能從不同的角度來思考解決問題。好的程序員不僅僅學習如何編程,還要學習核心概念,用其武裝自己的大腦,從而寫 出高效的代碼來解決問題。

程序員們,如果你對為何編程語言會興起(或衰落)有任何見解,請在推ter上告訴我,請@chrisdannen

更新:在”抽象”部分提到的編程中設計模式的重要性是不可以低估的。在我發布這篇推文時,開發人員 Matt Drance回答了這個問題。如果要我挑出一句話來回答的話,這句話也許是最精準的了:新語言之所以興起,是因為目前的設計模式(也就是目前的 開發語言)可能無法滿足我們在未來的需求了。

原文鏈接: Chris Dannen   翻譯: 伯樂在線 - 伯樂在線讀者
譯文鏈接: http://blog.jobbole.com/72508/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!