先有電腦,還是先有編程?

有人問:最初的電腦是如何編程的?這個問法其實有些籠統,這樣問,給人的感覺像是在說:有了電腦才有的編程,編程是在電腦的基礎上誕生的。

但其實程序代碼最初並不是在電腦上運行的。

電腦跟計算機的概念還是有一定區別的:我們可以把電腦稱為計算機,但不能把計算機都叫電腦《至少在以前不能》。

要講編程的最初是怎麼使用的,就必須結合計算機的發展。

因為現在,編程跟計算機確實是密不可分的整體。

一、計算機的早期形式和雛形

1.早期形式

計算機就是用來計算數據的,所以往前追溯,指算、算籌、算盤、星盤、計算尺等計算工具都算是計算機的『祖先』。

先有電腦,還是先有編程?

2.計算尺

1620~1630年期間,計算尺被發明,可以進行乘除法運算,經過後續被多人多次改良後,達到了可以進行求根和冪、三角函數、對數和指數等高級運算的境界,被廣泛采用,19世紀末葉以來成為科學工作者特別是工程技術人員不可或缺的計算工具。

計算尺實際上是現在所使用的計算器的前身,這是它與機械式計算機最直接的區別。

3.機械式計算機

與計算尺同時,17世紀另一項重大發明是機械計算機。

第一個提出近代的機械式計算機的設計思想的是德國數學家席卡德,他在1623年到1624年間設計了機械式計算機,可以進行四則運算,用齒輪傳動,不過它沒有制造出機器來。

《1》加法機

1942年,第一臺能算加、減法的計算機是法國數學家佈萊士·帕斯卡《就是『壓強』的那個帕斯卡》發明。

帕斯卡的加法機是目前公認的世界上第一臺機械式計算機。

《2》步進計算器

1672年,德國數學家萊佈尼茲《就是『微積分』的那個萊佈尼茲》根據帕斯卡的加法器發明能做加、減、乘《加法的不斷疊加》、除《減法的不斷遞減》的計算機。

不斷地加,步步遞進,因此叫『步進』。

自此以後,許多人在這方面做了大量的工作。

特別是經過L.H.托馬斯、W.奧德內爾等人的改良之後,生產出多種手搖臺式計算機,風行於全世界。

4.差分機《一種機械式通用計算機》

1822年,英國數學家巴貝吉制成了一臺能夠執行計算程序的差分機……

好的,到這兒,我們要從編程的起源講起,因為計算機和編程的不解之緣便是這個時候開始交匯的。

二、編程的起源《結合計算機的發展》

『編程』的『程』就是『程序』的意思,所以,廣義來說,編程自人類有自主意識以來就在進行,『先幹什麼』『後幹什麼』這些就是編程的思路。

但要規范談論『編程』的起源,還得從它被人為應用的工具或機器上說起。

1.花本式提花機

編程最早可以追溯到提花機,中國古代人為了在衣服上設計出美麗的圖案,發明了花本式提花機《東漢時期,公元25年—220年》。

說明:紡織工人提前把要編織的圖案設計在花本裡,如果把這個過程比作程序員的編程,那麼織佈用的線就是現在的編程語言,花本就是編寫出來的程序,而紡織工人就是程序員。

在11~12世紀的時候提花機通過絲綢之路傳到了歐洲。

2.二進制

1679年,德國數理哲學大師萊佈尼茨受中國《周易》和八卦中『陰』與『陽』的啟發,發明了二進制。

3.穿孔紙帶提花機

1725年,法國織佈工人巴西爾·佈尚根據花本提花機的原理發明了穿孔紙帶提花機,穿孔紙帶是歷史上最早的的數據存儲介質之一。

但當時的穿孔紙帶提花機因提花機針數不足無法滿足編制要求而未被廣泛采用。

4.賈卡機《可編程織佈機》

1800年前後,法國織佈工人賈卡在巴西爾·佈尚發明的基礎上對早期紡織機進行了改良,實現了更加高效的自動化編織復雜的圖案,大大提高了編織效率和質量。

說明:這種成熟的機器後來被稱為賈卡《提花》機。

賈卡《提花》機的發明影響深遠,不僅推動了紡織業的發展,還為計算機誕生提供了啟示,這種根據需要進行制作穿孔紙帶的工作也被視為現代 『編程』 的起源。

5.差分機《與第一節第4條交匯》

1822年,英國數學家查爾斯·巴貝奇《被稱為『通用計算機之父』》從賈卡提花機獲得靈感,研制出了可以按照設計者意圖自動處理不同函數《即能夠執行計算程序》的機械式計算機——差分機。

6.分析機

1834年,巴貝吉又構思了一臺完全程序控制的機械式計算機——分析機。

分析機算得上是世界上第一臺計算機,但因當時技術條件限制,它沒能制造出來,但巴貝吉的設計思想是不朽的,它與現代電子計算機的理念完全吻合。

7.阿達·洛芙萊斯

在1842年與1843年之間,阿達花了9個月的時間翻譯意大利數學家路易吉·米那比亞對巴貝奇最新的計算機設計書《即分析機概論》評價所留下的備忘錄。

在這部譯文裡,她附加了許多註釋,內容詳細說明用計算機進行伯努利數的運算方式。

在譯文附註G的開篇提到了世界上第一個計算機程序,舉例說明了阿達意識到巴貝奇的設計是多麼的意義深遠。

作為世界上第一個計算機程序的作者,她被公認為是有史以來第一位程序員,還是一位女程序員。

8.穿孔制表機

1888年,美國統計學家赫曼·霍列瑞斯在面對用手搖計算機處理美國人口普查5000餘萬美國人登記造冊的龐大難題時設計發明了用於人口統計的穿孔制表機。

制表機穿孔卡第一次把數據轉變成二進制信息,這種方式成為之後計算機系統裡輸入數據的方法一直沿用到20世紀70年代。

9.圖靈完備和圖靈機

1936年,圖靈《被稱為『計算機科學之父』》以數學領域的佈爾代數為基礎,將邏輯領域中的任意命題《可轉化為數學符號》都用一種通用的機器來表示和演算,並且能按照一定的規則推導出結論,即:將論據《輸入》基於某種規則《指令集》來進行論證《計算》之後就肯定能得到結論《輸出》。

這就是可計算性理論,是一種嚴格的邏輯和數學框架,限定了什麼樣的問題是可以求解的,什麼樣的問題是無法求解的。

也就是所謂的圖靈完備。

圖靈機是實現圖靈完備的演算機器,能制作圖靈機的數學問題,它必然有解。

10.Z系列計算機

1938年,德國工程師康拉德·楚澤完成了第一臺可編程使用二進制的數字計算機Z-1。

第二年,楚澤的朋友給了他一些電話公司廢棄的繼電器,楚澤用它們組裝了第二臺電磁式計算機Z-2, 這臺機器已經可以正常工作。

1941年,第三臺電磁式計算機Z-3完成,正常工作了3年。

1944年,美軍對柏林實施空襲,楚澤的住宅連同Z-3計算機一起被炸得支離破碎。

楚澤於1945年又建造了一臺比Z-3更先進的電磁式Z-4計算機,受第二次世界大戰影響,幾經輾轉,穩定運行到1958年才結束它的壽命。

楚澤創辦了『楚澤計算機公司』,1958年研制出電子管通用計算機Z-22R。

電腦史學家認為,如果楚澤不是生活在法西斯統治下的德國,他可能早就把Z型計算機系列升級為電子計算機,世界計算機的歷史將會改寫。

值得欣慰的是,全世界都已經承認他是『數字計算機之父』。

11.ABC計算機《世界上第一臺專用電子計算機》

1942年,美國工程師約翰·阿塔納索夫《被稱為『電子計算機之父』》和克利福特·貝瑞基於圖靈機的理論基礎設計並研制了世界上第一臺專用電子計算機——阿塔納索夫-貝瑞計算機《Atanasoff-Berry Computer》,簡稱 ABC 計算機。

ABC計算機不可編程,圖靈不完備,不能通用,隻能通過固定程序實現特定功能,所以叫做『專用』。

雖然如此,但是它是『電子計算機』。

12.馮·諾依曼體系結構

1945 年,馮·諾依曼《被稱為『現代計算機之父』》在論文《First Draft of Report o the EDVAC》《第一份草案》中提出了馮·諾依曼體系結構《又稱『存儲程序計算機』》,中心思想為:程序本身是存儲在主機內存中的,可以通過加載不同的程序來解決不同的問題。

說明:馮·諾依曼體系結構奠定了現代計算機的體系結構,它包含 5 大計算機組成部分,我們現在也習慣稱之為主機和外設。

13.世界上第一臺通用計算機

1946 年 2 月 14 日,世界上第一臺通用計算機 ENIAC《Electronic Numerical Integrator And Computer,電子數值積分計算機》於美國賓夕法尼亞大學誕生,發明人是美國人莫克利和艾克特。

說明:ENIAC 是第一代電子管計算機,是圖靈完備的,並且能夠重新編程以解決各種計算問題。

當時使用的還是穿孔卡片進行數據輸入。

所謂的穿孔卡片也就是一條紙帶,上面充滿了0和1的序列,機器語言就是由0和1兩種元素組成,機器語言也就成為了第一代計算機語言。

14.第二代計算機語言——匯編語言

凱瑟琳·佈斯教授是英國早期的計算機先驅之一,她不僅寫出了第一個匯編語言,還完成了機器翻譯的奠基工作。

第一個計算機系統的匯編語言和代碼就是出自她之手,時間是在1950年前後。

15.第三代計算機語言——編程語言

1957年4月,約翰·巴克斯所領導13人小組推出全世界第一套高階電腦語言:FORTRAN語言。

由此開啟了第三代計算機語言的時代。