什麼是程序語言?

既然要學習編程,那麼我們還是至少應該知道自己學習的是個什麼東西才好吧?

說起編程,其實最早還是要追到我們的大神 艾倫圖靈 小哥那裡去。當時圖靈發明出了圖靈機——這東西很牛逼,不完全體就已經輕輕鬆松把二戰縮短兩年這裡我們就不展開講了,主要我們說,這個圖靈機,基本上就是最早的電腦啦!

當然,教科書上不都說 馮諾伊曼 是電子計算機之父嗎?嗯,我不會告訴你他倆攪基來著……當然,好吧也就是勾搭了幾下。所以,如果你去搜索關鍵詞 “圖靈 馮諾伊曼”那麼你會看到至今還爭論不休的話題“誰是計算機之父”。

圖靈機那時候還是在打點的,進行有限次的運算,簡單的說,也叫有限機,具體的計算方法我們略去不講,但它的根本我們還是要提一下,就是函數。

若干的函數進行不停的運算,存儲等等,這樣的過程最終能幫我們計算出想要的結果——好吧,這些都局限在數學之上,而且,還是二進制。

為什麼要使用二進制?

想要讓機器來做計算,那麼就必須用最簡單的結構來實現,把問題簡單化:流水線上的工人怎樣才能做成電腦呢?他們不需要知道電腦的每一個部件怎麼用,只要把自己手上的螺絲擰緊就可以了。

計算機也是一樣,它不關心你提出了多麼複雜的題目,它只需要關心自己的紙帶上的狀態,即有和無。所以,艾倫很巧妙的發現,如果把問題轉化為二進制,機器就能搞定了!(畢竟那時候也只有紙帶啊!)

這樣,狀態機就有了——圖靈機的祖宗。

一轉眼艾倫給上帝做電腦去了……

馮諾伊曼這個天才富二代聽說了埃尼阿克計劃,覺得“我靠好無腦!不過我喜歡!”然後就入股就去乾了,結果成功了,後來大型計算機就有了,但沒辦法,還是用紙帶打點錄入——儘管它已經用晶體管來儲存狀態。

隨著時間的推移,最終計算機保留了這個古老的結構——二進制。我們的 CPU 依舊運行這這種古老的算法,唯一不同的是晶體管變成了納米級別的半導體。

這時候計算機的運行速度大大加快了,可以運行“我的膝蓋中了一箭”這樣的大型遊戲了,難道開發人員還要傻呵呵的去用棍子戳紙帶麼?當然不了,老早,就有老哥看不慣這個情況,發明出了機器語言。

彙編?嗯,差不多。

我們都知道,彙編是一門機器語言,它就是直白的用簡單的文字代表了機器的代碼——沒錯,不同公司的彙編語言是不同的。

作為一個程序猿,你不懂個七八門彙編怎麼好意思出去見人?歷史的車輪滾滾前進啊,C 語言就問世了。它成功的把程序語言變成了人類可以懂的單詞了!

你只需要稍微按照特定的格式寫好代碼,放到編譯器裡邊刷刷刷,程序就可以運行了!

這時候你知道了,“編譯”,是現代編程語言變成程序的一個必要的過程,你的 iPhone 可不懂什麼 Swift。

但是 C語言還是有它的局限的,這東西依舊太低級,不太夠用啊。如果你了解 C語言,那麼請問:“如何用 C語言編寫《山口山》(《魔獸世界》)?”其實這個問題有點無聊,這是我的老師在給我講什麼是面向對象什麼是面向過程時候問到的。

C語言的函數式編程固然好,但清晰的理順每一個過程這樣的開發就注定了在一個大團隊當中它無法完美的協調。所以微軟有了 C++ ,也就是我們常說的 CPP;蘋果有了 Objective-C;嗯,大家有了 Java。後來因為 C 後邊有加號了,放不下了,多出來的加號摞起來,便又有了 C#。

這裡描寫的不太嚴謹,希望大家不要過於深究,談資而已。我想要說的重點是“目的- 面向“編程 也就是 OOP,就是大家常說的“面向對象”編程誕生了。

面向對象的好處是各個類之間再也不用相互制約了!每一個類每一個方法做他們自己的事情,你只需要在用的時候召喚(調用)它們!

這裡我們還要講到 Java,之前我們談到了編譯器這個東西,Java 的編譯器與 C語言的不同。由於面向對象的語言是高級語言,它擺脫了 C 語言對於過程的束縛,所以人們就想,那是不是順便就讓它編譯一次全平台運行呢?

這一點我們前邊也提到過:不同的平台,彙編語言可能是不盡相同的——不同的架構,它的二進制指令也是不盡相同的。這就注定了,你 VB 只能在 Windows 下跑,C 語言想要跨平台,必須帶著源碼重新編譯——事實上要處理的問題可不是說說這麼簡單。

於是就誕生了 “Java 運行時”——這也是 Java 的理念,叫做“一次編譯,全平台運行”,從此,你再也不用關心內存是什麼了! Java 環境幫你搞定一切,你只需要專心你的程序代碼即可!

我不得不說,這是後來大部分人吐槽 Java 內存管理的原因。

講了這麼多 Java,我們這還是 Swift 課程嗎?當然,我想說的是,自動的內存管理,也成了高級語言的標配(所以高級語言沒有指針)。由於有了這些高級功能,你的代碼也不會再被翻譯成二進制,而是一種叫做“字節碼”的東西,這種東西可以被特定的環境執行——比如說 iOS。

但我要講,Swift 和 OC編譯的字節碼是相同的,這也是不少人吐槽 Swift 並不比 OC 強多少的原因之一。

說了這麼多,我想你基本上應該了解了什麼是編程語言——其實這東西就是把人類的思維邏輯轉換成計算機程序的一個工具,就像人與人對話需要相同的語言一樣,你想要告訴機器做什麼,就需要一門程序語言來讓計算機懂你的意思——計算機太笨,所以你不能說的那麼藝術化“給我一杯水”這樣的命令不太能夠執行,(我們假定有這樣的機器人問世),那麼你應該這樣來講:

 

(代碼僅供娛樂)

本文由 落格博客 原創撰寫:落格博客 » 什麼是程序語言?

轉載請保留出處和原文鏈接:https://www.logcg.com/archives/1006.html

關於作者

R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

發表評論

您的電子郵件地址不會被公開. 必填字段標 *