世界上的程序語言那麼豐富,還不夠嗎?

2021-01-21 IT168

  【IT168 評論】程序語言百百種,想要學 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(一個加州大學爾灣分校資訊學的資深講師)所說,「不只是為了不同的任務而有不同的語言工具,同時它們也形塑著你如何看待寫程序的科技」。

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

相關焦點

  • 為什麼會有這麼多種程序設計語言?
    傳說人類建造通天塔觸怒上帝,上帝施法使人類語言混亂彼此之間無法交流。這就是說各種各樣的語言其實就是禍亂之源——只會導致交流的不便。可是看看如今的程序設計語言的數量,你會懷疑人類是否又在造「通天塔」了?真的有這麼多語言的必要嗎?我到底要學習多少種程序設計語言才夠用呢?
  • 程序猿必看:程序設計語言發展史
    今天,我們就來談一談程序設計語言的發展史。FortranFORTRANFORTRAN語言是世界上第一個被正式推廣使用的高級語言Pascal語言廣泛用於各種軟體,程序分為名稱、設置、開始、程序、讀取、結束,結構層次強,嚴謹而又緊密。
  • 我們的漢語將來有可能像英語一樣,成為世界通用語言嗎?
    我們的漢語將來有可能像英語一樣,成為世界通用語言嗎?對於漢語能不能成為世界通用語言這一事,我認為不能就語言說語言,也就是說不能就事論事。英語之所以成為世界通用語言,其根本原因並不是像大家所說的英語方便好用,什麼電腦鍵盤、電腦編程、數學公式等等,這些都是皮毛。記得電腦剛出現的時候,我們還在學校讀書,操作電腦必須要學英語,電腦當時用的是dos系統,不懂英語的人沒辦法操作電腦。當時很多人就懷疑說漢語沒辦法在電腦上應用,可是現在,漢語打字、漢語操作電腦是一件輕而易舉的事。
  • 漢語不是世界上最難學的語言,最難的語言竟然是鄰國的它?
    網絡上一度流傳著,聯合國教科文組織發布的世界上最難學的十大語言排行,漢語被認為是全世界最難學的語言,想必大家都聽說過。在實際教學中,據美國外交學院的統計,以母語為英語者,至少需要學滿2200個小時,漢語才能達到精通水平。
  • 微軟RobustFill:無需程式語言,讓神經網絡自動生成程序
    選自Microsoft Research blog作者:Rishabh Singh等參與:李澤南長久以來,擺脫程式語言的束縛,讓計算機自我生成程序一直是開發者們的夢想,最近微軟研究者推出的RobustFill讓夢想更近了一步,他們的研究成果即將在 ICLR 2017 大會上出現。
  • C語言-(第一章)程序設計和C語言
    什麼是計算機語言人和人之間交流需要語言,人和計算機交流也需要語言。這就需要創造一種計算機和人都能識別的語言,這就是計算機語言。計算機語言經歷了三個發展階段。機器語言:計算機工作基於二進位,從根本上說,計算機只能識別和接受0和1組成的指令。
  • 在極大豐富的世界
    但是極大豐富的世界真正給予我們是永恆的幸福嗎?而實事證明一切的幸福皆緣自於磨難,不經歷修心煉力不易參透其中的奧妙之處。因為極大豐富的世界始終抵禦不了人類的野心,哪怕這個野心有時是那麼的不切實際,直到你無法形容為此付出的巨大代價,或者說沒有野心就沒有文明,但野心和野蠻也並非總是孿生兄弟。那麼什麼是文明呢?
  • 大腦如何處理電腦程式語言?
    電腦程式語言是近代科學的新產物。神經學家研究發現,理解代碼是需要大腦一個複雜的認知網絡才能完成的任務,與單獨的語言處理和數學分析都不一樣。
  • NOIP信息化奧賽高級程序設計語言應該學它,正視現實,不要走錯路
    那麼我們應該選擇學哪一門呢?這個,你不用再糾結了,別人已經替你做好了選擇,因為到2022年將被全部取消Pascal,2022年將部分取消C語言,唯有C++依然堅挺,所有說目前只能學習C++。有報導說Python也將被列為新興的重點語言,但目前還沒有官方的通知。既然決定了學習C++,那麼它和Pascal、C、python有什麼區別?C++好學嗎?
  • 假如女人是一種程式語言
    而二進位就是 0 和1,假設 1 代表男人,0 代表女人,那麼瞬間就可以發現世界就變成了一臺大「計算機」。而愛情和情愛也可以看成是 1 和 0 組成的二進位機器碼。假如女人是一種程式語言,也許每個男人心中都有自己最喜歡的那一個吧?我認為女人可分兩類,「面向過程」和「面向對象」。
  • 結構工程師基礎知識點:程序設計語言
    一、程序設計語言  電腦程式設計語言又稱算法語言。目前國內外比較通用的算法語言有多種,如BASIC、FORTRAN、PASCAL、ALGOL、C等。隨著算法語言本身的發展和完善,同一語言中還有不同的標準文本問世。每種語言都有其自身的規則和特點,但也有共性的地方。
  • 漢語真的是世界上最難學習的語言嗎?
    但是知道嗎?聯合國教科文組織公布的世界上最難學習的十種語言中,漢語名列第幾位嗎?漢語在這份名單中位居榜首。漢語的歷史非常悠久,世界上被人們使用最多的語言之一。對於其他國家的人來說,漢語比英語要難上100倍。那是什麼原因導致漢語被公認為是最難學習的語言的呢。主要有四個原因:一、外國人經常會說「中文發音為什麼這麼難啊?」
  • 陳嘉映×周濂:我們對人生宇宙的困惑,是因為科學發展還不夠充分嗎?
    劉慈欣認為,科學和技術能夠解決人類的一切問題,現在還沒有全部解決,是因為科學的發展不夠充分。當江曉原質疑說,科學能否解決人生目的的問題時,劉慈欣給出了一個頗讓人吃驚的回答:「科學可能無法回答人生目的的問題,但我們可以通過科學來取消這個問題。」
  • C語言編寫Windows下的實用程序:[1]對話框
    相信很多C語言初學者,都會有一種困惑,C語言的教程、教材上面很多是對C語言的語法和算法講解,而沒有教大家做一些真正可以用到的程序,從而質疑C語言到底是否足夠牛X,能夠開發出炫麗多彩的遊戲嗎;對C語言的可用性、易用性、強大產生懷疑。
  • 人類歷史上第一隻程序BUG,是一位老奶奶抓住的
    每一步,與世界同步Bug原意是「臭蟲」或「蟲子」,大家不一定都知道,但是把在電腦系統或程序中,隱藏著的一些未被發現的缺陷或問題叫BUG,家長小朋友們一定是一天怎麼也要念個幾回了。以至於到現在,BUG在網絡上已經引申到各種含義,比如「我這充滿BUG的人生」……那麼BUG的由來是怎樣的?你知道嗎?1947年,哈佛大學的計算機哈佛二代(Harvard Mark II)突然停止了運行。原來,哈佛二代當時還沒有二極體和電晶體,它是一部繼電器計算機,無數個喀噠作響的電磁開關在其中運作。
  • 世界程式語言排行榜
    導讀:TIOBE 程式語言社區排行榜是程式語言流行趨勢的一個指標,每月更新,這份排行榜排名基於網際網路上有經驗的程式設計師、 課程和第三方廠商的數量。排名使用著名的搜尋引擎(諸如 Google、MSN、Yahoo!、Wikipedia、YouTube 以及 Baidu 等)進行計算。
  • 科普:什麼是程序,以及軟體與程序的區別
    計算機雖然用起來十分方便,無論是工作還是生活方面,但是其結構卻是十分複雜的,那麼計算機的組成都有哪些方面呢?什麼是程序計算機是一種由電子元器件和線路組成的、可以用來解決問題的通用工具。程序是通過程序設計語言來實現的。在低級程序語言如機器語言、彙編語言中,程序是一組有序的指令序列及有關的數據;在高級程序語言中,程序通常是一組說明和語句。程序必須裝入計算機內部才能實際起作用。
  • 計算機視覺和自然語言理解的下一步是什麼?
    計算機視覺和自然語言理解領域的下一步是什麼?最初出現在Quora上:一個獲取和分享知識的地方,使人們能夠向他人學習,更好地理解世界。Scale執行長兼創始人亞歷山大王(Alexandr Wang)的回答。
  • 編寫C語言程序時會有哪些常見錯誤?
    【標點符號】1、在編寫程序時,如果出現中文標點,編譯器會報錯;2、每一行代碼末尾需要有一個分號「;」;3、使用注釋時,一定要成對使用;【大、小寫】1、在C語言中是區分大小寫的。例如:我們寫的main函數,如果要是改成大寫Main這種形式,是行不通的,如圖3-6-1所示:2、在C語言裡,文件命名一定要是英文的。
  • 正確的思維轉變,帶動語言模式讓你的世界豁然開朗
    無論物質或精神財富上眼前擁有了多少,若還牢牢把守著,不肯大方給予;或貪心不足,總覺得不夠;或自以為是,認為理所當然應該得到這些……那都還算不得成功,只是暫時擁有罷了。無論做什麼,心懷大愛,與內心、與願景、與資源都有緊密的聯結,才容易保持生生不息的強大動力。