計算機科學概論(第8版)

計算機科學概論(第8版)

《計算機科學概論(第8版)》是2008年清華大學出版社出版的圖書,作者是俞嘉惠。

基本介紹

  • 書名:計算機科學概論(第8版)
  • 作者:俞嘉惠
  • ISBN:9787302103097
  • 定價:49元
  • 出版社:清華大學出版社
  • 出版時間:2008-9-22
  • 裝幀:平裝
內容簡介,前言,目錄,

內容簡介

本書內容覆蓋了計算機科學各學科的主要領域。以歷史的眼光,從發展的角度、當前的水平,以及現階段研究的方向幾個方面,對各領域的知識作了全景式的闡述。第8版中增加和更新了有關內容,密切關注這些領域的最新進展。
全書深入淺出、圖文並茂,內容安排靈活,便於讀者學習。通過本書,讀者可以對計算機科學這一學科有一個全面的了解。每節都有問題與練習題,每章都有複習題,每章後都附有與本章內容相關的那些需要關心或可能引起爭議的社會問題供讀者思考、討論。還提供了為深入學習有關專題內容應閱讀的參考書目。這些都使本書內容和系統更加完整,更能激發學生的學習興趣,也便於教學。
本書適合作為高等學校計算機概論或計算機科學基礎課程的教科書,對於計算機工作者及希望全面了解計算機科學的一般讀者,也是一本優秀的基礎讀物。

前言

本書是計算機科學的一種初步鳥瞰,在闡明每個主題的內容時,既要有足夠的深度,又要注意到它的廣度。
讀者
這本教程既適合主修計算機科學專業的學生,也適合其他專業的學生。大多數計算機科學專業的學生在剛開始學習時都有這樣的錯覺,似乎計算機科學只是程式設計和網站瀏覽,因為他們平時所見到的幾乎就是這些。然而,計算機科學的內容遠不止這些。把計算機科學作為專業的學生從一開始就需要拓展對這門學科的認識,本書的目的就在於此。本教程概述了計算機科學,既有一定的深度,又有一定的廣度。學生們從這個基礎性的介紹中能夠領悟到計算機科學的真諦以及它與該領域其他課程的相互關係。
對於其他專業的學生來說,為了理解他們賴以生存的技術社會,這些知識也是有用的。為非計算機專業提供的計算機科學課程應該講述整個學科的基本知識,不應停留在只是介紹流行的軟體包和網際網路的套用上。這種鳥瞰式通論的方法是自然科學引導性課程所用的模式,也是我寫本教程所遵循的模式。因而,本教程的前幾個版本已成功地在範圍廣泛的多種專業的課程中使用。這一版將延續這個傳統。
簡言之,本教程的理念是要成為通常稱之為CS0型引導性的計算機科學通論課程。而且,如由IEEE/ACM聯合工作組編寫的“計算課程2001”和“計算課程2003:關於計算機科學基礎課程指導綱要”主張廣度優先的課程,對於考慮這類課程的任何人來說,本教程也是有意義的。的確,自第1版以來,本教程已經成為廣度優先課程變遷的非正式標準。
結構
本教程是按照自底向上的方法,即從具體到抽象的方法組織的。這種組織方法使課程的教學安排十分合理,而且前後主題連貫。本教程從計算機體系結構的基本知識開始(第1、2章);然後講述軟體及其開發過程(第3~7章);接著講述數據組織和數據存儲的問題(第8、9章);最後,在探究計算機技術當前的和未來的套用中(第10、11章)結束。
在編寫本教程時,我有設定情節的想法。因此,當許多學生說他們是像閱讀小說那樣閱讀本教程時,我並不感到驚訝。另一方面,本教程劃分成了許多獨立的章節,它們既可以作為單獨的單元來學習,也可以重新組織順序以另外的方式進行學習。當然,本教程用作教材時通常可以按照各種次序進行重新組合。一種重新組織講授順序的方法是,從第5章和第6章(算法和程式設計語言)開始,然後再按需要回到前面的章節。我知道,有的是從第11章有關可計算性的知識講起的。在另一些講授方法中,本教程用作“高年級頂端班”的教材,作為學生轉入不同領域前的一個主幹課程。
對於那些需要節略性版本的讀者,我建議按照下列順序閱讀:
章節 標題
1.1~1.4 數據編碼和存儲基礎
2.1~2.3 計算機體系結構和機器語言
3.1~3.3 作業系統
4.1~4.3 組網和網際網路
5.1~5.4 算法和算法設計
6.1~6.4 程式設計語言
7.1~7.2 軟體工程
8.1~8.2 數據抽象
9.1~9.2 資料庫系統
10.1~10.3 人工智慧
11.1~11.2 計算理論
除了整體情節外,還有幾個貫穿全書的論題。論題之一是計算機科學是不斷發展變化的。本教程以歷史的觀點來陳述各個專題,討論這些專題的技術狀況,並指出當今研究的一些方向。另一個論題是關於抽象的作用以及抽象工具用於控制複雜性的方法。該論題在第0章中引入,然後在作業系統體系結構、算法開發、程式設計語言設計、軟體工程數據表示和資料庫系統等部分反覆進行討論。
給學生
我進入計算領域始於我在美國海軍服役期間,那是在20世紀60年代末70年代初。(確實,服役使我的年齡變大了,但是年長使人變得明智,從而有可能寫出一本好的教材。)我服役的大部分時間是從事維護位於英國倫敦的海軍計算機設備的系統軟體。服役期滿後,我回到了學校,1975年獲得了數學博士學位。從那時候開始,我一直從事計算機科學和數學的教學工作。
在這期間,計算機科學裡許多東西已經改變了,但也有許多東西依然沒有變。特別是,計算機科學過去是,現在依然是那么迷人,它滋生了許多令人敬畏的東西。網際網路的發展、人工智慧的進步以及信息獲取和傳播的能力以前所未有的速度提高,這些東西將影響人們生活的方式。生活在這令人振奮、富於變化的世界裡,你們將大有作為,行動吧!
我有一些不聽規勸(我的一些朋友會說遠不只是“一些”)。在編寫這本教程的過程中,我並不總是聽從所收到的各種規勸。特別是,好多人認為,本教程的某些內容對於初學的大學生來說過於高深。但是,我相信,如果一個論題對於本教程是切題的,那么它就是合適的,即使這個論題被學院派認為是“高級論題”。人們應該得到一本全面而生動地介紹計算機科學的教科書,而不應該是個縮了水的版本——只包括那些被認為初學的大學生可以接受的主題,而且只做人為簡化的介紹。因此,我不迴避任何論題,而且我嘗試作出更好的講解。我試圖給你們一幅具有足夠深度的關於計算機科學的全面真實寫照。如同給食譜加入調料,你們可以有選擇地在隨後的幾頁跳過某些專題,但是,將它們放在那兒是供你需要時品味的——我也鼓勵你們這樣做。
最後,我應當指出,在任何一門關於技術的課程中,你們今天學習的細節可能並不是你們明天想要知道的細節。這個領域是不斷發展變化的,這也是它充滿激情的地方。本教程將給你們一幅本學科當前情況的寫照以及它的歷史背景。具有這些基礎性知識,你們就能夠伴隨技術的進步而成長。我鼓勵大家通過探索超越本教程所談到的知識,開始成長的過程。學習,再學習。
感謝你們對我的信任,選擇了這本教程。作為一個作者,我有責任寫出一本值得你們花費時間去讀的作品。我希望你們會發現,我是盡到了這個責任的。
給教師
本教程所包含的教材比一個學期能夠講授的要多,所以當你們想略掉那些不符合你的課程那些主題時,或者當你們想選擇合適的主題重新編排順序講授時,請不要猶豫。我寫這本書是把它作為一種課程資源,而不是作為課程的定義。你們會發現,儘管本教程是遵循一條線索撰寫的,但是有關的主題是以獨立的方式講述的,所以你們可以按照你們所希望的那樣選擇其中的內容。
在目錄中,我使用星號(*)來標識那些我建議的作為可選的章節。按我的看法,這些章節所探究的內容程度比較深,或者轉到了你們不想涉及的方向。但這僅僅是建議,你們可以有許多選擇。如果我把你們所喜歡的部分標為可選,那么你們也不必因此而煩惱。你們可以認為這是我的錯誤,你們盡可選擇所需要的內容。
我還建議你們把某些題目的內容作為閱讀材料,鼓勵學生自己學習課堂上沒有講過的內容。我想,如果認為需要在課堂上講清楚每一個問題,那么這就低估學生了。我們應該幫助他們學會如何自主地學習。
我前面已經說過,本教程遵循一種自底向上、從具體到抽象的結構,對此我還想作進一步的說明。作為學者,我們往往認為學生們會欣賞我們對一學科的觀點,這是我們多年來在特定領域裡工作所積累的。作為老師,我認為最好從學生的觀點來提供教材。這就是本教程為什麼從數據的表示和存儲、計算機體系結構和機器語言開始的道理,因為這些正是學生們極其關心的問題——他們能夠看到計算機部件,並且能夠拿一拿它們,而且大多數學生將會購買並使用計算機。從這些主題開始這門課程的講授,我發現學生們自己找到了那些已經困惑他們多年的“為什麼”問題的答案,並且學會將本課程看成是一門實踐課程而不是理論課程。從這兒出發,就會很自然轉到諸如算法的開發、設計、表示和複雜性等比較抽象的主題——那些被該領域的人認為是這一課程主要論題——上來。
我認為,學生們潛移默化學到的東西要比教師課堂上教給他們的多得多,而且他們對於潛移默化學到的知識更容易吸收。在“講授”問題求解時,這一點尤為重要。我認為,學生們要在通過解決問題的活動中學會解決問題,而不是依靠學習問題求解來獲得這種本領。所以,我在本教程中提供了大量的問題。我鼓勵你們使用這些問題,並拓展它們。
我在這裡要指出的另一個問題是職業道德、倫理和社會責任感。我不認為,這些問題可以作為孤立的主題來講解。相反,當涉及到這些問題時就應該面對,這是我在本教程中的處理方法。你們會發現,0.6、3.5、4.5、7.1、7.8、9.7和10.7節提到了在作業系統、組網、資料庫系統、軟體工程和人工智慧等領域裡的安全、隱私、責任和社會意識問題。你們還將發現每一章都包含了一個稱為“社會議題”的問題集合,這些問題向學生提出了一種挑戰,讓他們去思考本教程中的教材與他們生活的社會之間的關係。
感謝你們把本教程作為教科書。不管你們怎樣判斷本教程是否適合你們的情況,我還是希望你們會發現,本書是對計算機科學教學文獻的一個貢獻。
教學特點
本教程是多年教學的結晶。因此,它提供了豐富的教學輔助手段。最主要的是提供了許許多多的問題以加強學生們的參與——在第8版里包括了1000多個問題(確切地說1007個)。它們分為“問題與練習”、“本章複習題”和“社會議題”三類。“問題與練習”在每節末尾,用於回顧剛剛討論過的內容,擴展前面的討論,或者暗示以後將會涉及的有關主題。這些問題的答案在附錄F中。
“本章複習題”在每章的末尾(除第0章外),它們被設計成“課外作業”形式,因為它們涉及整章的內容。這些問題本教程沒有給出答案。
在每章的末尾還設有“社會議題”類問題,它們是供思考和討論用的。許多問題可以用來開展課外研究,可採用簡短的書面報告或口頭報告的形式來描述研究的結果。
在每章的末尾還附有一個“課外閱讀”,它列出了與本章內容有關的其他參考資料。
關於第8版
第8版相對以前各版本而言有幾個重大的修改。以前版本有關作業系統和組網的那一章現在分為兩章——“作業系統”(第3章)與“組網和網際網路”(第4章)。在“組網和網際網路”一章中,擴充了組網的內容以正確反映網路發展的狀況。“檔案結構”那一章被取消了,有關的內容分散到其他有關的各章中。(如果尋找有關順序檔案、索引檔案和散列檔案基本知識的資料,那么它們已經精簡了,作為“資料庫系統”一章中的可選節。)
第8版中其他的改變有:第0章的許多地方重寫了。第1章有些內容作了重新安排,以加強二進制系統的分量。“程式設計語言”那1章(現在第6章)已經精簡了。第7章“軟體工程”關於設計模式的小節重寫了,以包括組件體系結構。關於“數據結構”一章的重點(和標題)已變成“數據抽象”(第8章)。第9章“資料庫系統”中加了“數據挖掘”一節。第10章“人工智慧”開始部分按照代理的觀點重新寫了,而“機器人”小節更新了。第11章“計算理論”討論公開密鑰加密方法時,現在是用 RSA算法,而不再是背包問題。當然,整本教程處處都有許多細小的修改,以提供清晰的、更新的主題及其內容。
我很高興在第8版上工作,希望你們大家也能夠喜歡它。

目錄

第O章 導引
0.1 算法的作用
0.2 計算機器的由來
0.3 算法的科學
0.4 抽象
0.5 學習綱要
0.6 社會影響
社會議題
課外閱讀
第1章 數據存儲
1.1 位和它們的存儲
1.1.1 布爾運算
1.1.2 門和觸發器
1.1.3 其他存儲技術
1.1.4 十六進制記數法
1.2 主存儲器
1.2.1 存儲器結構
1.2.2 存儲器容量的度量
1.3 大容量存儲器
1.3.1 磁碟
1.3.2 光碟
1.3.3 磁帶
1.3.4 檔案存儲和檢索
1.4 用位模式表示信息
1.4.1 文本的表示
1.4.2 數值的表示
1.4.3 圖像的表示
1.4.4 聲音的表示
1.5 二進制系統
1.5.1 二進制記數法
1.5.2 二進制加法
1.5.3 二進制中的小數
1.6 整數的儲存
1.6.1 二進制補碼記數法
1.6.2 二進制余碼記數法
1.7 小數的儲存
1.7.1 浮點記數法
1.7.2 截斷誤差
1.8 數據壓縮
1.8.1 通用數據壓縮技術
1.8.2 圖像的壓縮
1.9 通信差錯
1.9.1 奇偶校驗位
1.9.2 差錯糾正碼
本章複習題
社會議題
課外閱讀
第2章 數據操作
2.1 計算機體系結構
2.2 機器語言
2.2.1 指令系統
2.2.2 示例性的機器語言
2.3 程式的執行
2.3.1 程式執行的一個例子
2.3.2 程式與數據
2.4 算術/邏輯指令
2.4.1 邏輯運算
2.4.2 循環移位和移位運算
2.4.3 算術運算
2.5 與其他設備的通信
2.5.1 通信與控制器
2.5.2 數據通信速率
2.6 其他體系結構
2.6.1 流水線
2.6.2 多處理器計算機
本章複習題
社會議題
課外閱讀
第3章 作業系統
3.1 作業系統的發展
3.2 作業系統的體系結構
3.2.1 軟體綜述
3.2.2 作業系統的組件
3.2.3 系統啟動
3.3 協調機器的活動
3.3.1 進程的概念
3.3.2 進程管理
3.4 處理進程間的競爭
3.4.1 信標
3.4.2 死鎖
3.5 安全性
本章複習題
社會議題
課外閱讀
第4章 組網和網際網路
……
第5章 算法
第6章 程式設計語言
第7章 軟體工程
第8章 數據抽象
第9章 資料庫系統
第10章 人工智慧
第11章 計算理論
附錄A ASCII代碼
附錄B 處理補碼的電路
附錄C 一個簡單的機器語言
附錄D 高級語言程式示例
附錄E 疊代結構與遞歸結構的等價
附錄F 問題與練習答案

相關詞條

熱門詞條

聯絡我們