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