《計算機是怎樣跑起來的》倡導(dǎo)在計算機迅速發(fā)展、技術(shù)不斷革新的今天,回歸到計算機的基礎(chǔ)知識上。通過探究計算機的本質(zhì),提升工程師對計算機的興趣,在面對復(fù)雜的全新技術(shù)時,能夠迅速掌握其要點并靈活運用。
《計算機是怎樣跑起來的》以圖配文,以計算機的三大原則為開端、相繼介紹了計算機的結(jié)構(gòu)、手工匯編、程序流程、算法、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο缶幊、?shù)據(jù)庫、TCP/IP 網(wǎng)絡(luò)、數(shù)據(jù)加密、XML、計算機系統(tǒng)開發(fā)以及SE 的相關(guān)知識。本書適合計算機愛好者和相關(guān)從業(yè)人員閱讀。
《計算機是怎樣跑起來的》圖文并茂,通俗易懂,非常適合計算機愛好者和相關(guān)從業(yè)人員閱讀。
在紙上體驗微型計算機的制作過程,消除對硬件的恐懼
完成一次手工匯編,加深對計算機的理解
理解程序的流程、面向?qū)ο蟮木幊、?shù)據(jù)庫以及XML
抓住7個要點,與算法和數(shù)據(jù)結(jié)構(gòu)成為好朋友
通過7個實驗,理解TCP/IP網(wǎng)絡(luò)協(xié)議
原來,計算機并不難!
以圖配文,深入講解硬件&軟件基礎(chǔ)知識
語言通俗,即使是文科生也能看得懂
特設(shè)“來自企業(yè)培訓(xùn)現(xiàn)場”專欄,生動有趣
我從10年前開始擔(dān)任企業(yè)培訓(xùn)的講師。培訓(xùn)的對象有時是新入職的員工,有時是入職了多年的骨干員工。這期間通過與一些勉強算是計算機專家的年輕工程師接觸,我感到與過去的工程師(計算機發(fā)燒友)相比,他們對技術(shù)的興趣少得可憐。并不是說所有的培訓(xùn)對象都如此,但這樣的工程師確實占多數(shù)。這并不是大吼著命令他們繼續(xù)學(xué)習(xí)或用激將法嘲諷他們的專業(yè)性就能解決的問題。究其根源,是因為計算機對他們來說,并沒有有意思到可以令他們廢寢忘食的地步。為什么他們會覺得計算機沒意思呢?通過和多名培訓(xùn)對象的交流,我漸漸找到了答案。因為他們不了解計算機。然而,又是什么造成了他們的“不了解”呢?
今天,計算機正在以驚人的速度發(fā)展變化著,變得越來越復(fù)雜,而這期間產(chǎn)生了許多技術(shù),但是人們并沒有過多的時間去深入學(xué)習(xí)每一門技術(shù),這就是問題的根源。稍微看了看技術(shù)手冊,只學(xué)到了表層的使用方法,覺得自己“反正已經(jīng)達到目的了”,這就是現(xiàn)狀。如果僅僅把技術(shù)當(dāng)作一個黑盒,只把時間花在學(xué)習(xí)其表面上,而并沒有探索到其本質(zhì),就絕不應(yīng)該認為自己已經(jīng)“懂”了。不懂的話,做起來就會感到?jīng)]意思,也就更不會產(chǎn)生想要深入學(xué)習(xí)的欲望了。若每日使用的都是些不知其所以然的技術(shù),就會漸漸不安起來。令人感到遺憾的是,還有一些人在計算機行業(yè)遇到挫折后,就選擇了離開這個行業(yè)。身為一名教授計算機技術(shù)的講師,我由衷地感到自己應(yīng)該想辦法改變這種現(xiàn)狀。
對于筆者以及昔日的計算機發(fā)燒友而言,雖然大家現(xiàn)在都已經(jīng)40歲左右了,但即使是面對復(fù)雜的最新技術(shù),似乎也還是可以輕松掌握的。其原因在于,從可以輕松買到最初的8比特微型計算機的那個時候開始,我們就幸運地接觸到了計算機。面對為數(shù)不多的技術(shù),我們可以從容地把時間花在學(xué)習(xí)計算機的基礎(chǔ)知識上。而這些基礎(chǔ)知識,即使到了今天也完全沒有變化。因此,即便面對的是復(fù)雜的最新技術(shù),一旦把它們回歸到計算機的基礎(chǔ)知識上,就變得可以輕松理解了。就算是和年輕的工程師們閱讀同樣的技術(shù)手冊,我們領(lǐng)會其中的要點、抓住其本質(zhì)的速度也要快得多。
其實不僅是計算機,其他學(xué)問亦是如此。首先要劃出一個“知識的范圍”,精通一門學(xué)問所必知必會的知識都在這個范圍內(nèi)。其次是掌握該范圍內(nèi)每個知識點中“基礎(chǔ)中的基礎(chǔ)知識”。最后是能獨當(dāng)一面的“目標(biāo)”,即掌握了這些知識可以做什么。下面就以學(xué)習(xí)音樂為例說明這三點。首先,劃出的“知識范圍”是節(jié)奏、旋律、和弦這三個知識點。所謂“基礎(chǔ)中的基礎(chǔ)知識”,對于節(jié)奏來說就是四拍子(大、大、大、大),對于旋律來說就是C大調(diào)(do re mi fa so la si do),對于和弦來說就是大三和弦(do mi so)。以四拍子為基礎(chǔ)就能理解更加復(fù)雜的三拍子或五拍子;以C大調(diào)為基礎(chǔ)就能理解更加復(fù)雜的降B小調(diào);以大三和弦為基礎(chǔ)就能理解更加復(fù)雜的減三和弦。而最終的“目標(biāo)”就是能夠自己作曲并演奏,盡管這時僅能完成很簡單的曲子。
本書的目的是想讓諸位了解有關(guān)計算機技術(shù)的知識范圍,掌握其基礎(chǔ)中的基礎(chǔ)知識,設(shè)定目標(biāo);同時又想讓那些打算用計算機做點什么,卻又因難以下手而猶豫不決的人,以及雖然就職于計算機行業(yè),卻又因追趕不上最新技術(shù)而苦惱的人,能夠了解計算機的本質(zhì)。其實計算機非常簡單,誰都能掌握。只要掌握了,計算機就會越來越有趣。
矢澤久雄
矢澤久雄,YAZAWA股份有限公司董事長兼總經(jīng)理。GrapeCity信息技術(shù)集團顧問。電腦作家之友會會長。
曾在某大型電子公司從事過電腦生產(chǎn),在Software House做過程序員,現(xiàn)主要從事軟件開發(fā)工作。工作之余筆耕不輟,從電路到編程語言均有涉及。代表作有《程序是怎樣跑起來的》《使用C語言學(xué)習(xí)程序設(shè)計的基礎(chǔ)》《征服C++類和繼承》等。自稱軟件藝人。
胡屹,多年從事Web開發(fā)工作。熱愛編程,關(guān)注設(shè)計模式,致力于提升軟件開發(fā)的質(zhì)量。曾獲得SCJP和PHP ZCE證書。
第1章 計算機的三大原則 1
1.1 計算機的三個根本性基礎(chǔ) 3
1.2 輸入、運算、輸出是硬件的基礎(chǔ) 4
1.3 軟件是指令和數(shù)據(jù)的集合 6
1.4 對計算機來說什么都是數(shù)字 8
1.5 只要理解了三大原則,即使遇到難懂的最新技術(shù),也能輕松應(yīng)對 9
1.6 為了貼近人類,計算機在不斷地進化 10
1.7 稍微預(yù)習(xí)一下第2章 13
第2章 試著制造一臺計算機吧 15
2.1 制作微型計算機所必需的元件 17
2.2 電路圖的讀法 21
2.3 連接電源、數(shù)據(jù)和地址總線 23
2.4 連接I/O 26
2.5 連接時鐘信號 27
2.6 連接用于區(qū)分讀寫對象是內(nèi)存還是I/O的引腳 28
2.7 連接剩余的控制引腳 29
2.8 連接外部設(shè)備,通過DMA輸入程序 34
2.9 連接用于輸入輸出的外部設(shè)備 35
2.10 輸入測試程序并進行調(diào)試 36
第3章 體驗一次手工匯編 39
3.1 從程序員的角度看硬件 41
3.2 機器語言和匯編語言 44
3.3 Z80 CPU的寄存器結(jié)構(gòu) 49
3.4 追蹤程序的運行過程 52
3.5 嘗試手工匯編 54
3.6 嘗試估算程序的執(zhí)行時間 57
第4章 程序像河水一樣流動著 59
4.1 程序的流程分為三種 61
4.2 用流程圖表示程序的流程 65
4.3 表示循環(huán)程序塊的“帽子”和“短褲” 68
4.4 結(jié)構(gòu)化程序設(shè)計 72
4.5 畫流程圖來思考算法 75
4.6 特殊的程序流程——中斷處理 77
4.7 特殊的程序流程——事件驅(qū)動 78
COLUMN 來自企業(yè)培訓(xùn)現(xiàn)場 電阻顏色代碼的諧音助記口訣 82
第5章 與算法成為好朋友的七個要點 85
5.1 算法是程序設(shè)計的“熟語” 87
5.2 要點1:算法中解決問題的步驟是明確且有限的 88
5.3 要點2:計算機不靠直覺而是機械地解決問題 89
5.4 要點3:了解并應(yīng)用典型算法 91
5.5 要點4:利用計算機的處理速度 92
5.6 要點5:使用編程技巧提升程序執(zhí)行速度 95
5.7 要點6:找出數(shù)字間的規(guī)律 99
5.8 要點7:先在紙上考慮算法 101
第6章 與數(shù)據(jù)結(jié)構(gòu)成為好朋友的七個要點 103
6.1 要點1:了解內(nèi)存和變量的關(guān)系 105
6.2 要點2:了解作為數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)的數(shù)組 108
6.3 要點3:了解數(shù)組的應(yīng)用——作為典型算法的數(shù)據(jù)結(jié)構(gòu) 109
6.4 要點4:了解并掌握典型數(shù)據(jù)結(jié)構(gòu)的類型和概念 111
6.5 要點5:了解棧和隊列的實現(xiàn)方法 114
6.6 要點6:了解結(jié)構(gòu)體的組成 118
6.7 要點7:了解鏈表和二叉樹的實現(xiàn)方法 120
第7章 成為會使用面向?qū)ο缶幊痰某绦騿T吧 125
7.1 面向?qū)ο缶幊獭?27
7.2 對OOP的多種理解方法 128
7.3 觀點1:面向?qū)ο缶幊掏ㄟ^把組件拼裝到一起構(gòu)建程序 130
7.4 觀點2:面向?qū)ο缶幊棠軌蛱嵘绦虻拈_發(fā)效率和可維護性 132
7.5 觀點3:面向?qū)ο缶幊淌沁m用于大型程序的開發(fā)方法 134
7.6 觀點4:面向?qū)ο缶幊叹褪窃跒楝F(xiàn)實世界建模 134
7.7 觀點5:面向?qū)ο缶幊炭梢越柚鶸ML設(shè)計程序 135
7.8 觀點6:面向?qū)ο缶幊掏ㄟ^在對象間傳遞消息驅(qū)動程序 137
7.9 觀點7:在面向?qū)ο缶幊讨惺褂美^承、封裝和多態(tài) 140
7.10 類和對象的區(qū)別 141
7.11 類有三種使用方法 143
7.12 在Java和.NET中有關(guān)OOP的知識不能少 145
第8章 一用就會的數(shù)據(jù)庫 147
8.1 數(shù)據(jù)庫是數(shù)據(jù)的基地 149
8.2 數(shù)據(jù)文件、DBMS和數(shù)據(jù)庫應(yīng)用程序 151
8.3 設(shè)計數(shù)據(jù)庫 154
8.4 通過拆表和整理數(shù)據(jù)實現(xiàn)規(guī)范化 157
8.5 用主鍵和外鍵在表間建立關(guān)系 159
8.6 索引能夠提升數(shù)據(jù)的檢索速度 162
8.7 設(shè)計用戶界面 164
8.8 向DBMS發(fā)送CRUD操作的SQL語句 165
8.9 使用數(shù)據(jù)對象向DBMS發(fā)送SQL語句 167
8.10 事務(wù)控制也可以交給DBMS處理 170
COLUMN 來自企業(yè)培訓(xùn)現(xiàn)場 培訓(xùn)新人編程時推薦使用什么編程語言? 172
第9章 通過七個簡單的實驗理解TCP/IP網(wǎng)絡(luò) 175
9.1 實驗環(huán)境 177
9.2 實驗1:查看網(wǎng)卡的MAC地址 179
9.3 實驗2:查看計算機的IP地址 182
9.4 實驗3:了解DHCP服務(wù)器的作用 184
9.5 實驗4:路由器是數(shù)據(jù)傳輸過程中的指路人 186
9.6 實驗5:查看路由器的路由過程 188
9.7 實驗6:DNS服務(wù)器可以把主機名解析成IP地址 190
9.8 實驗7:查看IP地址和MAC地址的對應(yīng)關(guān)系 192
9.9 TCP的作用及TCP/IP網(wǎng)絡(luò)的層級模型 193
第10章 試著加密數(shù)據(jù)吧 197
10.1 先來明確一下什么是加密 199
10.2 錯開字符編碼的加密方式 201
10.3 密鑰越長,解密越困難 205
10.4 適用于互聯(lián)網(wǎng)的公開密鑰加密技術(shù) 208
10.5 數(shù)字簽名可以證明數(shù)據(jù)的發(fā)送者是誰 211
第11章 XML究竟是什么 215
11.1 XML是標(biāo)記語言 217
11.2 XML是可擴展的語言 219
11.3 XML是元語言 220
11.4 XML可以為信息賦予意義 224
11.5 XML是通用的數(shù)據(jù)交換格式 227
11.6 可以為XML標(biāo)簽設(shè)定命名空間 230
11.7 可以嚴(yán)格地定義 XML的文檔結(jié)構(gòu) 232
11.8 用于解析XML的組件 233
11.9 XML可用于各種各樣的領(lǐng)域 235
第12章 SE負責(zé)監(jiān)管計算機系統(tǒng)的構(gòu)建 239
12.1 SE是自始至終參與系統(tǒng)開發(fā)過程的工程師 241
12.2 SE未必擔(dān)任過程序員 243
12.3 系統(tǒng)開發(fā)過程的規(guī)范 243
12.4 各個階段的工作內(nèi)容及文檔 245
12.5 所謂設(shè)計,就是拆解 247
12.6 面向?qū)ο蠓ê喕讼到y(tǒng)維護工作 249
12.7 技術(shù)能力和溝通能力 250
12.8 IT不等于引進計算機 252
12.9 計算機系統(tǒng)的成功與失敗 253
12.10 大幅提升設(shè)備利用率的多機備份 255
由于微型計算機上的CPU是Z80 CPU,所以就要使用適用于Z80 CPU的機器語言。顧名思義,機器語言就是處理器可以直接理解(與生俱來就能理解)的編程語言。機器語言有時也叫作原生代碼(Native Code)。
所謂時鐘信號的頻率,就是由時鐘發(fā)生器發(fā)送給CPU的電信號的頻率。表示時鐘信號頻率的單位是MHz(兆赫茲=100萬回/秒)。微型計算機使用的是2.5MHz的時鐘信號。時鐘信號是在0和1兩個數(shù)之間反復(fù)變換的電信號,就像滴答滴答左右擺動的鐘擺一樣。通常把發(fā)出一次滴答的時間稱作一個時鐘周期。
在機器語言當(dāng)中,指令執(zhí)行時所需要的時鐘周期數(shù)取決于指令的類型。程序員不但可以通過累加時鐘周期數(shù)估算程序執(zhí)行的時間,還可以僅在特定的時間執(zhí)行點亮LED(發(fā)光二極管)等操作。
每個地址都標(biāo)示著一個內(nèi)存中的數(shù)據(jù)存儲單元,而這些地址所構(gòu)成的范圍就是內(nèi)存的地址空間。在我們的微型計算機中,地址空間為0~255,每一個地址中可以存儲8比特(1字節(jié))的指令或數(shù)據(jù)。
連接著的I/O的種類,就是指連接著微型計算機和周邊設(shè)備的I/O的種類。在微型計算機中,只安裝了一個I/O,即上面帶有4個8比特寄存器的Z80 PIO。只要用CPU控制I/O的寄存器,就可以設(shè)定I/O的功能,與周邊設(shè)備進行數(shù)據(jù)的輸入輸出。
……