首頁»編程語言»世界上的程序語言已這么豐富 為什么還不夠?

世界上的程序語言已這么豐富 為什么還不夠?

來源:techorange 發布時間:2014-06-30 閱讀次數:

  程序語言百百種,想要學 Coding 就必須先確定你的目的是什么,有的是拿來寫 App 的,有的是專寫操作系統,有的則是拿來寫網頁的 …… 各種不同的目的都有其最適合的語言。常見的語言如 C++、JavaScript、VB、VC、Matlab、Python 等,但其實像 WhatsApp 如此受歡迎的 App 就不是前述這幾種語言寫的,為什么要有那么多的程序語言?

        本文作者 Chris Dannen 同時是知名科技媒體《Fast Company Digital》 和《FastCo.Labs》 的編輯,曾經做過管理顧問、戶外運動的採訪記者以及 Red Bull Energy Drink 的品牌代表,曾寫過兩本關于 iOS 開發與設計的書。以下以作者第一人稱撰寫。

        世界上的程序語言已這么豐富,為什么我們還需要更多?

        六月初,Apple 發布了一個新的語言 Swift,主要是為了建立 Mac Apps 而開發的,你有想過為什么需要這么多的程序語言嗎?難道現在開發的都還不夠用嗎?沒錯,就是一個簡單到不行的原因:只要有人想要學習,就會有各種不同的語 言被開發出來。因為科技進步,加上使用語言的目的性不同,越來越廣泛也越齊全。

        如果把這個問題套用到「雞生蛋還是蛋生雞」,這個問題的解答會是蛋生雞。許多語言的開端,都是要讓編寫程序的概念變得更簡單、更適合初學者和有 興趣的朋友。事實上,電腦把語言設成二元碼(電腦進行儲存和運算時,采用二進位,也就是所有資訊都被替代成二進位字串),為什么要這么做呢?

        原因很簡單:如果你把你所有的指示轉換成 Yes 或 No 的問題,并分別以 1 和 0 表示,這么一來電腦就不會搞混了(除非一開始的編碼是錯的)。在第二次世界大戰時,廣播訊號是以非常糟糕又不可靠的無線電導航來傳重要訊息,而二元碼如此 聰明的創新是 Claude Shannon (美國數學家、電子工程師和密碼學家,被譽為資訊理論的創始人)所發現的,只要用二元碼,電腦就可以把資訊儲存與進行處理。

        自從二元碼誕生,非常多的語言都以它來設計,使工程師能夠寫得更流暢又更容易讀,雖然會感到無聊或是覺得寫二元碼很冗長。比如說大寫字母 A 好了,以二元碼表示成 01000001 ,如果是小寫 a 呢,則是 01100001 ,寫完一個程序要花一些時間,但不用介意長度有幾千行,因為大多數的程序都是這樣來的。

        當一個語言以易懂的英文寫,就更容易讀了,但另一方面就會顯得相當冗長;像是 Apple 的程序語言 Objective-C (是一種通用、高階、物件導向的程序語言,任何原始的 C 語言承是不需要經過修改就能直接通過 Objective-C 的編譯器),就是冗長到不行,但主要也是為了要滿足對使用者友善的特色,語言本身就是非常容易使用的。即使在你的生命中從來沒有寫過程序,或多或少你也能 了解一點工程師想要告訴電腦要做什么,它長的大概是像這個樣子:[someInstance doSomethingWithObject:a andAnotherParam:b];

        事實上,為什么在物理電子學的范疇里有這么多的駭客套件,主要是因為要讓現實世界的裝置通常能以最自然的方式轉換成寫程序的概念,至少對于寫程序的初學者而言,這類的程序語言是比較適合的,即使它很冗長。

        程序語言就是開發者自我性格的復制

        就像其他的創新一樣,程序語言通常都是從一個偏執頑固的人開始,試圖要走一條只屬于自己的路。

        舉例來說 1971 年,在這個領域的大多數人都在 Lisp (源于列表處理器,List Processor 的縮寫,是歷史悠久的電腦程序語言家族,于 1958 年基于 λ 演算創造,是第一個函數語言程序設計的語言)寫程序,一個在 Stanford 的工程師明白了要如何編輯 Lisp 的編碼,也就是我們今天所謂的原始的編輯器。想像一下,就是一個在 Mac 上的 TextEdit App,但當然不是像現在一樣可以直接簡單的使用。

        然后你必須按 Escape 鍵跳出頁面,檢查你所做的那些改變,像是儲存或瀏覽在部落格貼文的草稿等,是否跟你預想中的一樣;不管怎么說,重復對照你所想的與結果,這簡直是一件痛苦的事。

        另一個從 MIT 來的工程師看到在 Palo Alto 的創新后,決定要回 Cambridge 后靠自己把它復製下來,并且做一些改善與調整。而其他同事們為了新界面終于開始寫 macros (巨集,根據一系列預定的規則替換一定的文字模式)--可重復使用的編碼位元以節省時間。當他們將巨集的集合程序化,結合到一個系統內,他們把這個叫做 EMACS--Editing MACroS 的縮寫。

        抽象到不行

        如果你是念文法商的,別被這樣的名詞嚇到,它代表著一個程序的生命。

        換個角度想像,在寫作時,我們會把字句的結合叫做段落,這是就寫文章的觀點來看,它也是一個抽象的概念,當我們要告訴其他人正在討論文章的哪部份時,我們不需要再重新引述整個段落的文字內容,而是告訴他們第幾段就好,說到底它也是抽象的。

        同樣地,寫程序的工程師經常會試著要創造可重復使用的編碼字元,因為就像其他人一樣,會懶惰,會不想做重復的事情。

        大約 30 年前有個大改變,對于藉由可重復使用的部分來建立電腦程序,將它稱作為物件(若是在建筑、車子或是家具設計,就很像是模組化), 這樣的設計模式稱作為物件導向的程序編寫,在 NeXT (Steve Jobs 在創立蘋果后所成立的公司)的那段期間,這可是相當創新的。當時還將它視為未來程序發展的領航者,所以他們就將這樣物件導向的程序拿去賣,并且決定將它取 為在 C 語言架構下屬于他們自己版本的名稱,于是 Objective-C 就這樣誕生了。

        當 Apple 買下 NeXT 后繼承了 Objective-C,并把他們公司的 OS 變成 Mac OSX。

        云端時代,語言也需要新架構

        當本質上發生改變的時候,你必須要去適應它,因此有時候你會需要一個新的語言。伴隨著云端時代的來臨,更是如此。

        傳統上來說,程序會依下載位置在你的電腦(裝置)上跑,就像你所下載的 Apps 和安裝到你電腦內的軟體。然而有時候,某個叫作網絡的東西,它有無限神奇的功能,能夠把在某一臺電腦運作的 App 傳送到另一臺電腦上,這些是網絡 App,比如說像是 Facebook.com 或是 Twitter.com 等等。

        在網絡 App 你能夠做很多事情并且看到即時的變化,Facebook.com 的 App 是在某處的伺服器運作,而不是你實際的電腦上。

        要創一個 App 其實是需要花好一番功夫的,你需要不只是電腦能力和頻寬傳輸,軟體是一種服務,從云端來的服務,這些云端是需要花一大筆成本來操作的,所以最近一群聰明的人聚集在一起,然后創造叫作 Node.js 的開源平臺,通過網絡跑 App 以大幅降低成本。

        許多開發商偏好將他們的 App 視為一種服務,因為一個網站有非常多的下載 App 的優勢,像是免費下載,使 App 更便宜且在一定規模下運作,已經造成了 Node.js 一陣轟動,而 Node.js 是由 JavaScript 寫出來的,Node 解釋了為什么身為一個語言的 JavaScript 最近可以如此受歡迎。

世界上的程序語言已這么豐富,為什么還不夠?

        并不是要說上圖這幾個受歡迎的語言已經霸占了大部分市場,其他的語言像是 Erlang,自從 App 開始移往云端后,它又重新的引起大家的興趣。事實上,相較于圖上這幾個語言來說,受歡迎程度相當低的 Erlang 是創造 WhatsApp 的最大功臣。

        一個程序語言,承載了一群自造者的文化

        一部份人創造的程序語言是為了其他人,因此他們承載著所有自造者的文化產物,部份文化產物又和其他的工程師群不同,他們各自走著屬于自身文化產 物下的版本,在電腦科學的歷史上這已經發生過無數次,也形成著最受歡迎語言的運算子重載(對已有的運算符號重新定義,賦予它另一種功能以適應不同的數據類 型)。

        有些語言對于邏輯思考的類型是有一定幫助的,一個你所用的語言會改變你的思考模式。就像是 Richard Pattis (一個加州大學爾灣分校資訊學的資深講師)所說,「不只是為了不同的任務而有不同的語言工具,同時它們也形塑著你如何看待寫程序的科技」。

        這也是為什么會有這么多程序語言存在著,不同的語言代表著一群工程師腦中的思考邏輯模式,當然如果身為語言的使用者而非語言的創造者,太多的選擇中要選擇一個對工作最有幫助的,最能達成目標的那個。

  英文原文:Why Does The World Need More Programming Languages?

QQ群:WEB開發者官方群(515171538),驗證消息:10000
微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
網友評論(共1條評論) 正在載入評論......
理智評論文明上網,拒絕惡意謾罵 發表評論 / 共1條評論
登錄會員中心
大神带着买彩票 辉南县| 宁津县| 托克逊县| 迁西县| 浏阳市| 襄垣县| 吉首市| 嘉义县| 北海市| 宁安市| 襄樊市| 永修县| 葵青区| 垫江县| 太和县| 区。| 从江县| 崇明县| 怀仁县| 建湖县| 班戈县| 进贤县| 永春县| 灵石县| 汉阴县| 宝鸡市| 广宁县| 那坡县| 洛扎县| 滨海县| 远安县| 盐城市| 临潭县| 永清县| 宁国市| 枣强县| 临泽县| 灵宝市|