科普向:編程語言發展

電腦有個眾所周知的特點,他只認識二進位。但是大多數人可能不知道,電腦認識什麼樣的二進位。電腦認識的二進位有兩種,命令,和數據,就比如01001 0101 0100,前四位表示減法的命令,後四位表示減數,再後面表示被減數,就如同讓別人幫忙掃地一樣,你得告訴他你要掃地(命令),然後給他一個掃帚(數據)。當然電腦作為一個耿直的男孩,所認識的命令肯定不多,也就區區不過加、減、提取等幾種命令,又比如,0101 0100 0100,0101可能0101的命令表示加,而後面倆個四位,則是倆個加數。就是這樣,電腦每秒幾億的速度進行著這樣簡單的操作。至於怎麼給他下二進位命令,大概的土辦法,就是給他一個導線,高一點的電壓就是1,0電壓就是0咯,就像發電報的摩絲碼那樣的傳輸,這東西就是大家口中常說的,機器語言,傻大塊機器認識的語言。

面對最最開始的傻大個計算機,人們確實也是傻到用針去刺紙條兒來告訴電腦的,刺了洞洞就是1,沒刺,那就是零。紙條兒刷刷的滾進大塊頭裡運行著,這時候電腦還很嬰兒,運行慢吞吞的,幾十個人服侍估計也就足夠了,也沒多少人想著改。

歷史要是真的是這樣咱們手頭就沒有那個什麼智能手機,平板電腦什麼的了。是的,那個大塊頭刷的成長起來,性能突飛猛進,大家開始覺得紙條次不完了!怎麼辦怎麼樣,這時候有些人想了,給電腦加一個翻譯官,咱們寫字,那個翻譯官幫忙轉換成機器語言,這樣就不用戳洞洞了!,於是乎,前面倆個數相加的0101 0100 0100。就變成了,add 4,4,瞬間短了好多還方便閱讀,如果覺得手寫麻煩,翻譯官機器可能還不認識,也不用怕,這時候的打字機早就有了,稍加改造就可以應用了。於是乎,計算機的「僕人」們再也不用戳洞洞了,開始稍微有點白領的樣子,對著打字機敲字母了,而敲出來的字母,稱之為彙編語言。彙編語言很特別,他和機器語言是一一對應的,也就是說每一行都有對應的一句命令+數據這樣的東西,這樣的話翻譯官的工作了就不是很大了。畢竟翻譯官也是個計算機,人家的性能也是剛出生的嬰兒呢(笑)

大概是上世紀六七十年代,這些個傻大快計算機進入了青春期,「身高」猛然增長,性能突飛猛進,這麼好的一個小僕人越來越能幹事情了,人們當然也不會放過他咯,於是,計算機不單單去做那一卷又一卷的乘除加減,開始進入了越來越多的領域,單純的敲打字機也開始滿足不了程序的設計了。但是人也不傻,機器語言過渡到彙編語言的時候,只不過多了個翻譯官就省下了力氣,啊這世界沒有翻譯官解決不了的事情,如果有,那就倆個。於是人們真的搞了第二個翻譯官,把更為容易編寫的代碼,轉化為彙編。這次的代碼可就高級了,人們歡天喜地,把這些語言,稱之為,高級編程語言。這其中最出名的,就是C語言了。。沒錯,從歷史來說,C語言已經是個年五十多歲的老骨頭了。但是人家風韻仍存啊,人家高級啊。扒拉扒拉這麼多,那麼要問了,人家高級在什麼地方呢,在於簡化,人家簡化到基本思想都寫進了高中課本了,而且成為了高考數學的必拿分題。嗯是的,就是程序框圖。高級語言脫離了機器語言的枯燥,抽象出了三大重要的控制結構,順序(程序自上而下運行),分支(遇到判斷則分支)和循環(判斷後自下往上跳轉則循環)。這是所有碼農的噩夢之源,從此所有的編程語言離不開這三大結構,甚至說,沒了這三個特點,他連語言都算不上。講到這裡,術語有點多,可能開始發矇了,但是還是想點一下一個詞,抽象,這是整個計算機發展史,以及編程思想的核心,所有的東西都是圍繞著這個大佬走的。啊這個大佬,也就是抽象,負責幫我們剔除不需要的部分,看清重要的,並提取出來,形成框架,寫成書籍,整成代碼,折磨碼農,一切的萬惡之源(誤)

人們用所謂「抽象」實則大砍特砍,然後雇個翻譯官收拾爛泥的方式解決了效率低下的問題之後,開始一發不可收拾了。人很奇怪,總是想一懶到底,於是乎。人們開始尋找更為厲害的,更為方便編程方式。而且隨著計算機的成長,計算機所需要解決的問題也越來越奇怪了,什麼貪吃蛇,模擬碰撞,我的世界,物理實驗室,這些東西要用基本的三大結構寫出來真是有些難度了,於是有人就覺得,要是代碼能虛構到一個個物品上,提前設定好,要的時候拿出來用,就像現實世界的思考模式一樣就好了,比如我要做一個貪吃蛇,我只要寫一個地圖的類別,然後蛇的類別,地圖給他一個範圍,蛇呢,就給他一個生死的狀態,蛇的長度,別人可以控制蛇和頭撞到東西就會死的技能(什麼奇怪的技能),然後程序突突突開始運行了,先生成一個地圖,然後生成一條蛇,把蛇丟進去,然後讓用戶控制著蛇跑,這個貪吃蛇就搞定了,啊你想多人遊戲,那就再丟一條蛇進地圖就可以了,多方便。於是,人們再一次運用了抽象大佬,讓「萬物皆對象」的面向對象編程語言出現了,最最出名的,就是java了。啊你說東西太另類了,你這個叫面向對象,那C他們呢??C他們這些前輩。於是莫名就被加了一個叫面向過程編程語言的東西了。C語言不甘心啊,他覺得自己也要有這樣的技能,於是人們就開始改造他,給他加了一些語法上的東西,讓他成為了可以以面向對象思想來寫程序的語言,但是翻譯官不樂意了,「你丫的加了這麼多奇怪又複雜的東西,我怎麼翻譯啊!」於是,C語言和翻譯官友誼的小船說翻就翻,C語言一生氣跑去找了另外一個翻譯官,成了上門女婿,改名為C++。

哦對。翻譯官人們習慣把他叫做編譯器。

——24君 寫於2016年9月13日

以此作為踏入碼農之路的新生們一份小禮物


推薦閱讀:

C語言基礎:函數的聲明與定義
中文編程目前面臨的難題是什麼,你有哪些建議?
html5可以做什麼?HTML5市場需求有哪些?
偽·從零開始學Python - 1.1 認識Python
Python的起源是什麼?

TAG:編程語言 | 計算機史 | 計算機歷史 |