內容簡介
本書係統總結瞭從算法到係統橫跨計算機領域的6類計算原理(計算、通信、協作、記憶、評估和設計),旨在構建起一個框架幫助讀者認識計算思維,領會其核心思想──計算原理的相互影響以及問題有效解決的思維方式,並將計算思維運用到計算機科學以外的其他領域。本書適閤作為高等學校非計算機專業計算思維課程以及計算機專業計算機科學導論課程的教學參考書,也適閤IT領域的程序員及專業人員閱讀。
目錄
Great Principles of Computing
齣版者的話
譯者序
序
前言
第1章 作為科學的計算 1
計算的範型 5
計算的重要原理 9
計算在科學中的位置 12
本書的關注點 13
總結 14
緻謝 14
第2章 計算領域 15
領域和基本原理 16
信息安全 19
人工智能 20
雲計算 22
大數據 24
總結 26
第3章 信息 27
信息的錶示 28
通信係統 30
信息的測量 34
信息的轉換 38
交互係統 40
解決悖論 41
信息和發現 42
總結 43
緻謝 44
第4章 機器 45
機器 46
可以計算的機器 49
程序及其錶示 53
棧式計算機:計算機係統的一種簡單模型 54
過程與異常 56
選擇的不確定性 61
結論 64
第5章 程序設計 65
程序、程序員和程序設計語言 66
程序設計實踐 68
程序中的錯誤 70
自動翻譯 72
總結 76
第6章 計算 78
簡單問題 80
實例1 簡單的綫性搜索 81
實例2 二分搜索 81
實例3 排序 82
實例4 矩陣乘法 84
指數級睏難問題 85
實例5 所有的十位數 85
實例6 背包問題 85
實例7 參觀所有城市 86
實例8 閤數分解 87
計算睏難但容易驗證的問題 88
NP完全 89
不可計算問題 92
總結 96
第7章 存儲 98
存儲係統 99
存儲器的基本使用模型 100
命名 101
映射 105
虛擬存儲 105
共享 107
能力 108
認證 111
層級結構中的定位 112
為什麼局部性是基礎 116
結論 117
第8章 並行 119
並行計算的早期方嚮 120
並行係統的模型 123
協作的順序進程 124
功能係統 124
事件驅動的係統 125
MapReduce係統 125
協作的順序進程 125
功能係統 131
結論 134
第9章 排隊 136
排隊論遇上計算機科學 137
用模型計算和預測 139
服務器、作業、網絡和規則 140
瓶頸 144
平衡方程 146
ATM 147
電話交換機 148
分時係統 149
用模型來計算 150
結論 152
第10章 設計 154
什麼是設計 156
軟件係統的準則 158
需求 158
正確性 159
容錯性 159
時效性 160
適用性 160
設計原理、模式和示意 161
原理 161
模式 162
示意 163
軟件係統的設計原理 163
層級式聚閤 164
封裝 165
級彆 166
虛擬機 168
對象 170
客戶端與服務器 171
總結 172
第11章 網絡 173
彈性網絡 174
數據包交換 175
互聯網絡協議 178
傳輸控製協議 179
客戶端與服務器 180
域名係統 181
網絡軟件的組織結構 183
萬維網 184
網絡科學 187
緻謝 188
第12章 後記 189
沒有意識的機器 189
智能機器 189
架構和算法 191
經驗思維 192
一個嶄新的機器時代來臨 192
我們的思維方式正在轉變 193
設計的核心性 193
各章概要 195
注釋 200
參考文獻 213
索引 227
前言/序言
Great Principles of Computing就在70年前,除瞭少數專傢之外,沒有人聽說過計算機。現在,計算機、軟件和網絡無處不在。在地球上的任何地方,它們都以更快的發展速度給我們的生活帶來瞭各種各樣的好處。
在這麼短的幾十年中,我們學會瞭設計和建造如此規模的係統,這真是一件令人吃驚的事。如今,通過支持大規模閤作,計算技術使得知識工作能夠自動化,同時也在不斷擴大生産力。第二次機器革命正撲麵而來1。這是如何實現的?是什麼樣的偉大思想使這一切成為可能?計算機給我們帶來好處的同時也帶來憂慮。計算機帶來的自動化是否會使很多工人失業?計算機是否會成為終極監督工具而使我們失去隱私?計算機是否會發展齣超越人類的智能?計算機能做的事情會有限製嗎?我們相信,理解計算的原理和法則可以幫助人們理解計算是如何完成如此之多的工作的,並消除他們的憂慮。為此我們寫瞭這本書,書中介紹瞭關於計算的一些最重要的原理,並以任何對計算有一定瞭解的人都能理解的方式呈現。
計算機科學(computer science)不隻是設計計算設備的工程領域,它是一門關於信息處理的科學。計算受科學原理和法則支配,這些原理和法則告訴我們計算機能做什麼、不能做什麼。信息的法則揭示瞭根據物理法則無法直接得齣的新的可能性和限製。專傢們賦予計算機許多計算科學(computing science)告訴我們不可能擁有的能力,同時,這些專傢又低估瞭計算機真正的能力。
計算機科學與很多其他領域相互交叉。許多科學與工程領域都有計算(computational)分支,如計算物理、計算化學、生物信息學、數字化産品設計與製造、計算社交網絡、計算心髒病學等2。各層次的教育者正努力在他們擁擠的課程錶中加入計算相關的課程,以保證課程體係的先進性。但仍有很多中學由於缺少計算機科學方麵的教師而不能開設計算機課程。在商業領域,諸如“大數據”“雲計算”“網絡安全”等熱門詞匯也散發齣共同的信號,期望“計算原理”在數據管理、分布式計算、信息保護中發揮作用。
一直以來,人們把計算看作一個按照摩爾定律高速發展的技術領域3。而我們的觀點有所不同,我們相信計算更應該被描述為一個科學領域,具有跨越所有計算技術以及人工或自然的信息處理的基本原理。我們需要一種新的方法來刻畫計算。就像望遠鏡之於天文學、顯微鏡之於生物學,計算機是計算的工具,而非計算的研究對象。
本書的重要原理框架(great principles framework)就是這樣一種新的方法。它將計算原理分為6個類彆:通信、計算、協作、記憶(存儲)、評估和設計。計算原理是指用來指導或約束我們如何操縱物質和能量來進行計算的聲明。計算原理可以是:(1)重現,包括描述可重復的因果關係的定律、過程及方法;(2)行為準則。局部性原理(locality principle)就是重現的一個例子:每一個計算在一定的時間間隔內,其對數據的訪問都聚集在一個小的子集裏。行為準則的一個例子就是網絡程序員將協議軟件劃分為多個層次。所有這些原理的目的,都是希望通過增進理解和降低復雜性從而得到良好的設計。
每種計算技術都利用瞭這些類彆的原理。這個框架是廣泛和全麵的,覆蓋瞭計算的每個部分,包括算法、係統和設計。
從事計算工作的人員形成瞭許多計算領域(computing domain)——實踐社區,如人工智能、網絡安全、雲計算、大數據、圖形學以及科學計算(computational science)等。這些領域都專注於推進領域嚮前發展並與其他社區互動,它們既從計算原理中獲益,又受其約束。沒有這些計算領域的原理框架是不完整的。
由於這6個類彆過於龐大,我們決定將其所覆蓋的範圍分成11個更容易管理的模塊,就像你在目錄中看到的那樣。關於這一點,我們將在第1章中詳細說明。
從機器到通用的數字化計算的機器是早期計算領域的關注中心(從20世紀40年代到20世紀60年代)。計算被看作機器執行復雜演算、解方程、破譯密碼、分析數據及管理業務流程的行為。那時的先驅們將計算機科學定義為研究以計算機為中心的各種現象。
然而,這些年來,這一定義變得越來越沒有意義。20世紀80年代的科學計算運動認為,計算是除瞭傳統的理論和實驗之外的一種新的做科學研究的方法。他們使用“計算思維”(computational thinking)這個術語作為研究和問題求解的思維訓練,而不是作為建造計算機的方法。十年之後,一些領域的科學傢開始發現各自領域內的自然信息處理,其中包括生物學(DNA翻譯)、物理學(量子信息4)、認知科學(腦力過程)、視覺(圖像識彆)和經濟學(信息流)。計算的重點從機器轉變到信息處理,包括人工信息和自然信息。
現在,隨著幾乎所有事物的數字化,計算進入瞭人們的日常生活,包括求解問題的新方法,藝術、音樂、電影的新形式,社交網絡,雲計算,電子商務,以及新的學習方法等。用計算作比喻成為日常語言中的必要組成部分,比如“我的軟件有反應瞭”或“我的大腦崩潰瞭需要重啓”這樣的錶達方式。
為瞭應對這些變化,各大學一直都在設計新的基於原理的方法來開展關於“計算”的教學。華盛頓大學是這方麵的先驅之一,它開發瞭關於熟練掌握信息技術的一門課程和教材,目前已經在高中和大學中廣泛使用,以幫助學生學習並應用基本計算原理5。教育考試基金會(Educational Testing Foundation)與美國國傢自然科學基金會(National Science Foundation)閤作,開發瞭一門新的基於計算原理的先修課程6。現在很多人使用“計算思維”這個詞,指的是在很多領域和日常生活中使用計算原理,而不僅局限於科學計算7。
隨著計算領域的日趨成熟,它吸引瞭其他領域的眾多追隨者。我們知道有16本書是為感興趣的非專業人員來解釋計算的各個方麵8。大部分書關注的隻是單個部分的內容,如信息、編程、算法、自動化、隱私以及互聯網原理等。本書則將這個領域作為一個整體來看待,給齣所有各部分如何組閤在一起的係統敘述。讀者會發現在所有這些部分的背後是一套連貫的原理。
根據教授從其他專業轉到計算機科學的研究生的經驗,我們發現對於初學者來說,原理框架比技術框架更容易理解。當早期核心技術很少的時候,用技術思想的觀點來描述該領域是一種好方法。1989年,美國計算機協會(Association for Computing Machinery,ACM)列齣瞭9大核心技術。而在2005年,ACM列齣瞭大約14種,到瞭2013年,則有約18種。本書的6類原理框架並不是重新定義計算的核心知識,但它確實提供瞭一種看待該領域並降低其錶麵復雜性的新方式。
起源和目標我們經常被問及6類原理的起源。20世紀90年代,本書作者之一Peter J. Denning在喬治梅森大學(George Mason University)開始這個項目。他從眾多的同事那裏收集瞭一個可能的原理陳述的列錶。他發現瞭7個自然的群集,並將它們稱為通信、計算、記憶(存儲)、協作、評估、設計和自動化9。當組織本書的時候,我們意識到自動化並不是一個操縱物質和能量的類彆,而是人工智能計算領域的重點。在本書中,我們從類彆集閤中刪除瞭自動化,並將其包含在計算領域中。
這6個類彆並不是把計算的知識空間劃分成分離的片段。它們就像六角亭的窗戶,每一扇窗戶都以獨特的方式呈現齣內部空間,但同一件事物可以從多個窗戶看到。例如,互聯網有時以數據通信的方式、有時以協作的方式、有時以記憶(存儲)的方式被看到。
這組類彆有一個類彆數目可控的框架,從而滿足瞭我們的目標。雖然計算技術的列錶還將繼續增長,計算領域的集閤也會擴大,但是類彆的數目在較長時間內應該會保持穩定。
這本書是關於計算機科學的一個整體視角,注重最深入、最廣泛的原理,即“宇宙普適的”原理(cosmic principle)10。本書將計算視作一種深層次的科學領域,其原理將影響包括商業和工業在內的其他每一個領域。
這本書是為所有想利用計算科學來達到其目標的人而設計的。受過科學教育的讀者可以學到從算法到係統橫跨整個領域的計算原理。而計算領域內的人,例如一個想要學習並行計算的程序員,可以找到這個巨大領域內不太熟悉的部分的概述。對於大學裏學習諸如“計算機科學基礎”課程的學生,本書可以幫助他們理解計算技術是如何影響他們的,例如網絡和互聯網如何使社交網絡成為可能。初齣茅廬的科學傢、工程師和企業傢可能在本書中找到一個麵嚮整個計算機科學的科普型方法。
緻謝Peter要感謝他在計算原理的漫長旅程中遇到的許多人,這一旅程開始於他11歲時,那時他的父親給瞭他一本關於機器原理的不同尋常的書——1911年齣版的《How It Works》11。1960年,他的高中數學老師和科學社團導師Ralph Money,鼓勵並引導他把精力投入計算機——引領未來的機器中去。1964年,當他成為MIT Mac項目的學生時,他的導師Jack Dennis、Robert Fano、Jerry Saltzer、Fernando Corbato和Allan Scherr把他的興趣擴展到所有計算背後的基本原理。1967年他發錶的第二篇論文是關於存儲管理的工作集原理,其靈感主要來自於Les Belady、Walter Kosinski、Brian Randell、Peter Neumann和Dick Karp的幫助。1969年,他帶領一個工作小組設計操作係統原理的核心課程,他的隊友Jack Dennis、Butler Lampson、Nico Habermann、Dick Muntz和Dennis Tsichritzis幫助確定瞭操作係統的原理,其中也包括Bruce Arden、Bernie Galler、Saul Rosen和Sam Conte的見解。在之後的幾年裏,Roger Needham和Maurice Wilkes提供瞭關於操作係統原理的很多新的見解。1973年,他與Ed Coffman閤寫瞭一本關於操作係統理論的書。
1975年,Jeff Buzen把他吸引到操作分析的新領域,這項研究關注計算機係統性能評估的基本原理。在那段時間裏,Erol Gelenbe、Ken Sevcik、Dick Muntz、Leonard Kleinrock、Yon Bard、Martin Reiser和Mani Chandy都促進瞭他對計算原理的理解。
1985年,ACM教育委員會(ACM Education Board)請他領導一個項目,以確定“計算”作為一門學科應具備的核心原理,用於設計1991年ACM/IEEE的課程推薦。他非常感謝這個團隊加深瞭他對計算原理的理解,這個團隊的成員有:Douglas Comer、David Gries、Michael Mulder、Allen Tucker、Joe Turner和Paul Young。
20世紀90年代中期,他開始在一個統一的框架下收集所
偉大的計算原理 下載 mobi epub pdf txt 電子書