- 計算機是如何工作的:人人都能懂的計算機軟硬件工作原理
- (美)馬修·賈斯蒂斯
- 2601字
- 2024-04-25 18:07:31
前言
你是否好奇計算機是如何工作的?獲得對計算機的廣泛理解通常是一個漫長而曲折的過程。問題不在于缺乏相關文檔,在網絡上快速地搜索一下就能找到很多致力于解釋計算機工作原理的書籍和網站。編程、計算機科學、電子學、操作系統……那里有大量的信息。這是件好事,卻會讓人望而生畏。那么,你應該從哪里開始呢?一個主題是如何聯系到另一個主題的?本書的目的是為大家提供一個切入點,方便大家學習計算機的關鍵概念,并了解這些概念是如何結合在一起的。
在我擔任工程經理時,我面試了很多軟件開發方面的求職者。通過與他們的交談,我了解到他們知道如何編寫代碼,但是相當一部分人似乎并不了解計算機實際上是如何工作的。他們知道如何讓計算機執行命令,但并不理解幕后的情況。對這些采訪結果的反思,以及我自己努力學習計算機的經歷,促使我撰寫了這本書。
我的目標是用一種易于理解、可動手操作的方式呈現計算機的基礎知識,讓抽象概念更加真實。本書并沒有深入介紹每個主題,而是主要介紹計算機的基礎概念,并將這些概念聯系起來。我希望大家能在腦海中勾勒出計算機是如何工作的,這樣就能深入挖掘感興趣的主題了。
計算機無處不在,隨著我們的社會越來越依賴于技術,我們需要廣泛理解計算機的人才。我希望本書能幫助大家獲得廣闊的視野。
本書讀者
本書適合想要了解計算機工作原理的任何人。讀者不必具備與所述主題相關的預備知識,因為本書是從零開始介紹的。如果你已經有編程或電子學方面的背景,那么本書可以幫助你擴展其他領域的知識。本書是為以下這些自學者編寫的,他們熟悉基礎數學和科學,且熟練使用計算機和智能手機,但仍然對它們的工作原理存有疑問。本書的內容對教師也有用,我相信書中的內容設計非常適合課堂講解。
本書內容
本書把計算機看作一個技術棧。現代計算設備(如智能手機)就是由技術層組成的。這個棧的底層是硬件,頂層是應用程序,頂層與底層之間是多個技術層。層次模型的優點在于,每一層都受益于較低層的全部功能,但任意給定層都只需要建立在其下面一層上就可以了。在介紹了一些基礎概念后,我們將自下而上地逐層講解該技術棧,從電子電路開始,一直推進到驅動網絡和應用程序運行的技術。以下是各章所包含的內容。
第1章涵蓋計算機的基礎概念,比如模擬和數字、二進制數字系統和SI(國際單位制)前綴。
第2章探索如何用二進制表示數據和邏輯狀態,介紹邏輯運算符。
第3章解釋電學和電路的基本概念,包括電壓、電流和電阻。
第4章介紹晶體管和邏輯門,并總結第2章和第3章的概念。
第5章展示如何用數字電路執行加法運算,進一步揭示數字是如何在計算機中表示的。
第6章介紹存儲器設備和時序電路,演示如何用時鐘信號進行同步。
第7章介紹計算機的主要組成部分:處理器、存儲器和輸入/輸出。
第8章展示處理器執行的低級機器碼,介紹匯編語言——一種人類可讀形式的機器碼。
第9章介紹不依賴于特定處理器的編程語言,包含C語言和Python語言的代碼示例。
第10章介紹操作系統系列以及操作系統的核心功能。
第11章講解互聯網的工作原理及常用網絡協議套件。
第12章解釋網絡的工作原理及核心技術:HTTP、HTML、CSS和JavaScript。
第13章概述一些現代計算機主題,如app、虛擬化和云計算。
閱讀本書時,你將會看到用于解釋概念的電路圖和源代碼。這些都是教學工具,主要是為了直白地講解內容,而不是為了說明工程師在設計硬件和軟件時需要考慮的性能、安全性等因素。換句話說,本書中的電路和代碼雖然能幫助你領會計算機是如何工作的,但它們不見得是最好的例子。同樣,書中的技術示例也偏向于簡單,不夠完整。有時,我會省去某些細節,以免介紹得太復雜。
關于練習和設計任務
本書幾乎每章都配有練習和實踐設計任務。這些練習是讓你動腦或用紙筆來解決的問題。實踐設計任務不僅是腦力練習,還經常涉及電路搭建或計算機編程。
做這些設計任務需要購買一些硬件(附錄B給出了所需組件的列表)。之所以要加這些設計任務,是因為我相信最好的學習方法就是自己去嘗試。如果想從本書獲得最大收益,那么一定要去完成這些實踐設計任務。盡管如此,即使你一個電路都不搭建,一行代碼都不輸入,也可以繼續跟進書中所呈現的內容。
附錄A中給出了練習的答案,相應章末給出了每個設計任務的詳細資料。附錄B包含了啟動這些設計的信息,在需要時,設計文本可以為你指明方向。
各設計任務所用源代碼可以從https://www.howcomputersreallywork.com/code/獲得。你還可以在https://nostarch.com/how-computers-really-work/上訪問本書,了解相關更新內容。
我的計算機之旅
我對計算機的癡迷可能是從小時候玩電子游戲開始的。每當我去拜訪祖父母時,我都會連著幾小時玩我阿姨的Atari 2600游戲機上的Frogger、Pac-Man和Donkey Kong。后來,當我上五年級的時候,我的父母在圣誕節把任天堂娛樂系統當作禮物送給我,我好激動!雖然我喜歡玩《超級馬里歐兄弟》和《雙截龍》游戲,但隨著時間的推移,我開始好奇電子游戲和計算機是如何工作的。可惜的是,我的任天堂游戲機并沒有為我提供許多關于其內部情況的線索。
大約是在同一時期,我家購買了第一臺“真正的”計算機——蘋果IIGS,它為我打開了一扇新的大門,讓我去探索這些機器究竟是如何工作的。幸運的是,我的初中開設了一門關于蘋果II計算機的BASIC編程課程,我很快就發現我對探索編程的需求是無止境的!我會在學校寫好代碼,把它復制到軟盤帶回家,然后在家里繼續編程。在整個初中和高中階段,我學到了更多關于編程的知識,我確認自己非常喜歡它。我還開始意識到,盡管BASIC和其他類似的編程語言能相對容易地告訴計算機做什么,但它們還是隱藏了很多關于計算機工作原理的細節,我希望在這方面能更加深入。
我在大學學習的是電氣工程,我開始了解電子電路和數字電路。我學習了C語言和匯編語言課程,終于了解了計算機是如何執行指令的。計算機工作原理的底層細節也開始變得有意義起來。在大學,我還開始學習被稱為“萬維網”(World Wide Web)的新事物,我甚至還制作了自己的網頁(這在當時似乎很了不起)!我開始編寫Windows應用程序,并開始接觸UNIX和Linux。這些內容有時似乎與數字電路和匯編語言的硬件具體細節相去甚遠,我很想知道它們是如何結合在一起的。
大學畢業后,我很幸運地在Microsoft公司找到一份工作。在那里的17年中,從調試Windows內核到開發Web應用程序,我從事過各種軟件工程工作。這些經歷使我對計算機有了更廣、更深的理解。我和許多非常聰明且知識淵博的人一起共事,我認識到,關于計算機總是有學不完的知識。理解計算機是如何工作的,已經成為我一生的追求,我希望能通過本書把我學到的一些東西傳遞給大家。