本文作者 chris dannen 同時是知名科技**《fast company digital》 和《fastco.labs》 的編輯,曾經做過管理顧問、戶外運動的採訪記者以及 red bull energy drink 的品牌代表,曾寫過兩本關於 ios 開發與設計的書。以下以作者第一人稱撰寫。
世界上的程式語言已這麼豐富,為什麼我們還需要更多?
如果把這個問題套用到雞生蛋還是蛋生雞,這個問題的解答會是蛋生雞。許多語言的開端,都是要讓編寫程式的概念變得更簡單、更適合初學者和有興趣的朋友。事實上,電腦把語言設成二元碼(電腦進行儲存和運算時,採用二進位,也就是所有資訊都被替代成二進位字串),為什麼要這麼做呢?
原因很簡單:如果你把你所有的指示轉換成 yes 或 no 的問題,並分別以 1 和 0 表示,這麼一來電腦就不會搞混了(除非一開始的編碼是錯的)。在第二次世界大戰時,廣播訊號是以非常糟糕又不可靠的無線電導航來傳重要訊息,而二元碼如此 聰明的創新是 claude shannon (美國數學家、電子工程師和密碼學家,被譽為資訊理論的創始人)所發現的,只要用二元碼,電腦就可以把資訊儲存與進行處理。
自從二元碼誕生,非常多的語言都以它來設計,使工程師能夠寫得更流暢又更容易讀,雖然會感到無聊或是覺得寫二元碼很冗長。比如說大寫字母 a 好了,以二元碼表示成 01000001 ,如果是小寫 a 呢,則是 01100001 ,寫完乙個程式要花一些時間,但不用介意長度有幾千行,因為大多數的程式都是這樣來的。
[someinstance dosomethingwithobject:a andanotherparam:b];
事實上,為什麼在物理電子學的範疇裡有這麼多的駭客套件,主要是因為要讓現實世界的裝置通常能以最自然的方式轉換成寫程式的概念,至少對於寫程式的初學者而言,這類的程式語言是比較適合的,即使它很冗長。
程式語言就是開發者自我性格的複製
就像其他的創新一樣,程式語言通常都是從乙個偏執頑固的人開始,試圖要走一條只屬於自己的路。
然後你必須按 escape 鍵跳出頁面,檢查你所做的那些改變,像是儲存或瀏覽在部落格貼文的草稿等,是否跟你預想中的一樣;不管怎麼說,重複對照你所想的與結果,這簡直是一件痛苦的事。
另乙個從 mit 來的工程師看到在 palo alto 的創新後,決定要回 cambridge 後靠自己把它複製下來,並且做一些改善與調整。而其他同事們為了新介面終於開始寫 macros(巨集,根據一系列預定的規則替換一定的文字模式)--可重複使用的編碼位元以節省時間。當他們將巨集的集合程式化,結合到乙個系統內,他們 把這個叫做 emacs--editing macros 的縮寫。
抽象到不行
如果你是念文法商的,別被這樣的名詞嚇到,它代表著乙個程式的生命。
換個角度想像,在寫作時,我們會把字句的結合叫做段落,這是就寫文章的觀點來看,它也是乙個抽象的概念,當我們要告訴其他人正在討**章的哪部份時,我們不需要再重新引述整個段落的文字內容,而是告訴他們第幾段就好,說到底它也是抽象的。
同樣地,寫程式的工程師經常會試著要創造可重複使用的編碼字元,因為就像其他人一樣,會懶惰,會不想做重複的事情。
大約 30 年前有個大改變,對於借由可重複使用的部分來建立電腦程式,將它稱作為物件(若是在建築、車子或是家具設計,就很像是模組化), 這樣的設計模式稱作為物件導向的程式編寫,在 next(steve jobs 在創立蘋果後所成立的公司)的那段期間,這可是相當創新的。當時還將它視為未來程式發展的領航者,所以他們就將這樣物件導向的程式拿去賣,並且決定將它取 為在 c 語言架構下屬於他們自己版本的名稱,於是 objective-c 就這樣誕生了。
雲端時代,語言也需要新架構
當本質上發生改變的時候,你必須要去適應它,因此有時候你會需要乙個新的語言。伴隨著雲端時代的來臨,更是如此。
乙個程式語言,承載了一群自造者的文化
一部份人創造的程式語言是為了其他人,因此他們承載著所有自造者的文化產物,部份文化產物又和其他的工程師群不同,他們各自走著屬於自身文化產 物下的版本,在電腦科學的歷史上這已經發生過無數次,也形成著最受歡迎語言的運運算元過載(對已有的運算符號重新定義,賦予它另一種功能以適應不同的資料型別)。
有些語言對於邏輯思考的型別是有一定幫助的,乙個你所用的語言會改變你的思考模式。就像是 richard pattis(乙個加州大學爾灣分校資訊學的資深講師)所說,「不只是為了不同的任務而有不同的語言工具,同時它們也形塑著你如何看待寫程式的科技」。
這也是為什麼會有這麼多程式語言存在著,不同的語言代表著一群工程師腦中的思考邏輯模式,當然如果身為語言的使用者而非語言的創造者,太多的選擇中要選擇乙個對工作最有幫助的,最能達成目標的那個。
PHP是世界上最好的語言
if eregi hackerdj get id get id urldecode get id 一次解碼 if get id hackerdj can you authenticate to this website?urlencode編碼主要用於將字串以url編碼,返回乙個字串 urldecod...
第4章 程式語言大觀 《豐富多彩的程式設計世界》
程式語言雖然五花八門,千奇百怪,但是歸根結底,程式語言最終的目標,本質上無非是回答兩個問題 如何表示資訊 如何處理資訊 無論是 面向過程的程式語言 物件導向的程式語言 函式式程式語言 並行程式語言,或者其他任何千奇百怪的程式語言 其根本性的終極目標,就是回答以上兩個問題。各種程式語言之所以差異頗大,...
PHP 開篇,世界上最好的語言底層是怎麼執行的
php在業界被調侃,是世界上最好的語言,php確實是web開發裡的利器,具體點說,就是乙個用c語言實現包含大量元件模組的軟體框架。是乙個強大的ui框架。php動態語言執行過程 拿到一段 後,經過詞法解析 語法解析等階段後,源程式會被翻譯成乙個個指令 opcodes 然後zend虛擬機器順次執行這些指...