編程從 0 到 1 的過程是怎樣的?

我在學校的專業不是計算機,後來花了很多精力去學習計算機相關的課程和知識,挺多東西要學。

在整個學習過程中,我個人對計算機的發展歷程很感興趣,總想知道計算機爲什麼是今天這樣子。

我用一氣呵成的方式,把計算機發展歷史快速縷一遍。文章詳實、精彩且有趣,希望大家喜歡哦。

小時候,見過計算器,能很快完成計算,當時心想,計算器真厲害,能提前把所有結果存儲下來。

後來,吵着鬧着要買小霸王學習機,最後如願變成遊戲機,經典遊戲 “超級瑪麗” 和“坦克大戰”至今歷歷在目。

後來,讀初中,有了象徵意義上的電腦課,穿着鞋套去電腦室,完全不會操作。有一次,把電腦弄死機了,嚇得不輕,梅老師瞪了我一眼,直接把電源關了。

然後,他回到他自己的電腦上,瀟灑地聽着任賢齊唱 “讓我悲也好,讓我醉也好......”。那時,我知道了電腦還能唱歌。對電腦的屏幕畫面,也只有個模糊的印象:

那時的電腦顯示器,真的很醜陋,在很長一段時間內,我一直誤以爲,這一大坨東西就是電腦的全部。其實,它只是顯示器而已,遠非核心部件。

廣義上講,上面提到的電子計算器、小霸王學習機和初中見到的那些電腦,都是計算機。你現在拿在手上用於閱讀的手機,也是計算機。總之,計算機無處不在。

要了解計算機,就應該瞭解它的發展過程,去探索歷史上那些精彩的瞬間。本文從宏觀的角度,浮光掠影般瞭解一下計算機歷史。我們將以下圖的框架目錄來展開簡述:

      

一. 手動計算機

這裏講的手動計算機,是從遠古時代到 17 世紀初。很久很久以前,女同志白天忙採集,男同志白天忙打獵,昨日獵回幾隻羊,今朝逮回幾隻兔,都需要計數,這涉及到數的表示。

計數的歷史

遠古時代的人,也有十個手指,所以採用手指來計數,是很順其自然的事情,這也就是十進制的來源。小時候,我們學習十以內數字的加減,就是用手指來計數,來看常見表示:

我們來看下牛津詞典對 digit 的解釋,手指和數字的關係,一目瞭然。digit 既有手指的意思,也有數字的意思。我們也順便學會了 digit, digital, bit(binary digit) 這幾個單詞。

想一下,手指計數有哪些不足?很顯然,當數字變大後,手指個數不夠了。而且,古代的人也需要喫飯, 某天逮回 3 只羊,用手指記錄下來,喫飯時還得保持手指計數的姿勢。

至於睡覺,那也睡不好,睡醒之後,手指鬆了,一切都忘了,這就尷尬了。得想其他辦法,很自然地,不要用手指這樣的 “活物” 來計數,用石頭吧,畢竟石頭不需要喫飯睡覺:

我們來看下 calculus 這個單詞。容易看到,石頭和計算也聯繫在一起,歷史淵源,原來如此。順便地,很輕鬆地學了單詞,下次看到 calculator, calculation, 豈會陌生?

想象一下,要把石頭從北京帶到深圳,該多麻煩。石頭太笨重了,還是不好,得想其他辦法。於是,人們想到用繩子來計數,輕鬆多了,攜帶也更加方便了。

英語單詞 cord 就是繩子的意思,record 就是記錄的意思,用繩子來記錄嘛。從詞源學來看,cord 和 record 還是很有淵源的,很多東西聯繫起來就簡單了。

用結繩計數的人,可能會深刻理解李煜說的 “剪不斷,理還亂”,“別是一般滋味在心頭”。我曾遇到過多次解不開結而苦惱的場景,相信你肯定也有,看着就頭大頭暈。

而且,繩子計數沒法處理篡改的問題。昨天我從你那裏借了 3 只兔,在繩子上打 3 個結,晚上回家偷偷解開其中的 1 個結,這就尷尬了,可見,要防止單方面偷偷篡改。

於是,古人採用了刻痕計數,有了刻痕,雙方立下契約,劈成兩半,每人一份,防止單方篡改。在商朝時,甲骨文很流行。前幾年,還有人在高考作文中用甲骨文呢。

我們提到的手指、石子、繩子和刻痕,主要用來計數,有了計數後,我們得對它進行加減乘除運算,這就涉及計算。接下來,我們簡要聊聊計算方法和工具的發展。

計算的歷史

中國的算籌,歷史悠久。也有很多詞語中包含籌,如觥籌交錯,運籌帷幄等,現代管理學中還有一門 “運籌學” 的課程。所謂籌,就是竹子,跟擺弄火柴棍差不多。

來看算盤,估計很多人見過,我家就有這個東西,“三下五除二” 貌似盡人皆知。樓下培訓機構有個 “珠心算課程”,曾經探頭去看了一眼,不怎麼火熱,來看看算盤:

再來看納皮爾籌,我琢磨了一下,道理很簡單,本質就是 “九九乘法表”。比如,要計算 125*8 的值,預期結果是 1000,具體是怎麼計算的呢?我試了一下,如圖:

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍納皮爾發明了對數,大家在高中肯定學過。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍大家應該記得這個符號:logaN, 那個 N 不僅僅指代正整數,也指代納皮爾名字中的 N,表示對這位計算先驅的紀念。

後來,拉普拉斯說:對數的發明,以其節省勞力,而使天文學家的壽命增加一倍。伽利略說:給我空間、時間和對數,我就能創造宇宙。對數的本質是降維。

什麼意思呢?對數可以把乘法除法轉化爲加法減法。類似的做法是非常普遍的,傅里葉級數,傅里葉變換,拉普拉斯變換,Z 變換,都是如此,降維降級處理。

以常用的傅里葉變換爲例,它把卷積運算降維爲乘法運算,實現了積分向乘法的轉換,使得計算複雜度大大降低,學過《信號與系統》的朋友,應該深有感悟。

再來看看由對數引出的滑尺計算,這個尺子是按照對數來製作的。很容易看出 23=6,直接用尺子得到了結果,其背後的數學邏輯便是對數,log2+log3=log6, 所以 23=6

那年國慶節,看了核潛艇之父黃旭華老先生獲得了共和國勳章獎,在他的一個視頻,有一把計算尺,在那個年代,就是靠類似的計算尺完成核潛艇計算的,挺不容易。

無論是算籌、算盤、納皮爾籌還是滑尺,都需要人蔘與具體過程和計算細節。那麼有沒有這樣的工具:輸入 3 和 4,讓工具自動得到 7 呢?那就來看自動計算的工具吧。

二. 機械計算機

機械計算機時代是從 17 世紀初到 19 世紀末。契克卡德是德國人,他製作了一個計算鍾,能實現簡單自動計算,當時的工藝肯定沒有下圖這麼精美,下圖是後人做的複製品:

法國的帕斯卡,就是搞壓強的那個物理學家。著名編程語言 Pascal 之名,正是取自帕斯卡,以紀念這位計算機先驅。帕斯卡製作了加法器,看着那些齒輪,真想去擰一擰:

德國的數學家萊布尼茨,就更有名了,也是個非常自負的傢伙。大學高等數學中的 “牛頓 - 萊布尼茨” 公式,應該熟悉吧,還有萊布尼茨對於交錯級數是否發散的判定方法。

他敢跟牛頓爵爺叫板,還是有幾把刷子的。另外,據說,萊布尼茨對二進制的發明,也有較大的貢獻,這是現代計算機計算的基礎。萊布尼茨當時做了個機器,能做乘法:

在計算機發展史上,上面都是鋪墊,直到巴貝奇差分機,纔有了一些現代計算機理念的感覺。作爲現代計算機的鼻祖,巴貝奇爲計算機奮鬥一生的精神,一直鼓勵着很多人:

巴貝奇分析機更是思維超前,雖然最終沒有實際製造出來,但閃爍着天才般的智慧和火花,很多理念與現代計算機原理非常相似,來看下巴貝奇分析機模型,感覺挺炫酷的:

巴貝奇帶着遺憾離開人世,但給後人留下了寶貴遺產。1832 年,17 歲的 Ada 參觀了巴貝奇差分機,深深着迷。在巴貝奇去世後,Ada 繼續發揚光大巴貝奇的工作,爲機器編程。

Ada 被認爲是計算機歷史上的第一個程序員,是個女程序員哈。美國國防部曾經花了 10 年時間研發了一種編程語言,在命名時,他們想到了 Ada, 並以此來命名,這就是 Ada 語言。

Ada 的父親,是英國著名詩人拜倫,可曾記得他那經典的話:命運要我去流浪的地方還不少,去時還帶着多少可嘆的記憶;但我唯一的慰藉的事情是:最不幸的遭遇也不足爲奇。

扯遠了,迴歸正題。可以看到,在機械計算機時代,人們用各種方式來製造精巧的機器,讓機器完成簡單的計算,這是很大的飛躍, 因爲它把人從具體的計算過程中解放出來了。

三. 機電計算機

機電計算機是從 19 世紀末到 20 世紀 40 年代。機械和機電的差別,從名字上就可以看出來。自 18 世紀中葉以來,電學蓬勃發展,一些機器開始可以用電來驅動了。

美國憲法中這樣一條規定:每 10 年需要做一次人口普通。1880 的人口普查,花了 7 年的時間纔得到結果。這就尷尬了,3 年後,也就是 1890 年,還得再次普查。

隨着美國人口越來越多,會出現這樣的問題:前一輪還沒普查完,後一輪又要開始。於是,開始想辦法儘量實現自動化,霍爾瑞斯發明了製表機,並脫穎而出。

1890 年的人口普查數據,是 1880 年的兩倍,但總共卻只耗時 2 年左右。當時,霍爾瑞斯製表機沒有選擇二進制,原因:二進轉換困難,二進制機器製作困難。

人口普查後,霍爾瑞斯名聲大振。在 1896 年,他開了個製表機公司。在 1924 年,公司改名爲 IBM,  響噹噹的名字,快 100 年了,IBM 在每個時代,幾乎都不落伍。

在第二次世界大戰中,各國基於軍事需要,大力投入了計算機的研究,但是,德國似乎不怎麼看好計算機,希特勒更相信武器本身的威力,更相信密集式地狂轟亂炸。

祖斯,德國著名的計算機先驅,在 1935-1945 這十年左右的時間,先後建成了 Z1/Z2/Z3/Z4 計算機,這些計算機時運不濟,命途多舛,要麼不被重用,要麼被戰火吞噬。

祖斯的 Z1/Z2/Z3/Z4 都很有創造性,比如,Z1 驗證了機器計算的可行性,Z2 是第一臺電磁式計算機,Z3 可以用二進制控制 Z4 能用穿孔紙袋輸入輸出,甚至是處理條件。

在第二次世界大戰中,德國不怎麼重視計算機, 但美國就不一樣了,各類計算機相關的研究如火如荼地進行。也就是從這時開始,美國在信息領域的領先地位開始建立。

史蒂比茲在自己的廚房,用二進制做實驗,驗證二進制的可行性。很多書上能看到 Model K, 這個 K 就是 kitchen,是廚房的意思,他老婆取名 Model K,挺有意思的哈。

貝爾實驗室的 Model 是一個系列,有很多不同的機型,比如 Model I, 能完成遠程通信,畢竟電話與通信是貝爾實驗室的強項,這也爲後來計算機網絡的發展奠定了基礎。

哈佛大學也不甘落後,與 IBM 合作製作了哈佛 Mark 系列,不過其總設計師艾肯卻宣稱哈佛 Mark I 是他一個人搞起來的,IBM 的小沃森自然很惱火,最終不得不分道揚鑣:

哈佛 Mark II 是當時最大的繼電器是計算機,有 13000 多個繼電器。我們來看看繼電器長啥樣子。我還記得,在讀初三時,物理課上,盧老師深入講解過繼電器:‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

1947 年 9 月 9 日,那是一個秋季的九九豔陽天,一個蛾子飛進了哈佛 Mark II 的一個繼電器,導致繼電器失效,機器無法正常工作,這就是歷史上有名的 bug 事件。

如今的軟件開發中,大家常說的軟件 bug, 就是指軟件缺陷或者漏洞,實際上,其實說的就是 1947 年的那隻該死的蛾子。工作之後,我天天抓 bug,抓得不亦樂乎。

四. 電子計算機

電子計算機從 20 世紀 40 年代至今,一直方興未艾。 繼電器雖然可以用來做計算機零件,但並不完美,它是機械的,反覆移動,容易斷裂,而且速度還很慢。

於是出現了電子管,也稱真空管,繼電器能做的二進制功能邏輯,電子管都能做,而且速度更快,快 1000 倍。來看看電子管長啥樣,我覺得挺好看,顏值不錯:

當時,很多機電計算機由繼電器構成,但到了 1945 年,電子管計算機基本上取代了機電計算機,線路亂七八糟,操作計算機的方式就是插電線, 拔電線。

那時的操作員,相當於今天的程序員,都是 “編程”。不同之處是,那時工作很繁瑣,需要耐心,有很多女孩子加入,於是,男孩子也不愁找不到女朋友了。

不像今天,程序員找個女朋友,費勁得很,可能是因爲女程序員太少了。不久之前,有個男程序員就跟我聊天,吐槽這件事情,我就聽聽,然後樂呵笑了。

電子管計算機固然快,但很昂貴,而且還受到 “愛迪生效應” 的影響:電子管工作的時候,容易發熱,動不動就被燒壞,這對於穩定性來說,是很致命的呢。

比方說,好不容易寫好一篇公衆號文章,辛辛苦苦花了一週時間,結果某個電子管燒壞了,整個計算機失靈,文章丟失,肯定要罵人,丟過文章的人都知道。

鑑於電子管的缺點,人們開始研究新的器材。1947 年,晶體管誕生了,學過模擬電路的朋友,應該很熟悉這個東西,我的專業就與此相關。話不多說,來看下晶體管外形:

1956 年,肖克利因發明了晶體管而獲得了諾貝爾物理學獎,晶體管改變了世界。肖克利本人名利雙收,但想搞更多的錢,於是開始開公司,可是他智商很高,情商太低。

於是,肖克利手下的八個人,先後離開了他。肖克利自然不滿,給這八個人扣了一個大帽子,即 “八叛逆 (The Traitorous Eight)”,這可是很厲害的八個人哦,一起來看看:

1957 年,這八個人接受一家公司資助,成立了後來很有名的仙童半導體公司,上圖的的字母 F, 就是 Fairchild, 意思就是仙童。學電子電路的朋友,應該基本都聽說過這個公司,它被譽爲是硅谷的西點軍校。

喬布斯就曾將其比作成熟的蒲公英,只要風一吹,其創新的精神,就像蒲公英的種子那樣,四處飛揚,生根發芽。然而,天下沒有不散的筵席,他們又陸續離開仙童公司,於是有了 Intel 和 AMD, 是不是很熟悉?  

大家電腦中的 CPU, 基本都是這兩家的搞出來的。這裏順便說一下,摩爾是 Intel 的創始人之一,他提出了著名的摩爾定律,至今仍有效,並支配着硬件的發展。貌似扯遠了,我們來繼續看當時的晶體管計算機:

儘管晶體管使計算機簡化了很大,但計算機仍然是龐然大物,還能繼續進行壓縮嗎?1958 年,就職於德州儀器公司的傑克基爾比,發出疑問:爲什麼不在一塊硅片上,製造多個晶體管呢?這就是集成電路。

1959 年,肖克利八弟子之一的羅伯特諾依斯 (Intel 創始人之一), 也想到了同樣的方法。他們後來爲誰先發明集成電路而爭論不休,現在普遍的觀點是:他們獨立發明了集成電路,可以說都是集成電路之父。

說到羅伯特諾依斯,在喬布斯的 “Stay Hungry, Stay Foolish” 演講中,他說自己被趕出蘋果公司後,曾去找過羅伯特諾依斯和 HP 創始人之一的戴維帕卡德,估計是一起喝酒吐槽。來看下集成電路芯片吧:

然而,這種集成度還遠遠不夠,能不能在更小的芯片上集成更多的晶體管和電子元件呢?當然可以,這就是大規模和超大規模集成電路。一塊芯片,指甲那麼大,居然集成了上億個晶體管和電子器件,而且還要正常穩定工作,每每想到此,就不寒而慄了。

當年佔據整個房間大小的計算機,如今竟然被集成得這麼小, 而且功能遠遠超過當時的計算機。這背後是數學、物理、化學、微電子學、電磁學、光學和量子力學等學科的功勞。難怪華爲任總說:搞芯片,砸錢是不行的,要砸數學家,物理學家和化學家。

我現在做着跟當時專業基本無關的東西,回想起自己學過的電子通信方面的知識,還是能喚起心中的漣漪。曾經在知乎上看到一個問題:爲什麼硬件工程師的工資,整體不如軟件工程師?裏面給了一些很現實的原因,我覺得很有道理。

雖然我現在不做硬件了,但心中始終有些硬件的情懷,拿着單片機開發板,就有種莫名的興奮,看到 FPGA 板子,一定要去摸一下,買到了樹莓派,玩得不亦樂乎。那些執着在硬件行業,執着於國產芯片研發的公司和人員,值得尊敬。

講到這裏,似乎把計算機發展簡史敘述了一遍,但僅僅是從計算機硬件角度進行的,並不是計算機發展歷史的全部,甚至只能算作是冰山一角。

從計算機科學上看,居然沒有講到計算機科學之父 --- 阿蘭圖靈,沒有講到現代計算機之父 --- 馮諾依曼,沒有講到信息論之父 --- 克勞德香農。

從計算機型號上看,居然沒有講到 ABC 計算機,沒有講到 ENIAC 計算機, 沒有講到 EDVAC 計算機,更沒有講到後面各種樣琳琅滿目的計算機。

從計算機公司上看,居然沒有講到喬布斯創建的蘋果,沒有講到比爾蓋茨創建的微軟,沒有講到坦福大學一對夫婦創建的思科,統統沒講到。

從計算機整體上看,居然沒有講到軟件發展,沒有講到操作系統,沒有講到 Windows 和 Linux,沒有講到編譯器和各種編程語言和數據庫等。

對了,連計算機網絡這麼的重要東西,也沒講到。所以這篇文章是不完整的,也不可能在一篇文章中把所有的東西介紹完畢,畢竟浩如煙海。

在後續的公衆號文章中,我會逐漸地講到上面的一些精彩歷史和相關知識點,一起再現計算機發展歷史上的璀璨時刻和節點,咱們不見不散。

你好,我是道哥,CSDN 前 30 名,曾混跡於 BAT 大廠。公衆號講解計算機基礎、網絡、數據結構、算法、C++、Java、Golang 等多方面的編程知識。歡迎點擊如下名片關注道哥,感謝點贊和在看支持哦。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/nzhvzToixCgssDQVoOqM3w