出版時間:2011-5 出版社:人民郵電出版社 作者:[美] Jon Bentley 譯者:錢麗艷,劉田 等
Tag標(biāo)簽:無
內(nèi)容概要
多年以來,當(dāng)程序員們推選出最心愛的計(jì)算機(jī)圖書時,《編程珠璣》總是位于前列。正如自然界里珍珠出自細(xì)沙對牡蠣的磨礪,計(jì)算機(jī)科學(xué)大師Jon
Bentley以其獨(dú)有的洞察力和創(chuàng)造力,從磨礪程序員的實(shí)際問題中凝結(jié)出一篇篇不朽的編程“珠璣”,發(fā)表在《ACM通訊》最受歡迎的專欄中,最終結(jié)集為兩部不朽的計(jì)算機(jī)科學(xué)經(jīng)典名著,影響和激勵著一代又一代程序員和計(jì)算機(jī)科學(xué)工作者。本書為續(xù)集,秉承了《編程珠璣》的風(fēng)格,但涉及的主題更廣,包括文檔、小語言、性能監(jiān)視、圖形輸出等。
作者選取許多具有典型意義的復(fù)雜編程和算法問題,生動描繪了計(jì)算機(jī)大師們在探索解決方案過程中發(fā)生的軼事、走過的彎路和不斷精益求精的歷程,引導(dǎo)讀者像真正的程序員和軟件工程師那樣富有創(chuàng)新性地思考,并透徹闡述和總結(jié)了許多獨(dú)特而精妙的設(shè)計(jì)原則、思考和解決問題的方法以及實(shí)用程序設(shè)計(jì)技巧。每章后所附習(xí)題極具挑戰(zhàn)性和啟發(fā)性,書末給出了簡潔的解答。
作者簡介
Jon Bentley 世界著名計(jì)算機(jī)科學(xué)家,被譽(yù)為影響算法發(fā)展的十位大師之一。他先后任職于卡內(nèi)基-梅隆大學(xué)(1976~1982)、貝爾實(shí)驗(yàn)室(1982~2001)和 Avaya實(shí)驗(yàn)室(2001年至今)。在卡內(nèi)基-梅隆大學(xué)擔(dān)任教授期間,他培養(yǎng)了包括Tcl語言設(shè)計(jì)者John Ousterhout、Java語言設(shè)計(jì)者James Gosling、《算法導(dǎo)論》作者之一Charles Leiserson在內(nèi)的許多計(jì)算機(jī)科學(xué)大家。2004年榮獲Dr. Dobb’s程序設(shè)計(jì)卓越獎?! ″X麗艷 北京大學(xué)信息科學(xué)技術(shù)學(xué)院基礎(chǔ)實(shí)驗(yàn)教學(xué)研究所軟件實(shí)驗(yàn)室主任、高級工程師,畢業(yè)于國防科技大學(xué),目前主要從事數(shù)值計(jì)算、程序設(shè)計(jì)等方面的研究工作。
書籍目錄
第一部分 編 程 技 術(shù)
第1 章 性能監(jiān)視工具
1.1 計(jì)算素?cái)?shù)
1.2 使用性能監(jiān)視工具
1.3 專用的性能監(jiān)視工具
1.4 開發(fā)性能監(jiān)視工具
1.5 原理
1.6 習(xí)題
1.7 深入閱讀
第2 章 關(guān)聯(lián)數(shù)組
2.1 Awk 中的關(guān)聯(lián)數(shù)組
2.2 有窮狀態(tài)機(jī)模擬器
2.3 拓?fù)渑判颉 ?br /> 2.4 原理
2.5 習(xí)題
2.6 深入閱讀
第3 章 程序員的懺悔
3.1 二分搜索
3.2 選擇算法
3.3 子程序庫
3.4 原理
3.5 習(xí)題
第4 章 自描述數(shù)據(jù)
4.1 名字—值對
4.2 記錄來歷
4.3 排序?qū)嶒?yàn)
4.4 原理
4.5 習(xí)題
第二部分 實(shí) 用 技 巧
第5 章 劈開戈?duì)柕现Y(jié)
5.1 小測驗(yàn)
5.2 解答
5.3 提示
5.4 原理
5.5 習(xí)題
5.6 深入閱讀
5.7 調(diào)試(邊欄)
第6 章 計(jì)算機(jī)科學(xué)箴言集
6.1 編碼
6.2 用戶界面
6.3 調(diào)試
6.4 性能
6.5 文檔
6.6 軟件管理
6.7 其他
6.8 原理
6.9 習(xí)題
6.10 深入閱讀
第7 章 粗略估算
7.1 頭腦熱身
7.2 性能的經(jīng)驗(yàn)法則
7.3 Little 定律
7.4 原理
7.5 習(xí)題
7.6 深入閱讀
7.7 日常速算(邊欄)
第8 章 人員備忘錄
8.1 備忘錄
8.2 原理
8.3 深入閱讀
第三部分 人性化I/O
第9 章 小語言
9.1 Pic 語言
9.2 視角
9.3 Pic 預(yù)處理器
9.4 用來實(shí)現(xiàn)Pic 的小語言
9.5 原理
9.6 習(xí)題
9.7 深入閱讀
第10 章 文檔設(shè)計(jì)
10.1 表格
10.2 三條設(shè)計(jì)原則
10.3 插圖
10.4 文本
10.5 合適的媒介
10.6 原理
10.7 習(xí)題
10.8 深入閱讀
10.9 次要問題目錄(邊欄)
第11 章 圖形化輸出
11.1 實(shí)例研究
11.2 顯示結(jié)果取樣
11.3 原理
11.4 習(xí)題
11.5 深入閱讀
11.6 拿破侖遠(yuǎn)征莫斯科(邊欄)
第12 章 對調(diào)查的研究
12.1 有關(guān)民意調(diào)查的問題
12.2 語言
12.3 圖片
12.4 原理
12.5 習(xí)題
第四部分 算 法
第13 章 絕妙的取樣
13.1 取樣算法一瞥
13.2 Floyd 算法
13.3 隨機(jī)排列
13.4 原理
13.5 習(xí)題
13.6 深入閱讀
第14 章 編寫數(shù)值計(jì)算程序
14.1 問題
14.2 牛頓迭代
14.3 良好的起點(diǎn)
14.4 代碼
14.5 原理
14.6 習(xí)題
14.7 深入閱讀
14.8 數(shù)值算法的力量(邊欄)
第15 章 選擇
15.1 問題
15.2 程序
15.3 運(yùn)行時間分析
15.4 原理
15.5 習(xí)題
15.6 深入閱讀
附錄A C 和Awk 語言
附錄B 子程序庫
部分習(xí)題答案
索引
章節(jié)摘錄
然后我跑回我的終端前,很興奮地看到這次二分搜索成功地通過了n從1到9的測試。然而當(dāng)n=10的時候,程序再次失敗了,我的心都快碎了。那個時候,bign=10。我實(shí)在想不出為什么程序會在n-10的時候失敗,又按照bign=9和bign=11各運(yùn)行了一次,希望問題的產(chǎn)生是因?yàn)槟鞘亲詈笠淮螠y試。不幸的是,代碼總是一直到9都能正確運(yùn)行,然后運(yùn)行10或者11就會出錯。從9到10,到底出了什么問題? Awk變量既可以是數(shù)值,也可以是字符串。Awk的說明書中說,如果比較的雙方都是數(shù)值,那么就按照數(shù)值比較的規(guī)則來比較,否則就按照字符串的規(guī)則來比較。由于這個程序涉及函數(shù)調(diào)用的特殊情況,解釋器誤認(rèn)為字符串“10”先于字符串“5”。我寫了6行的小程序捕捉到了這個錯誤,Kernighan在次日解決了這個問題?! ?.4原理 本章觸及了程序員日常工作中的一些常見任務(wù)。它們可能不是那么吸引人,但是絕對很重要?! ∧_手架。本章介紹了程序原型、在程序中加入輸出以觀察運(yùn)行過程、度量代碼以及組件測試等方法。其他的腳手架方法還有測試數(shù)據(jù)(虛擬的文件和數(shù)據(jù)結(jié)構(gòu))以及使用“殘樁”代碼模擬未完成的程序從而方便自頂向下的測試?! S谜Z言。合適的編程語言可以使代碼的長度減少一個量級,清晰程度上升一個量級。請大家自己發(fā)掘各語言的優(yōu)勢和特性。Awk是一種構(gòu)造算法原型的極好的語言:其內(nèi)建的關(guān)聯(lián)數(shù)組可以使你模擬許多常用的數(shù)據(jù)結(jié)構(gòu),它的字段、隱式循環(huán)、模式一動作對等設(shè)計(jì)極大地簡化了輸入輸出過程,隱式的變量聲明和初始化也使得程序更加簡潔。AWK Programming Language一書(見2.6節(jié))的第7章中還有關(guān)于用Awk進(jìn)行算法實(shí)驗(yàn)的更多資料。13.2節(jié)和答案14.6給出了兩個小型算法中應(yīng)用的Awk腳手架?! y試與調(diào)試。本章專注于測試和調(diào)試小的程序。先用白盒測試的方法觀察程序是否按照我們預(yù)想的方法運(yùn)行,然后再用黑盒測試來增加自己對于程序正確性的信心。錯誤報告。對于子程序庫的組件測試不經(jīng)意間變成了對于Awk最近新引入特性的一次系統(tǒng)測試。Kernighan把這種現(xiàn)象稱作“新用戶現(xiàn)象”:新系統(tǒng)的每一個新用戶都能夠發(fā)現(xiàn)一系列的新錯誤。相比于之前的用戶,我對函數(shù)的鉆研更深。在這個300行的程序兩次遇到Awk的錯誤時,我都是先用一段小的程序(一個是15行,一個只有6行)重現(xiàn)這一奇異的現(xiàn)象,然后才報告錯誤的。貝爾通信研究院的Stu Feldman這樣描述他多年來維護(hù)一個Fortran編譯器的經(jīng)驗(yàn): 當(dāng)你在錯誤報告附上25000行代碼的時候,無論是程序作者、支持機(jī)構(gòu)還是你的朋 友,都會選擇無視你的報告。我花了幾年時間來教會他這一點(diǎn)(為了保護(hù)當(dāng)事人,把姓名隱去了)。采用的技術(shù)包括凝視代碼、發(fā)揮直覺、用二分法(試著扔掉子程序的后半部分)等等。如果你發(fā)現(xiàn)了一個錯誤,請使用最小的測試用例來報告它?! 〕绦蝌?yàn)證的角色。為了保證自己的程序是正確的,我會使用任何可用的方法。非正式的驗(yàn)證方法可以幫助我編寫代碼,并在實(shí)現(xiàn)前就檢驗(yàn)我的想法,一旦實(shí)現(xiàn)了代碼,測試就變成了最關(guān)鍵的問題。我在程序驗(yàn)證方面有了些經(jīng)驗(yàn)后,再也不會對于一個復(fù)雜的小程序第一次運(yùn)行就正常工作而感到驚訝。如果程序不能工作,我會通過測試和調(diào)試的方法找到?jīng)]有被滿足的斷言,并修改相應(yīng)的代碼?! ?/pre>媒體關(guān)注與評論
《編程珠璣》是對我職業(yè)生涯影響最大的書之一,其中的許多真知灼見多年之后仍然使我受益匪淺。Jon在《編程珠璣(續(xù))》中組織了更多素材,諸多內(nèi)容讓我耳目一新。” ——Steve McConnell,軟件工程大師,IEEE Software前主編,《代碼大全》作者 “對每一位遇到的程序員,我都會毫不遲疑地建議他閱讀并不斷重讀這部經(jīng)典之作。” ——Slashdot編輯推薦
經(jīng)久不衰的計(jì)算機(jī)科學(xué)名著! 集深邃思想、實(shí)戰(zhàn)技術(shù)與趣味軼事于一冊! 領(lǐng)略計(jì)算機(jī)科學(xué)之美!圖書封面
圖書標(biāo)簽Tags
無評論、評分、閱讀與下載
- 還沒讀過(82)
- 勉強(qiáng)可看(593)
- 一般般(101)
- 內(nèi)容豐富(4201)
- 強(qiáng)力推薦(344)