世界上的程序語言已這么豐富,為什么還不夠?
程序語言百百種,想要學 Coding 就必須先確定你的目的是什么,有的是拿來寫App的,有的是專寫操作系統(tǒng),有的則是拿來寫網(wǎng)頁的 …… 各種不同的目的都有其最適合的語言。常見的語言如 C++、JavaScript、VB、VC、Matlab、Python 等,但其實像WhatsApp如此受歡迎的App就不是前述這幾種語言寫的,為什么要有那么多的程序語言?
本文作者 Chris Dannen 同時是知名科技媒體《Fast Company Digital》 和《FastCo.Labs》 的編輯,曾經做過管理顧問、戶外運動的採訪記者以及 Red Bull Energy Drink 的品牌代表,曾寫過兩本關于 iOS 開發(fā)與設計的書。以下以作者***人稱撰寫。
世界上的程序語言已這么豐富,為什么我們還需要更多?
六月初,Apple 發(fā)布了一個新的語言Swift,主要是為了建立 Mac Apps 而開發(fā)的,你有想過為什么需要這么多的程序語言嗎?難道現(xiàn)在開發(fā)的都還不夠用嗎?沒錯,就是一個簡單到不行的原因:只要有人想要學習,就會有各種不同的語言被開發(fā)出來。因為科技進步,加上使用語言的目的性不同,越來越廣泛也越齊全。
如果把這個問題套用到「雞生蛋還是蛋生雞」,這個問題的解答會是蛋生雞。許多語言的開端,都是要讓編寫程序的概念變得更簡單、更適合初學者和有興趣的朋友。事實上,電腦把語言設成二元碼(電腦進行儲存和運算時,采用二進位,也就是所有資訊都被替代成二進位字串),為什么要這么做呢?
原因很簡單:如果你把你所有的指示轉換成 Yes 或 No 的問題,并分別以 1 和 0 表示,這么一來電腦就不會搞混了(除非一開始的編碼是錯的)。在第二次世界大戰(zhàn)時,廣播訊號是以非常糟糕又不可靠的無線電導航來傳重要訊息,而二元碼如此 聰明的創(chuàng)新是 Claude Shannon (美國數(shù)學家、電子工程師和密碼學家,被譽為資訊理論的創(chuàng)始人)所發(fā)現(xiàn)的,只要用二元碼,電腦就可以把資訊儲存與進行處理。
自從二元碼誕生,非常多的語言都以它來設計,使工程師能夠寫得更流暢又更容易讀,雖然會感到無聊或是覺得寫二元碼很冗長。比如說大寫字母 A 好了,以二元碼表示成 01000001 ,如果是小寫 a 呢,則是 01100001 ,寫完一個程序要花一些時間,但不用介意長度有幾千行,因為大多數(shù)的程序都是這樣來的。
當一個語言以易懂的英文寫,就更容易讀了,但另一方面就會顯得相當冗長;像是 Apple 的程序語言 Objective-C(是一種通用、高階、物件導向的程序語言,任何原始的 C 語言承是不需要經過修改就能直接通過 Objective-C 的編譯器),就是冗長到不行,但主要也是為了要滿足對使用者友善的特色,語言本身就是非常容易使用的。即使在你的生命中從來沒有寫過程序,或多或少你也能 了解一點工程師想要告訴電腦要做什么,它長的大概是像這個樣子:[someInstance doSomethingWithObject:a andAnotherParam:b];
事實上,為什么在物理電子學的范疇里有這么多的駭客套件,主要是因為要讓現(xiàn)實世界的裝置通常能以最自然的方式轉換成寫程序的概念,至少對于寫程序的初學者而言,這類的程序語言是比較適合的,即使它很冗長。
程序語言就是開發(fā)者自我性格的復制
就像其他的創(chuàng)新一樣,程序語言通常都是從一個偏執(zhí)頑固的人開始,試圖要走一條只屬于自己的路。
舉例來說1971年,在這個領域的大多數(shù)人都在 Lisp(源于列表處理器,List Processor 的縮寫,是歷史悠久的電腦程序語言家族,于 1958 年基于 λ 演算創(chuàng)造,是***個函數(shù)語言程序設計的語言)寫程序,一個在 Stanford 的工程師明白了要如何編輯 Lisp 的編碼,也就是我們今天所謂的原始的編輯器。想像一下,就是一個在 Mac 上的 TextEdit App,但當然不是像現(xiàn)在一樣可以直接簡單的使用。
然后你必須按 Escape 鍵跳出頁面,檢查你所做的那些改變,像是儲存或瀏覽在部落格貼文的草稿等,是否跟你預想中的一樣;不管怎么說,重復對照你所想的與結果,這簡直是一件痛苦的事。
另一個從 MIT 來的工程師看到在 Palo Alto 的創(chuàng)新后,決定要回 Cambridge 后靠自己把它復製下來,并且做一些改善與調整。而其他同事們?yōu)榱诵陆缑娼K于開始寫 macros(巨集,根據(jù)一系列預定的規(guī)則替換一定的文字模式)--可重復使用的編碼位元以節(jié)省時間。當他們將巨集的集合程序化,結合到一個系統(tǒng)內,他們 把這個叫做 EMACS--Editing MACroS 的縮寫。
抽象到不行
如果你是念文法商的,別被這樣的名詞嚇到,它代表著一個程序的生命。
換個角度想像,在寫作時,我們會把字句的結合叫做段落,這是就寫文章的觀點來看,它也是一個抽象的概念,當我們要告訴其他人正在討論文章的哪部份時,我們不需要再重新引述整個段落的文字內容,而是告訴他們第幾段就好,說到底它也是抽象的。
同樣地,寫程序的工程師經常會試著要創(chuàng)造可重復使用的編碼字元,因為就像其他人一樣,會懶惰,會不想做重復的事情。
大約 30 年前有個大改變,對于藉由可重復使用的部分來建立電腦程序,將它稱作為物件(若是在建筑、車子或是家具設計,就很像是模組化), 這樣的設計模式稱作為物件導向的程序編寫,在 NeXT(Steve Jobs 在創(chuàng)立蘋果后所成立的公司)的那段期間,這可是相當創(chuàng)新的。當時還將它視為未來程序發(fā)展的***者,所以他們就將這樣物件導向的程序拿去賣,并且決定將它取 為在 C 語言架構下屬于他們自己版本的名稱,于是 Objective-C 就這樣誕生了。
當 Apple 買下 NeXT 后繼承了 Objective-C,并把他們公司的 OS 變成 Mac OSX。
云端時代,語言也需要新架構
當本質上發(fā)生改變的時候,你必須要去適應它,因此有時候你會需要一個新的語言。伴隨著云端時代的來臨,更是如此。
傳統(tǒng)上來說,程序會依下載位置在你的電腦(裝置)上跑,就像你所下載的 Apps 和安裝到你電腦內的軟體。然而有時候,某個叫作網(wǎng)絡的東西,它有無限神奇的功能,能夠把在某一臺電腦運作的 App 傳送到另一臺電腦上,這些是網(wǎng)絡 App,比如說像是 Facebook.com 或是 Twitter.com 等等。
在網(wǎng)絡 App 你能夠做很多事情并且看到即時的變化,F(xiàn)acebook.com 的 App 是在某處的伺服器運作,而不是你實際的電腦上。
要創(chuàng)一個 App 其實是需要花好一番功夫的,你需要不只是電腦能力和頻寬傳輸,軟體是一種服務,從云端來的服務,這些云端是需要花一大筆成本來操作的,所以最近一群聰明的人聚集在一起,然后創(chuàng)造叫作 Node.js 的開源平臺,通過網(wǎng)絡跑 App 以大幅降低成本。
許多開發(fā)商偏好將他們的 App 視為一種服務,因為一個網(wǎng)站有非常多的下載 App 的優(yōu)勢,像是免費下載,使 App 更便宜且在一定規(guī)模下運作,已經造成了 Node.js 一陣轟動,而 Node.js 是由 JavaScript 寫出來的,Node 解釋了為什么身為一個語言的 JavaScript 最近可以如此受歡迎。
并不是要說上圖這幾個受歡迎的語言已經霸占了大部分市場,其他的語言像是 Erlang,自從 App 開始移往云端后,它又重新的引起大家的興趣。事實上,相較于圖上這幾個語言來說,受歡迎程度相當?shù)偷?Erlang 是創(chuàng)造 WhatsApp 的***功臣。
一個程序語言,承載了一群自造者的文化
一部份人創(chuàng)造的程序語言是為了其他人,因此他們承載著所有自造者的文化產物,部份文化產物又和其他的工程師群不同,他們各自走著屬于自身文化產 物下的版本,在電腦科學的歷史上這已經發(fā)生過無數(shù)次,也形成著***語言的運算子重載(對已有的運算符號重新定義,賦予它另一種功能以適應不同的數(shù)據(jù)類 型)。
有些語言對于邏輯思考的類型是有一定幫助的,一個你所用的語言會改變你的思考模式。就像是 Richard Pattis(一個加州大學爾灣分校資訊學的資深講師)所說,「不只是為了不同的任務而有不同的語言工具,同時它們也形塑著你如何看待寫程序的科技」。
這也是為什么會有這么多程序語言存在著,不同的語言代表著一群工程師腦中的思考邏輯模式,當然如果身為語言的使用者而非語言的創(chuàng)造者,太多的選擇中要選擇一個對工作最有幫助的,最能達成目標的那個。
原文:Why Does The World Need More Programming Languages?
來源:techorange