代碼之美

出版時(shí)間:2008年09月  出版社:機(jī)械工業(yè)出版社  作者:Grey Wilson  頁(yè)數(shù):599  譯者:聶雪軍  
Tag標(biāo)簽:無(wú)  

前言

序Greg Wilson我在1982年夏天獲得了第一份程序員工作。在我工作了兩個(gè)星期后,一位系統(tǒng)管理員借給了我兩本書(shū):Kernighan和Plauger編寫的《The Elements of Programming Style》(McGraw-Hill出版社)和Wirth編寫的《Algorithms + Data Structures = Programs》 (Prentice Hall出版社)。這兩本書(shū)讓我大開(kāi)眼界——我第一次發(fā)現(xiàn)程序并不僅僅只是一組計(jì)算機(jī)執(zhí)行的指令。它們可以像做工優(yōu)良的櫥柜一樣精致,像懸索吊橋一樣漂亮,或者像George Orwell的散文一樣優(yōu)美。自從那個(gè)夏天以來(lái),我經(jīng)常聽(tīng)到人們感嘆我們的教育并沒(méi)有教會(huì)學(xué)生看到這一點(diǎn)。建筑師們需要觀摩建筑物,作曲家們需要研習(xí)他人的作品,而程序員——他們只有在需要修改bug時(shí)才會(huì)去閱讀其他人的代碼;即使在這個(gè)時(shí)候,他們也會(huì)盡可能減少閱讀量。我們?cè)嬖V學(xué)生使用有意義的變量名,曾向他們介紹過(guò)一些基本的設(shè)計(jì)模式,但很奇怪,為什么他們編寫的大多數(shù)代碼都是很難看的呢!本書(shū)將試圖改變這種狀況。2006年5月,我邀請(qǐng)了一些著名的(以及不太著名的)軟件設(shè)計(jì)師來(lái)分析和討論他們所知道的漂亮代碼。正如在本書(shū)中將要介紹的,他們?cè)谠S多不同的地方發(fā)現(xiàn)了代碼的漂亮性。有些漂亮性存在于手工精心打造軟件的細(xì)微之處,而有些漂亮性是蘊(yùn)涵在大局之中——那些使程序能夠持續(xù)發(fā)展的架構(gòu),或者用來(lái)構(gòu)造程序的技術(shù)。無(wú)論他們是在什么地方發(fā)現(xiàn)的這些漂亮性,我都非常感謝我們的投稿人抽出時(shí)間為我們奉獻(xiàn)了這樣的一次學(xué)習(xí)旅程。我希望你能夠享受閱讀此書(shū)的樂(lè)趣,就像Andy和我非常享受編輯這本書(shū)的過(guò)程,此外,我還希望這本書(shū)能激發(fā)你創(chuàng)建出一些漂亮的作品。在學(xué)術(shù)界,有一種叫“論文集”的東西,把許多人的論文合到一起出版,讓讀者能夠在一本書(shū)的篇幅之內(nèi),了解某個(gè)特定領(lǐng)域的研究狀況,是有效的知識(shí)傳播手段之一。技術(shù)界比較少見(jiàn)到類似的出版物,的確是一種遺憾?!洞a之美(Beautiful Code)》就是這樣一本書(shū)。三十三位大牛人的技術(shù)文章匯集到一起,講述作者們認(rèn)為“最漂亮的代碼”,涉及應(yīng)用領(lǐng)域雖廣,而代碼之美卻一以貫之。如果我們 承認(rèn)編程是門藝術(shù)——具有高度創(chuàng)造性和人類智慧參與的活動(dòng),不是藝術(shù)是什么?——那么,這幾十篇文章就體現(xiàn)了這門藝術(shù)中最高的境界。別擔(dān)心!大牛們可不是坐而論道,也沒(méi)有寫什么常人不可索解的奧義,文章主題之樸實(shí)無(wú)華,比如“查找”,比如“分布式編程”,比如“Linux內(nèi)核驅(qū)動(dòng)模 型”……幾乎要讓人以為是不知道什么人編寫的大學(xué)教材呢。這貌似普通的三個(gè)主題,作者分別是XML創(chuàng)始人之一Tim Bray、Google Map/Reduce架構(gòu)發(fā)明人Jeff Dean和Linux內(nèi)核維護(hù)者Greg Kroah-Hartman——嚇?biāo)廊说年嚾?。其余文章也都類似,小題目中見(jiàn)大手筆。我深信這幫大牛接受約稿、寫這種 “小”文章,實(shí)在是出于對(duì)編程的熱愛(ài),出于對(duì)“漂亮代碼”的不懈追求。所謂“漂亮代碼”,意思遠(yuǎn)超“規(guī)范、好看”,更多地體現(xiàn)出邏輯、思路與架構(gòu)。一萬(wàn)塊 最漂亮磚頭堆出來(lái)的,不一定是大廈。建筑師在建造大廈之前,胸中早有藍(lán)圖在?!洞a之美》,正展示了三十三位最優(yōu)秀建筑師胸中的藍(lán)圖。這本書(shū)能出中文版,是中國(guó)程序員的福音,其中的每篇文章,都值得讀者細(xì)細(xì)咀嚼、回味。我已經(jīng)迫不及待,想要看到正式印刷的版本了。韓磊(CSDN副總經(jīng)理)向大師學(xué)習(xí)美潘加宇UMLChina首席執(zhí)行官我1989年參加高考時(shí),總分120分的語(yǔ)文才考了71分,這最弱一環(huán)差點(diǎn)造成致命打擊。最害怕的是寫作文,記得當(dāng)年的題目是寫一封信,在右江盆地高溫的教室里,我寫得汗都滴在試卷上。沒(méi)想到,后來(lái)看的東西多了,“不會(huì)作詩(shī)也會(huì)吟”,居然也能接雜志和出版社的約稿,寫一些文章和序言之類。翻開(kāi)本書(shū)第29章,Ruby之父Yukihiro Matsumoto(松本行弘)說(shuō):Treating Code As an Essay。寫代碼如同寫文章一般,多看多研究大師的作品,才能夠信手拈來(lái),寫出美麗的代碼。本書(shū)就是33位大師的傾情之作。本書(shū)并不限定于討論某一種語(yǔ)言的技巧,你能看到大師們使用現(xiàn)在流行的Java、Ruby,也能看到歷史悠久的Fortran。討論的領(lǐng)域從Linux內(nèi)核,到NASA火星探測(cè)器、ERP系統(tǒng),讓我們從不同角度來(lái)體會(huì)代碼之美。美除了讓人欣賞,還能帶來(lái)金錢。因北京奧運(yùn)的成功,博爾特的速度之美估計(jì)價(jià)值上千萬(wàn)美元。美麗的軟件也一樣。一些軟件公司,公司人少且穩(wěn)定,多年來(lái)專注于做某一個(gè)小領(lǐng)域里的軟件,對(duì)軟件的打磨可謂是精雕細(xì)琢,美麗軟件帶來(lái)的利潤(rùn)自然也很可觀。比起那些靠低人力成本、低價(jià)格在市場(chǎng)上打拼的“程序員民工”公司,他們要活得滋潤(rùn)得多,安全得多。享受代碼之美“希望寫出漂亮代碼的開(kāi)發(fā)者可以向藝術(shù)家們學(xué)習(xí)一些東西。畫(huà)家常常放下手中的畫(huà)筆,然后遠(yuǎn)離畫(huà)布一段距離,圍著它轉(zhuǎn)一轉(zhuǎn),翹起腦袋,斜著看看,再?gòu)牟煌慕嵌瓤纯?,在不同的光線下看看。在尋求美的過(guò)程中,他們需要設(shè)計(jì)這樣一些視角并使它們?nèi)跒橐惑w。如果你的畫(huà)布是個(gè)集成開(kāi)發(fā)環(huán)境(IDE)而你的媒介就是代碼,想一想,你如何做到離開(kāi)畫(huà)布一段距離,用挑剔的眼光從不同的視角來(lái)審視你的作品?──這將使你成為一個(gè)更優(yōu)秀的程序員,并幫你寫出美麗的代碼?!睂戇@段話的Alberto Savoia在他的文章里真的沒(méi)有講什么令人敬畏的高技術(shù)或是大架構(gòu),他講的是每個(gè)計(jì)算機(jī)系的大二學(xué)生都熟悉的二分查找。所以Savoia真的是在講如何寫出漂亮的代碼,所以才選擇了這么一個(gè)所有人都清楚得不能再清楚的例子。你會(huì)覺(jué)得這種事情都是些不諳世事的小程序員才會(huì)熱衷于干的吧?可這位Savoia卻是從Google離職以后開(kāi)創(chuàng)了Agitar Software公司(http://www.agitar.com/)的不折不扣的創(chuàng)業(yè)者。有意思嗎?一個(gè)胡須花白、在這個(gè)行業(yè)里廝混了數(shù)十年、擁有自己公司的老家伙,還在樂(lè)此不疲地談?wù)摗捌恋拇a”。這本《代碼之美》就是由三十多篇像這樣有意思的文章組成的。像Brian Kernighan、Tim Bray、Charles Petzold、Douglas Schmidt、Yukihiro Matsumoto這樣的名字,你甚至很難想象他們同時(shí)出現(xiàn)在同一本書(shū)上。或許也只有“漂亮的代碼”這樣的話題才能激起他們共同的興趣。于是就有了這本了不起的書(shū):從正則表達(dá)式匹配器到圖像處理,從通信到基因排序,這些可能是世界上最優(yōu)秀的程序員毫不吝嗇地向讀者展示:不論面對(duì)什么問(wèn)題、使用什么語(yǔ)言,代碼的美感都是始終存在的,而且這種美感應(yīng)該是程序員畢其一生不懈追尋的。作為《重構(gòu)》的譯者,不時(shí)有人會(huì)問(wèn)我一些關(guān)于重構(gòu)的問(wèn)題,其中一個(gè)問(wèn)題讓我最感為難:為什么要這樣做?真的,如果不是要修改代碼,也不是要添加功能,為什么要把這段代碼抽取出來(lái)呢?讓每個(gè)方法都保持5行以內(nèi)的長(zhǎng)度到底有什么好處呢?這種時(shí)候與其說(shuō)是有什么利弊權(quán)衡,毋寧說(shuō)就是為了讓代碼“更漂亮”。當(dāng)然了,在大部分時(shí)間里,軟件開(kāi)發(fā)是一項(xiàng)集合了科學(xué)、工程和服務(wù)的工作,但──至少在我們的內(nèi)心深處──它多少還有那么一點(diǎn)藝術(shù)的成分。除了完成任務(wù)以外讓自己手上的代碼更具美感,也算是對(duì)自己作為程序員的夢(mèng)想的小小堅(jiān)持吧。所以,既然你已經(jīng)拿起了這本書(shū),就暫時(shí)放開(kāi)那些功利的目標(biāo)吧──別誤會(huì),這可不是一本沒(méi)用的書(shū),通過(guò)閱讀這些“高手”們的編程心得,對(duì)自己的能力提升就算不能立竿見(jiàn)影至少也有潛移默化之功。但那也只是裝珍珠的盒子而已。在一個(gè)安靜的周末,給自己泡上一杯清茶,跟著三十三位頂尖高手暢游在代碼世界,在他們的指引下遍賞代碼之美,這才是作為一個(gè)程序員最大的享受呢。熊節(jié)ThoughtWorks咨詢師等度的流明——代碼之美?序一我上一次印象深刻的美的體驗(yàn),大概已經(jīng)是在十年之前了,那只是在午后睡醒,面對(duì)窗外的一棵大梧桐樹(shù)時(shí)的感覺(jué)。不過(guò)這并不是說(shuō)我這十年來(lái)都只看到了丑的事物,而是說(shuō)我已經(jīng)忘了去觀察既已存在的美。直到我拿到這本《代碼之美》,我忽然地回到了那種仰望著星星爍耀的夜空,或低頭沉思于一兩句大家文字的日子里。那時(shí)刻我既不是在思考,也不是在分析,更不是在解釋,而只是在感受自然的、文字的,或?qū)⒆匀惶N(yùn)于文字之中的,美。二有一本書(shū)開(kāi)啟了一個(gè)時(shí)代,而我們?nèi)缃袢匀辉谶@個(gè)時(shí)代之中而不知覺(jué)于這本書(shū)的深遠(yuǎn)影響,那是三位圖靈獎(jiǎng)得主合著的《結(jié)構(gòu)程序設(shè)計(jì)》(1)。其中Dijkstra將人“理解一個(gè)程序的種種思維方法”歸為三種:枚舉、數(shù)學(xué)歸納和抽象。顯然Wirth先生更為深層地看到了程序的本質(zhì),他說(shuō)“程序=算法+數(shù)據(jù)結(jié)構(gòu)”(2)。他揭示了這樣一個(gè)事實(shí):一個(gè)未知的、無(wú)序的世界是不可能實(shí)現(xiàn)“程序”的,于是我們抽象它——使它成為結(jié)構(gòu),或者對(duì)象,或者網(wǎng),或者某個(gè)相對(duì)規(guī)則的事物。然后,我們?cè)僦浴八惴ā薄!洞a之美》這本書(shū),三十八位大師,在三十三章的內(nèi)容中詳細(xì)討論了代碼中抽象的過(guò)程、算法的過(guò)程和編程的過(guò)程。顯然的,這些正是程序中最深刻的美。如同花之蕊,葉之脈,以及維系花蕊葉脈的美的,那些汁液。這種對(duì)美的觸及,使他在我面前閃耀著與前兩本書(shū)等度的流明。三“只有在不僅沒(méi)有任何功能可以添加,而且也沒(méi)有任何功能可以刪除的情況下,設(shè)計(jì)師才能夠認(rèn)為自己的工作已臻完美?!?3)然而編程的過(guò)程呢?我們最初只是想實(shí)現(xiàn)一個(gè)功能。但為了實(shí)現(xiàn)它,我們寫了一段功能代碼、一段測(cè)試代碼、一段功能代碼的配置代碼,一段功能代碼的配置代碼的測(cè)試代碼……如此往復(fù)不休。我們回到原始的問(wèn)題,原本只是要做一個(gè)“實(shí)現(xiàn)某項(xiàng)功能”的代碼,我們卻為何把代碼做到了“往復(fù)不休”的絕地?或者你做的事情并不完美,但是你應(yīng)該知道所謂完美的終極。代碼要不停的測(cè)試,以及為測(cè)試代碼再寫測(cè)試代碼,這一過(guò)程也不是美的?;蛟S你認(rèn)為它“必須”,但你應(yīng)知道它終究不美。四大師們也并沒(méi)有創(chuàng)生完美的能力,他們只是在一步步地進(jìn)行著。在這本書(shū)里,Adam Kolawa告訴你的,Lincoln Stein告訴你的,以及Elliontte Rusty Harold等等告訴你的,就是那經(jīng)年累月地或亦步亦趨地進(jìn)行過(guò)程,和那個(gè)“終極完美”的定義。這只是過(guò)程和隱于過(guò)程中對(duì)美的追求。而“美”是什么,還是在你的心底。你心中原本就沒(méi)有美的感受,如何寫得出美的代碼?所以代碼寫到爛處,寫到心胸滯澀處,便不如尋一清靜所在,捧《代碼之美》一冊(cè),回顧一下,品味一下,吐故納新一下了??吹枚噙h(yuǎn),取決于你站得多高;要想成為他們,你得先知道他們。這就是我的建議了。

內(nèi)容概要

  《代碼之美》介紹了人類在一個(gè)奮斗領(lǐng)域中的創(chuàng)造性和靈活性:計(jì)算機(jī)系統(tǒng)的開(kāi)發(fā)領(lǐng)域。在每章中的漂亮代碼都是來(lái)自獨(dú)特解決方案的發(fā)現(xiàn),而這種發(fā)現(xiàn)是來(lái)源于作者超越既定邊界的遠(yuǎn)見(jiàn)卓識(shí),并且識(shí)別出被多數(shù)人忽視的需求以及找出令人嘆為觀止的問(wèn)題解決方案?!洞a之美》33章,有38位作者,每位作者貢獻(xiàn)一章。每位作者都將自己心目中對(duì)于“美麗的代碼”的認(rèn)識(shí)濃縮在一章當(dāng)中,張力十足。38位大牛,每個(gè)人對(duì)代碼之美都有自己獨(dú)特的認(rèn)識(shí),現(xiàn)在一覽無(wú)余的放在一起,對(duì)于熱愛(ài)程序的每個(gè)人都不啻一場(chǎng)盛宴。 雖然《代碼之美》的涉獵范圍很廣,但也只能代表一小部分在這個(gè)軟件開(kāi)發(fā)這個(gè)最令人興奮領(lǐng)域所發(fā)生的事情。

作者簡(jiǎn)介

  全球38位頂尖高手、眾多語(yǔ)言之父經(jīng)典之作

書(shū)籍目錄

譯者序序前言第1章 正則表達(dá)式匹配器 1.1 編程實(shí)踐1.2 實(shí)現(xiàn) 1.3 討論1.4 其他的方法 1.5 構(gòu)建 1.6 小結(jié) 第2章 Subversion中的增量編輯器:像本體一樣的接口2.1 版本控制與目錄樹(shù)的轉(zhuǎn)換2.2 表達(dá)目錄樹(shù)的差異2.3 增量編輯器接口2.4 但這是不是藝術(shù)?2.5 像體育比賽一樣的抽象2.6 結(jié)論第3章 我編寫過(guò)的最漂亮代碼3.1 我編寫過(guò)的最漂亮代碼3.2事倍功半3.3 觀點(diǎn)3.4 本章的中心思想是什么?3.5 結(jié)論3.6致謝第4章 查找4.1. 耗時(shí)4.2. 問(wèn)題:博客數(shù)據(jù)4.3. 問(wèn)題:時(shí)間,人物,以及對(duì)象?4.4. 大規(guī)模尺度的搜索4.5. 結(jié)論第5章 正確、優(yōu)美、迅速(按重要性排序):從設(shè)計(jì)XML驗(yàn)證器中學(xué)到的經(jīng)驗(yàn)5.1 XML驗(yàn)證器的作用5.2 問(wèn)題所在5.3 版本1:簡(jiǎn)單的實(shí)現(xiàn)5.4 版本2:模擬BNF語(yǔ)法——復(fù)雜度O(N)5.5 版本3:第一個(gè)復(fù)雜度O(log N)的優(yōu)化5.6 版本4:第二次優(yōu)化:避免重復(fù)驗(yàn)證5.7 版本5:第三次優(yōu)化:復(fù)雜度 O(1)5.8 版本 6:第四次優(yōu)化:緩存(Caching)5.9 從故事中學(xué)到的第6章 集成測(cè)試框架:脆弱之美6.1. 三個(gè)類搞定一個(gè)驗(yàn)收測(cè)試框架6.2. 框架設(shè)計(jì)的挑戰(zhàn)6.3. 開(kāi)放式框架6.4. 一個(gè)HTML解析器可以簡(jiǎn)單到什么程度?6.5. 結(jié)論第7章 美麗測(cè)試7.1 討厭的二分查找7.2 JUnit簡(jiǎn)介7.3將二分查找進(jìn)行到底7.4 結(jié)論第8章 圖像處理中的即時(shí)代碼生成第9章 自頂向下的運(yùn)算符優(yōu)先級(jí)9.1. JavaScript9.2. 符號(hào)表9.3. 語(yǔ)素9.4. 優(yōu)先級(jí)9.5. 表達(dá)式9.6. 中置運(yùn)算符9.7. 前置操作符9.8. 賦值運(yùn)算符9.9. 常數(shù)9.10. Scope9.11. 語(yǔ)句9.12. 函數(shù)9.13. 數(shù)組和對(duì)象字面量9.14. 要做和要思考的事第 10章 追求加速的種群計(jì)數(shù)10.1. 基本方法10.2. 分治法10.3. 其他方法10.4. 兩個(gè)字種群計(jì)數(shù)的和與差10.5. 兩個(gè)字的種群計(jì)數(shù)比較10.6. 數(shù)組中的1位種群計(jì)數(shù)10.7. 應(yīng)用第11章 安全通信:自由的技術(shù)11.1 項(xiàng)目啟動(dòng)之前11.2剖析安全通信的復(fù)雜性11.3 可用性是關(guān)鍵要素11.4 基礎(chǔ)11.5 測(cè)試集11.6 功能原型11.7 清理,插入,繼續(xù)……11.8 在喜馬拉雅山的開(kāi)發(fā)工作11.9 看不到的改動(dòng)11.10 速度確實(shí)重要11.11 人權(quán)中的通信隱私11.12 程序員與文明第12章  在BioPerl里培育漂亮代碼12.1. BioPerl和Bio::Graphics模塊12.2. Bio::Graphics的設(shè)計(jì)流程12.3. 擴(kuò)展Bio::Graphics12.4. 結(jié)束語(yǔ)和教訓(xùn)第13章 基因排序器的設(shè)計(jì)13.1 基因排序器的用戶界面13.2 通過(guò)Web跟用戶保持對(duì)話13.3. 多態(tài)的威力13.4 濾除無(wú)關(guān)的基因13.5 大規(guī)模美麗代碼理論13.6 結(jié)論第14章 優(yōu)雅代碼隨硬件發(fā)展的演化14.1. 計(jì)算機(jī)體系結(jié)構(gòu)對(duì)矩陣算法的影響14.2 一種基于分解的方法14.3 一個(gè)簡(jiǎn)單版本14.4 LINPACK庫(kù)中的DGEFA子程序14.5 LAPACK DGETRF14.6遞歸LU14.7 ScaLAPACK PDGETRF14.8 針對(duì)多核系統(tǒng)的多線程設(shè)計(jì)14.9 誤差分析與操作計(jì)數(shù)淺析14.10 未來(lái)的研究方向14.11 進(jìn)一步閱讀第15章 漂亮的設(shè)計(jì)會(huì)給你帶來(lái)長(zhǎng)遠(yuǎn)的好處15.1. 對(duì)于漂亮代碼的個(gè)人看法15.2. 對(duì)于CERN庫(kù)的介紹15.3. 外在美(Outer Beauty)15.4. 內(nèi)在美(Inner Beauty )15.5. 結(jié)論第16章,Linux內(nèi)核驅(qū)動(dòng)模型:協(xié)作的好處16.1 簡(jiǎn)單的開(kāi)始16.2 進(jìn)一步簡(jiǎn)化16.3 擴(kuò)展到上千臺(tái)設(shè)備16.4 小對(duì)象的松散結(jié)合第17章  額外的間接層17.1. 從直接代碼操作到通過(guò)函數(shù)指針操作17.2. 從函數(shù)參數(shù)到參數(shù)指針17.3. 從文件系統(tǒng)到文件系統(tǒng)層17.4. 從代碼到DSL(Domain-Specific Language)17.5. 復(fù)用與分離17.6.分層是永恒之道?第18章  Python的字典類:如何打造全能戰(zhàn)士18.1. 字典類的內(nèi)部實(shí)現(xiàn)18.2. 特殊調(diào)校18.3. 沖突處理18.4. 調(diào)整大小18.5. 迭代和動(dòng)態(tài)變化18.6. 結(jié)論18.7. 致謝第19章 NumPy中的多維迭代器19.1 N維數(shù)組操作中的關(guān)鍵挑戰(zhàn)19.2 N維數(shù)組的內(nèi)存模型19.3NumPy迭代器的起源19.4 迭代器的設(shè)計(jì)19.5 迭代器的接口19.6 迭代器的使用19.7 結(jié)束語(yǔ)第20章 NASA火星漫步者任務(wù)中的高可靠企業(yè)系統(tǒng)20.1 任務(wù)與CIP20.2 任務(wù)需求20.3 系統(tǒng)架構(gòu)20.4 案例分析:流服務(wù)20.5 可靠性20.6 穩(wěn)定性20.7 結(jié)束語(yǔ)第21章  ERP5:最大可適性的設(shè)計(jì)21.1  ERP的總體目標(biāo)21.2 ERP521.3 Zope基礎(chǔ)平臺(tái)21.4 ERP5 Project中的概念21.5 編碼實(shí)現(xiàn)ERP5 Project21.6 結(jié)束語(yǔ)第22章 一匙污水第23章 MapReduce分布式編程23.1 激動(dòng)人心的示例23.2 MapReduce編程模型23.3 其他MapReduce示例23.4 分布式MapReduce的一種實(shí)現(xiàn)23.5 模型擴(kuò)展23.6 結(jié)論23.7 進(jìn)階閱讀23.8 致謝23.9 附錄:?jiǎn)卧~計(jì)數(shù)解決方案第24章 美麗的并發(fā)24.2  軟件事務(wù)內(nèi)存24.3 圣誕老人問(wèn)題24.4 對(duì)Haskell的一些思考24.6 致謝第25章  句法抽象:syntax-case 展開(kāi)器25.1. syntax-case簡(jiǎn)介25.2. 展開(kāi)算法25.3. 例子25.4. 結(jié)論第26章 節(jié)省勞動(dòng)的架構(gòu):一個(gè)面向?qū)ο蟮木W(wǎng)絡(luò)化軟件框架26.1 示例程序:日志服務(wù)26.2 日志服務(wù)器框架的面向?qū)ο笤O(shè)計(jì)26.3 實(shí)現(xiàn)串行化日志服務(wù)器26.4 實(shí)現(xiàn)并行日志服務(wù)器26.5 結(jié)論第27章 以REST方式集成業(yè)務(wù)伙伴27.1 項(xiàng)目背景27.2 把服務(wù)開(kāi)放給外部客戶27.3 使用工廠模式轉(zhuǎn)發(fā)服務(wù)27.4 用電子商務(wù)協(xié)議來(lái)交換數(shù)據(jù)27.5 結(jié)束語(yǔ)第28章 漂亮的調(diào)試28.1 對(duì)調(diào)試器進(jìn)行調(diào)試28.2 系統(tǒng)化的過(guò)程28.3 關(guān)于查找的問(wèn)題28.4 自動(dòng)找出故障起因28.5 增量調(diào)試28.6 最小化輸入28.7 查找缺陷28.8 原型問(wèn)題28.9 結(jié)束語(yǔ)28.10 致謝28.11 進(jìn)一步閱讀第29章 把代碼當(dāng)作文章第30章 當(dāng)你與世界的聯(lián)系只有一個(gè)按鈕30.1 基本的設(shè)計(jì)模型30.2 輸入界面30.3 用戶界面的效率30.4 下載30.5 未來(lái)的發(fā)展方向第31章 Emacspeak:全功能音頻桌面31.1 產(chǎn)生語(yǔ)音輸出31.2 支持語(yǔ)音的Emacs31.3 對(duì)于在線信息的簡(jiǎn)單訪問(wèn)31.4 小結(jié)31.5 致謝第32章 變動(dòng)的代碼32.1 像書(shū)本一樣32.2 功能相似的代碼在外觀上也保持相似32.3 縮進(jìn)帶來(lái)的危險(xiǎn)32.4 瀏覽代碼32.5 我們使用的工具32.6 DiffMerge的曲折歷史32.7 結(jié)束語(yǔ)32.8 致謝32.9 進(jìn)一步閱讀第33章 為“The Book”編寫程序33.1 沒(méi)有捷徑33.2 給Lisp初學(xué)者的提示33.3 三點(diǎn)共線33.4 不可靠的斜率33.5 三角不等性33.6 河道彎曲模型33.7  “Duh!”——我的意思是“Aha!”33.8 結(jié)束語(yǔ)33.9 進(jìn)一步閱讀后記作者簡(jiǎn)介

章節(jié)摘錄

第3章 我從未編寫過(guò)的最漂亮的代碼Jon Bentley我曾經(jīng)聽(tīng)一位大師級(jí)的程序員這樣稱贊到,“我通過(guò)刪除代碼來(lái)實(shí)現(xiàn)功能的提升?!倍▏?guó)著名作家兼飛行家Antoine de Saint-Exupéry的說(shuō)法則更具代表性,“只有在不僅沒(méi)有任何功能可以添加,而且也沒(méi)有任何功能可以刪除的情況下,設(shè)計(jì)師才能夠認(rèn)為自己的工作已臻完美?!?某些時(shí)候,在軟件中根本就不存在最漂亮的代碼,最漂亮的函數(shù),或者最漂亮的程序。當(dāng)然,我們很難對(duì)不存在的事物進(jìn)行討論。本章將對(duì)經(jīng)典Quicksort(快速排序)算法的運(yùn)行時(shí)間進(jìn)行全面的分析,并試圖通過(guò)這個(gè)分析來(lái)說(shuō)明上述觀點(diǎn)。在第一節(jié)中,我將首先根據(jù)我自己的觀點(diǎn)來(lái)回顧一下Quicksort,并為后面的內(nèi)容打下基礎(chǔ)。第二節(jié)的內(nèi)容將是本章的重點(diǎn)部分。我們將首先在程序中增加一個(gè)計(jì)數(shù)器,然后通過(guò)不斷地修改,從而使程序的代碼變得越來(lái)越短,但程序的功能卻會(huì)變得越來(lái)越強(qiáng),最終的結(jié)果是只需要幾行代碼就可以使算法的運(yùn)行時(shí)間達(dá)到平均水平。在第三節(jié)將對(duì)前面的技術(shù)進(jìn)行小結(jié),并對(duì)二分搜索樹(shù)的運(yùn)行開(kāi)銷進(jìn)行簡(jiǎn)單的分析。最后的兩節(jié)將給出學(xué)完本章得到的一些啟示,這將有助于你在今后寫出更為優(yōu)雅的程序。3.1 我編寫過(guò)的最漂亮代碼當(dāng)Greg Wilson最初告訴我本書(shū)的編寫計(jì)劃時(shí),我曾自問(wèn)編寫過(guò)的最漂亮的代碼是什么。這個(gè)有趣的問(wèn)題在我腦海里盤旋了大半天,然后我發(fā)現(xiàn)答案其實(shí)很簡(jiǎn)單:Quicksort算法。但遺憾的是,根據(jù)不同的表達(dá)方式,這個(gè)問(wèn)題有著三種不同的答案。當(dāng)我撰寫關(guān)于分治(divide-and-conquer)算法的論文時(shí),我發(fā)現(xiàn)C.A.R. Hoare的Quicksort算法(“Quicksort”,Computer Journal 5)無(wú)疑是各種Quicksort算法的鼻祖。這是一種解決基本問(wèn)題的漂亮算法,可以用優(yōu)雅的代碼實(shí)現(xiàn)。我很喜歡這個(gè)算法,但我總是無(wú)法弄明白算法中最內(nèi)層的循環(huán)。我曾經(jīng)花兩天的時(shí)間來(lái)調(diào)試一個(gè)使用了這個(gè)循環(huán)的復(fù)雜程序,并且?guī)啄暌詠?lái),當(dāng)我需要完成類似的任務(wù)時(shí),我會(huì)很小心地復(fù)制這段代碼。雖然這段代碼能夠解決我所遇到的問(wèn)題,但我卻并沒(méi)有真正地理解它。我后來(lái)從Nico Lomuto那里學(xué)到了一種優(yōu)雅的劃分(partitioning)模式,并且最終編寫出了我能夠理解,甚至能夠證明的Quicksort算法。William Strunk Jr.針對(duì)英語(yǔ)所提出的“良好的寫作風(fēng)格即為簡(jiǎn)練”這條經(jīng)驗(yàn)同樣適用于代碼的編寫,因此我遵循了他的建議,“省略不必要的字詞”(來(lái)自《The Elements of Style》一書(shū))。我最終將大約40行左右的代碼縮減為十幾行的代碼。因此,如果要回答“你曾編寫過(guò)的最漂亮代碼是什么?”這個(gè)問(wèn)題,那么我的答案就是:在我編寫的《Programming Pearls, Second Edition》(Addison-Wesley)一書(shū)中給出的Quichsort算法。在示例3-1中給出了用C語(yǔ)言編寫的Quicksort函數(shù)。我們?cè)诮酉聛?lái)的章節(jié)中將進(jìn)一步地研究和改善這個(gè)函數(shù)?!臼纠?3-1 Quicksort函數(shù)void quicksort(int l, int u){int i, m;if (l >= u) return;swap(l, randint(l, u));m = l;for (i = l+1; i

后記

后記Andy Oram《Beautiful Code》介紹了人類在一個(gè)奮斗領(lǐng)域:計(jì)算機(jī)系統(tǒng)的開(kāi)發(fā)領(lǐng)域中的創(chuàng)造性和靈活性。在每章中的漂亮代碼都來(lái)自獨(dú)特解決方案的發(fā)現(xiàn),而這種發(fā)現(xiàn)來(lái)源于作者超越既定邊界的遠(yuǎn)見(jiàn)卓識(shí),并且識(shí)別出被多數(shù)人忽視的需求以及找出令人嘆為觀止的問(wèn)題的解決方案。大多數(shù)作者都面臨著種種限制——包括物理環(huán)境,可用資源,或者特殊的需求定義——這些限制通常會(huì)使我們很難想象出解決方案。而其他一些作者則是在已經(jīng)存在解決方案的領(lǐng)域中重新研究,并且提出新的觀點(diǎn)以及更好地實(shí)現(xiàn)某個(gè)功能。本書(shū)的所有作者都從他們的項(xiàng)目中獲得了一些經(jīng)驗(yàn)。不過(guò)在閱讀完本書(shū)后,我們同樣可以總結(jié)出一些更廣泛的經(jīng)驗(yàn)。首先,在可靠和真實(shí)的規(guī)則能夠真正應(yīng)用之前,需要進(jìn)行多次嘗試。因?yàn)?,人們?cè)诰S護(hù)穩(wěn)定性、可靠性以及其他軟件工程要求的標(biāo)準(zhǔn)時(shí)經(jīng)常會(huì)遇到重重困難。在這種情況下,我們通常沒(méi)有必要拋棄支持這種承諾的原則。有時(shí)候,從另一個(gè)角度來(lái)思考問(wèn)題或許能夠揭示一種新的方向,從而使我們?cè)跐M足需求的同時(shí)無(wú)需犧牲那些好的技術(shù)。另一方面,在有些章節(jié)中強(qiáng)調(diào)了這條古老的原則:在打破原則之前,人們必須首先了解這個(gè)規(guī)則。有些作者在獲得一種不同的解決方案之前積累了數(shù)十年的經(jīng)驗(yàn)——而正是這些經(jīng)驗(yàn)給了他們自信,從而以創(chuàng)造性的方式打破規(guī)則。此外,書(shū)中的一些經(jīng)驗(yàn)還提倡跨學(xué)科研究。許多作者都是在新的領(lǐng)域中進(jìn)行研究并在黑暗中不斷探索。在這種情況下,全新的創(chuàng)造力和個(gè)人智慧將起到重要的作用。最后,我們從書(shū)中學(xué)到的漂亮的解決方案并不會(huì)持續(xù)很長(zhǎng)時(shí)間。在新的環(huán)境中總會(huì)要求新的解決方式。因此,如果閱讀了本書(shū)并且認(rèn)為,“無(wú)法在自己的任何一個(gè)項(xiàng)目上使用這些作者的解決方案”,那么也不要擔(dān)心——這些作者在做下一個(gè)項(xiàng)目的時(shí)候,也會(huì)使用不同的解決方案。我在這本書(shū)上全身心地工作了兩個(gè)月,以幫助作者完善他們的主題和更好地表達(dá)他們的觀點(diǎn)。閱讀這些天才發(fā)明家的文章的確令人鼓舞甚至是令人情緒高漲的。它給了我嘗試新鮮事物的沖動(dòng),我希望讀者在閱讀本書(shū)時(shí)也能有同樣的感受。作者簡(jiǎn)介John Bentley是美國(guó)Avaya實(shí)驗(yàn)室的一位計(jì)算機(jī)科學(xué)家。他的研究領(lǐng)域包括編程技術(shù)、算法設(shè)計(jì)以及軟件工具與界面設(shè)計(jì)。他已編寫了數(shù)本關(guān)于編程的書(shū)籍,還撰寫了大量的文章,主題涉及從算法理論到軟件工程的各個(gè)方向。他于1974年在斯坦福大學(xué)獲得學(xué)士學(xué)位,并于1974年獲得碩士學(xué)位以及于1976年在北卡羅來(lái)納大學(xué)獲得博士學(xué)位,隨后在卡耐基-梅隆大學(xué)任教6年,教授計(jì)算機(jī)科學(xué)。1982年他加入貝爾實(shí)驗(yàn)室,并于2001年離開(kāi)貝爾實(shí)驗(yàn)室并加入Avaya實(shí)驗(yàn)室。他曾是西點(diǎn)軍校和普林斯頓大學(xué)的訪問(wèn)教授、曾經(jīng)參與開(kāi)發(fā)過(guò)軟件工具、電話交換機(jī)、電話以及網(wǎng)絡(luò)服務(wù)。Tim Bray于1987-1989年間在加拿大的安大略省滑鐵盧大學(xué)負(fù)責(zé)牛津英語(yǔ)詞典項(xiàng)目,1989年與他人聯(lián)合創(chuàng)建了Open Text公司,在1995年啟動(dòng)了最早的公共網(wǎng)頁(yè)搜索引擎之一,在1996至1999年間與他人共同發(fā)明了XML 1.0并合作編寫了《Namespaces in XML》規(guī)范,在1999年他創(chuàng)建了Antarctica Systems公司,并于2002-2004年被Tim Berners-Lee任命在W3C技術(shù)架構(gòu)組中工作。目前,他在Sun Microsystems公司W(wǎng)eb Technologies部門任主管,他有一個(gè)很受歡迎的博客,并且參與主持IETF AtomPub工作組。Bryan Cantrill是Sun Microsystems公司的一位杰出的工程師,在他的職業(yè)生涯中主要從事Solaris內(nèi)核的開(kāi)發(fā)。最近他與同事Mike Shapiro和Adam Leventhal一起設(shè)計(jì)并實(shí)現(xiàn)了DTrace,這是一個(gè)用于產(chǎn)品系統(tǒng)動(dòng)態(tài)控制的工具,獲得了《華爾街日?qǐng)?bào)》2006年度的最高創(chuàng)新獎(jiǎng)。Douglas Crockford畢業(yè)于公立學(xué)校。他是一位登記選民,擁有自己的汽車。他曾開(kāi)發(fā)過(guò)辦公自動(dòng)化系統(tǒng)。他曾在Atari公司從事過(guò)游戲和音樂(lè)研究。他曾是Lucasfilm有限公司技術(shù)部門的主管,以及Paramount公司New Media部門的主管。他創(chuàng)建了Electric Communities公司并且擔(dān)任CEO。他還是State 軟件公司的創(chuàng)建者和CTO,正是在這個(gè)公司中他發(fā)明了JSON數(shù)據(jù)格式。他現(xiàn)在是Yahoo!公司的一位架構(gòu)師。Rogerio Atem de Carvalho是巴西校園技術(shù)教育聯(lián)合中心(Federal Center for Technological Education of Campos,CEFET Campos)的一位教師兼研究人員。他在奧地利的維也納獲得了2006年度IFIP杰出學(xué)術(shù)領(lǐng)導(dǎo)獎(jiǎng)(Distinguished Academic Leadership Award),以表彰他在免費(fèi)/開(kāi)源企業(yè)資源計(jì)劃(ERP)上所做的研究工作。他的研究領(lǐng)域還包括決策支持系統(tǒng)和軟件工程。Jeff Dean于1999年加入Google,目前是Google系統(tǒng)架構(gòu)小組的成員。他在Google主要負(fù)責(zé)開(kāi)發(fā)Google的網(wǎng)頁(yè)抓取、索引、查詢服務(wù)以及廣告系統(tǒng)等,他對(duì)搜索質(zhì)量實(shí)現(xiàn)了多次改進(jìn),并實(shí)現(xiàn)了Google分布式計(jì)算架構(gòu)的多個(gè)部分。在加入Google之前,他工作于DEC/Compaq的Western實(shí)驗(yàn)室,主要從事軟件分析工具、微處理器架構(gòu)以及信息檢索等方面的研究。他于1996年在華盛頓大學(xué)獲得了博士學(xué)位,與Craig Chambers一起從事面向?qū)ο笳Z(yǔ)言的編譯器優(yōu)化技術(shù)方面的研究。在畢業(yè)之前,他還在世界衛(wèi)生組織的艾滋病全球規(guī)劃署工作過(guò)。Jack Dongarra于1972年在芝加哥大學(xué)獲得數(shù)學(xué)學(xué)士學(xué)位,并于1973年在伊利諾理工大學(xué)獲得計(jì)算機(jī)科學(xué)碩士學(xué)位,又于1980年在新墨西哥大學(xué)獲得應(yīng)用數(shù)學(xué)博士學(xué)位。他在美國(guó)阿貢國(guó)家實(shí)驗(yàn)室(Argonne National Laboratory)一直工作到1989年,并成為了一名著名科學(xué)家。他現(xiàn)在被任命為田納西大學(xué)計(jì)算機(jī)科學(xué)系的計(jì)算機(jī)科學(xué)杰出教授。他是美國(guó)橡樹(shù)嶺國(guó)家實(shí)驗(yàn)室(Oak Ridge National Laboratory ,ORNL)計(jì)算機(jī)科學(xué)與數(shù)學(xué)部的杰出的研究人員,曼徹斯特大學(xué)計(jì)算機(jī)科學(xué)與數(shù)學(xué)學(xué)院的Turing Fellow,美國(guó)萊斯大學(xué)計(jì)算機(jī)科學(xué)系的副教授。他的研究領(lǐng)域包括線性代數(shù)中的數(shù)值算法,并行計(jì)算,高級(jí)計(jì)算機(jī)架構(gòu)的應(yīng)用,程序設(shè)計(jì)方法學(xué)以及用于并行計(jì)算機(jī)的工具。他的研究工作包括開(kāi)發(fā)、測(cè)試高質(zhì)量的數(shù)學(xué)軟件以及整理相關(guān)文檔。他在以下開(kāi)源軟件包和系統(tǒng)的設(shè)計(jì)及實(shí)現(xiàn)上做出了貢獻(xiàn):ISPACK, LINPACK, the BLAS, LAPACK, ScaLAPACK, Netlib, PVM, MPI, NetSolve, Top500, ATLAS, 和 PAPI。他公開(kāi)發(fā)表了大約200篇文章、論文、報(bào)告以及技術(shù)備忘錄,還參與編寫了數(shù)本著作。他于2004年獲得了IEEE Sid Fernbach獎(jiǎng),以表彰他在高性能計(jì)算機(jī)的應(yīng)用中使用了創(chuàng)新的方法。他不僅是AAAS,ACM和IEEE的成員,還是美國(guó)工程院的院士。R. Kent Dybvig是印第安納大學(xué)計(jì)算機(jī)科學(xué)系的一位教授。在印第安納大學(xué)任教兩年之后,他于1987年在北卡羅來(lái)納大學(xué)獲得了博士學(xué)位。他在設(shè)計(jì)和實(shí)現(xiàn)編程語(yǔ)言的研究上做出了重要的貢獻(xiàn),包括控制運(yùn)算符、句法抽象、程序分析、編譯器優(yōu)化、寄存器分配、多線程以及自動(dòng)存儲(chǔ)管理等。在1984年,他創(chuàng)建了Chez Scheme軟件并一直是主要的開(kāi)發(fā)人員。Chez Scheme的特點(diǎn)在于快速的編譯時(shí)間、可靠性以及能夠高效地運(yùn)行內(nèi)存需求巨大的復(fù)雜程序,它已經(jīng)被用于構(gòu)建企業(yè)集成、網(wǎng)頁(yè)服務(wù)、虛擬現(xiàn)實(shí)、機(jī)器人藥品抽檢、電路設(shè)計(jì)以及其他的商業(yè)系統(tǒng)。它還可以用于各種層次的計(jì)算機(jī)教育以及許多其他領(lǐng)域中的研究。Dybvig是《The Scheme Programming Language, Third Edition》(MIT Press出版社)一書(shū)的作者,以及即將發(fā)布的“Revised6 Report on Scheme”文檔的編輯。Michael Feathers是Object Mentor 公司的顧問(wèn)。在過(guò)去七年間,他一直活躍于Agile社群,他的工作主要是與世界各地不同的團(tuán)隊(duì)合作,培訓(xùn)以及指導(dǎo)。在加入Object Mentor公司之前,Michael設(shè)計(jì)過(guò)一種編程語(yǔ)言,并為這種語(yǔ)言寫了一個(gè)編譯器。他還設(shè)計(jì)了一個(gè)龐大的多平臺(tái)類庫(kù)以及用于控制的框架。Michael開(kāi)發(fā)了CppUnit,也就是最初把JUnit移植到C++;以及FitCpp,也就是把FIT移植到C++。在2005年,Michael編寫了《Working Effectively with Legacy Code》(Prentice Hall出版社)一書(shū)。在與各個(gè)團(tuán)隊(duì)合作的間隙,他的大多數(shù)時(shí)間都花在研究大型代碼庫(kù)中的設(shè)計(jì)修改方式方面。1995年,Karl Fogel和Jim Blandy一起創(chuàng)建了Cyclic軟件公司,這是第一個(gè)提供商業(yè)CVS支持的公司。1997年,Karl增加了對(duì)CVS匿名只讀存儲(chǔ)倉(cāng)庫(kù)訪問(wèn)的支持,這樣就可以更方便地訪問(wèn)開(kāi)源項(xiàng)目中的開(kāi)發(fā)代碼。1999年,他工作于CollabNet公司,主要從事管理Subversion的創(chuàng)建和開(kāi)發(fā)工作,這是CollabNet公司和一群開(kāi)源志愿者們從頭開(kāi)始編寫的開(kāi)源版本控制系統(tǒng)。2005年,他編寫了《Producing Open Source Software: How to Run a Successful Free Software Project 》(O'Reilly出版社;在http://producingoss.com上有聯(lián)機(jī)版本) 一書(shū)。2006年,他在Google擔(dān)任了短期的開(kāi)源技術(shù)專家之后離開(kāi)Google并成為了Question-Copyright.org網(wǎng)站的全職編輯。他目前仍然參與了多個(gè)開(kāi)源項(xiàng)目,包括Subversion和GNU Emacs。Sanjay Ghemawat是一位Google Fellow,工作于Google的系統(tǒng)架構(gòu)小組。他設(shè)計(jì)并實(shí)現(xiàn)了分布式的存儲(chǔ)系統(tǒng),文本索引系統(tǒng),性能分析工具,一種數(shù)據(jù)表示語(yǔ)言,一個(gè)RPC系統(tǒng),一個(gè)malloc函數(shù)實(shí)現(xiàn)以及許多其他的庫(kù)。在加入Google之前,他是DEC系統(tǒng)研究中心的一位研究人員,主要從事系統(tǒng)性能分析和優(yōu)化Java編譯器的工作,他還實(shí)現(xiàn)了一個(gè)Java虛擬機(jī)。他于1995年在麻省理工大學(xué)獲得博士學(xué)位,研究領(lǐng)域?yàn)槊嫦驅(qū)ο髷?shù)據(jù)庫(kù)的實(shí)現(xiàn)。Ashish Gulhati是互聯(lián)網(wǎng)隱私服務(wù)Neomailbox的首席開(kāi)發(fā)員,以及Cryptonite的開(kāi)發(fā)員,這是一個(gè)支持OpenPGP協(xié)議的安全網(wǎng)頁(yè)郵件系統(tǒng)。他有著15年的商業(yè)軟件開(kāi)發(fā)經(jīng)驗(yàn),是印度最早的數(shù)字版權(quán)活動(dòng)家之一和F/OSS程序員,他編寫了大量的開(kāi)源Perl模塊,這些模塊可以從CPAN上下載。在1993~1994年間,他在《PC Quest》和《DataQuest》等雜志上發(fā)表了大量文章,這是在印度主流計(jì)算機(jī)刊物中最早向讀者介紹自由軟件,GNU/ Linux,Web和Internet的文章,在這些文章發(fā)表多年以后,印度才擁有了商業(yè)的互聯(lián)網(wǎng)訪問(wèn),這些文章還構(gòu)成了PC Quest Linux Initiative活動(dòng)的重要組成部分,這個(gè)活動(dòng)促使自1995年以來(lái),在印度分發(fā)了一百萬(wàn)份Linux光盤。在獲得了一組可穿戴的計(jì)算機(jī)后,他很快地成為了一個(gè)電子人。Elliotte Rusty Harold是新奧爾良人,他會(huì)定期返回新奧爾良去吃一大碗海鮮干波湯(Gumbo)。不過(guò),他目前住在布魯克林附近的Prospect Heights,和他生活在一起還有他的妻子Beth,狗Shayna,和兩只貓Charm(以夸克命名)和Marjorie(以他的岳母命名)。他是紐約科技大學(xué)的一位副教授,主要講授Java、XML以及面向?qū)ο缶幊獭K腃afe au Lait網(wǎng)站(http://www.cafeaulait.org)是互聯(lián)網(wǎng)上最流行的獨(dú)立Java網(wǎng)站之一;他的另一個(gè)網(wǎng)站Cafe con Leche (http://www.cafeconleche.org)則成為了最流行XML站點(diǎn)之一。他編寫的書(shū)籍包括《Java I/O》,《Java Network Programming》和《XML in a Nutshell》(這三本書(shū)都由O'Reilly出版社出版),以及XML Bible (Wiley出版社)。他目前的研究領(lǐng)域包括用Java來(lái)處理XML的XOM庫(kù)、Jaxen XPath引擎以及Amateur媒體播放器。Brian Hayes為《American Scientist》雜志編寫計(jì)算機(jī)專欄,他還擁有一個(gè)博客http://bit-player.org。過(guò)去,他還為《Scientific American》、《Computer Language》、 以及《The Sciences》等雜志編寫過(guò)類似的專欄。他編寫的《Infrastructure: A Field Guide to the Industrial Landscape》(Norton出版社)一書(shū)于2005年發(fā)行。Simon Peyton Jones,碩士,于1980年畢業(yè)于劍橋大學(xué)三一學(xué)院。在工作兩年后,他在倫敦大學(xué)學(xué)院擔(dān)任了7年的講師,然后在格拉斯哥大學(xué)擔(dān)任了9年的教授,后來(lái)于1998年加入微軟研究中心。他的研究領(lǐng)域包括函數(shù)式編程語(yǔ)言及其實(shí)現(xiàn)和應(yīng)用。他領(lǐng)導(dǎo)了一系列的研究項(xiàng)目,主要研究用于單處理器機(jī)器和并行機(jī)的高質(zhì)量函數(shù)式語(yǔ)言系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)。他是函數(shù)式語(yǔ)言Haskell的主要設(shè)計(jì)者,此外他還是被廣泛應(yīng)用的Glasgow Haskell編譯器(GHC)首席設(shè)計(jì)師。他還編寫了兩本關(guān)于函數(shù)式語(yǔ)言實(shí)現(xiàn)的教科書(shū)。Jim Kent是加利福尼亞大學(xué)圣克魯茲分校基因信息小組(Genome Bioinformatics Group)的一位研究學(xué)家。Jim從1983年起就開(kāi)始編程。在職業(yè)生涯的前半段,他主要從事繪畫(huà)和動(dòng)畫(huà)軟件的開(kāi)發(fā),他開(kāi)發(fā)了Aegis Animator、 Cyber Paint以及 Autodesk Animator等獲獎(jiǎng)軟件。1996年,由于厭倦了基于Windows API的開(kāi)發(fā)工作,他決定在生物學(xué)上追求他的興趣,并于2002年獲得了博士學(xué)位。在研究生期間,他編寫GigAssembler——這個(gè)程序計(jì)算出了第一批人類基因組——比Celera公司發(fā)布的第一批基因組提前了一天,從而使得這批基因組成為免費(fèi)的專利并且避免了其他的法律問(wèn)題。Jim發(fā)表了40余篇科學(xué)論文。他目前的研究工作主要是編寫程序,數(shù)據(jù)庫(kù)和網(wǎng)站以幫助科學(xué)家分析和了解基因組。Brian Kernighan于1964年在多倫多大學(xué)獲得學(xué)士學(xué)位,并于1969年在普林斯頓大學(xué)獲得電子工程博士學(xué)位。他在貝爾實(shí)驗(yàn)室的計(jì)算科學(xué)研究中心一直工作到2000年,目前就職于普林斯頓大學(xué)的計(jì)算機(jī)科學(xué)系。他編寫了8本著作以及大量的技術(shù)論文,并擁有4項(xiàng)專利。他的研究領(lǐng)域包括編程語(yǔ)言、工具、為非專業(yè)用戶設(shè)計(jì)易用的計(jì)算機(jī)操作界面等。他還致力于非技術(shù)讀者的技術(shù)教育工作。Adam Kolawa是Parasoft公司的創(chuàng)建者之一和CEO,這家公司是自動(dòng)錯(cuò)誤預(yù)防(Automated Error Prevention ,AEP)解決方案的領(lǐng)先提供商。Kolawa有著多年在各種軟件開(kāi)發(fā)流程中的經(jīng)驗(yàn),這使得他對(duì)高科技企業(yè)有著獨(dú)特的視野,以及成功辨識(shí)技術(shù)潮流的非凡能力。因此,他策劃了幾個(gè)成功商業(yè)軟件產(chǎn)品的開(kāi)發(fā)過(guò)程來(lái)滿足在提高軟件質(zhì)量中不斷增長(zhǎng)的工業(yè)需求——經(jīng)常在這種潮流被廣泛接受之前。Kolawa參與編寫了《Bulletproofing Web Applications》(Hungry Minds出版社)一書(shū),他還撰寫了100余篇評(píng)論和技術(shù)文章,發(fā)表在《The Wall Street Journal》、《CIO》、《Computerworld》、《Dr. Dobb's Journal》以及《IEEE Computer》等期刊上。此外,他還撰寫了大量關(guān)于物理學(xué)和并行處理方面的科學(xué)論文。他現(xiàn)在的簽約媒體包括CNN、 CNBC、 BBC和NPR。Kolawa擁有加利福尼亞理工大學(xué)理論物理博士學(xué)位,并擁有10項(xiàng)專利發(fā)明。2001年,Kolawa獲得了軟件類別的Los Angeles Ernst & Young's Entrepreneur of the Year獎(jiǎng)項(xiàng)。Greg Kroah-Hartman是目前Linux內(nèi)核的維護(hù)人員,負(fù)責(zé)多個(gè)驅(qū)動(dòng)程序子系統(tǒng)以及驅(qū)動(dòng)程序內(nèi)核、sysfs、 kobject、 kref和debugfs等代碼。他還為啟動(dòng)linux-hotplug 和 udev等項(xiàng)目提供了幫助,是內(nèi)核穩(wěn)定維護(hù)團(tuán)隊(duì)中的重要人員。他編寫了《Linux Kernel in a Nutshell》(O'Reilly出版社),并參與編寫了《Linux Device Drivers, Third Edition》(O'Reilly出版社)。Andrew Kuchling有著11年的軟件工程師經(jīng)驗(yàn),他是Python開(kāi)發(fā)群體中的長(zhǎng)期成員。他的一些與Python相關(guān)的工作包括編寫和維護(hù)數(shù)個(gè)標(biāo)準(zhǔn)的庫(kù)模塊,編寫一系列的“What's new in Python 2.x”文章以及其他一些文檔,策劃了2006年和2007年的PyCon會(huì)議,并是Python軟件基金會(huì)的主管。Andrew于1995年畢業(yè)于麥吉爾大學(xué)并獲得計(jì)算機(jī)科學(xué)學(xué)士學(xué)位。他的個(gè)人網(wǎng)頁(yè)是http://www.amk.ca。Piotr Luszczek畢業(yè)于波蘭克拉科夫礦業(yè)與冶金大學(xué),并獲得碩士學(xué)位,他的研究領(lǐng)域是并行的核外(out-of-core)庫(kù)。他將稠密矩陣計(jì)算核應(yīng)用于稀疏矩陣直接求解算法和迭代數(shù)值線性幾何算法中的創(chuàng)新研究使他獲得了博士學(xué)位。他把這種思想用來(lái)開(kāi)發(fā)使用核外技術(shù)容錯(cuò)庫(kù)。目前,他是田納西大學(xué)諾克斯維爾分校的一位研究教授。他的研究工作包括大型超級(jí)計(jì)算機(jī)安裝的標(biāo)準(zhǔn)化評(píng)價(jià)。他開(kāi)發(fā)了一個(gè)自適應(yīng)的軟件庫(kù),能夠自動(dòng)選擇最優(yōu)的算法來(lái)有效地利用現(xiàn)有硬件以及有選擇地處理輸入數(shù)據(jù)。他還感興趣于高性能編程語(yǔ)言的設(shè)計(jì)和實(shí)現(xiàn)。Ronald Mak是高級(jí)計(jì)算機(jī)科學(xué)研究所(Research Institute for Advanced Computer Science)的一位資深科學(xué)家,在NASA Ames研究中心工作時(shí),他是協(xié)同信息系統(tǒng)(Collaborative Information Portal,CIP)的架構(gòu)師和首席開(kāi)發(fā)人員。在漫步者登錄火星之后,他分別在JPL和Ames對(duì)探測(cè)任務(wù)提供支持。然后,他獲得了加利福尼亞大學(xué)圣克魯茲分校的學(xué)術(shù)任命,并且他再次與NASA簽約,這次的工作是設(shè)計(jì)幫助宇航員返回月球的企業(yè)軟件。Ron是Willard & Lowe Systems(http://www.willardlowe.com)公司的創(chuàng)建人之一和CTO,這是一個(gè)針對(duì)企業(yè)信息管理系統(tǒng)的咨詢公司。他編寫了數(shù)本關(guān)于計(jì)算機(jī)軟件的書(shū)籍,他在斯坦福大學(xué)分別獲得了數(shù)學(xué)科學(xué)學(xué)位和計(jì)算機(jī)科學(xué)學(xué)位。Yukihiro "Matz" Matsumoto是一位程序員,他是一位日本籍的開(kāi)源倡導(dǎo)者,他發(fā)明了最近非常流行的Ruby語(yǔ)言。他從1993年開(kāi)始研發(fā)Ruby,這和Java語(yǔ)言一樣久遠(yuǎn)?,F(xiàn)在他工作于日本Network Applied Communication Laboratory(NaCl,網(wǎng)址為netlab.jp)公司,該公司從1997年起開(kāi)始贊助Ruby的開(kāi)發(fā)。因?yàn)樗恼鎸?shí)姓名太長(zhǎng)而難以記住,并且對(duì)于非日本的演講者來(lái)說(shuō)難以發(fā)音,因此在網(wǎng)上他使用了昵稱Matz。Arun Mehta是一位電子工程師和計(jì)算機(jī)科學(xué)家,他曾在印度、美國(guó)和德國(guó)進(jìn)行過(guò)研究和教學(xué)工作。他是印度早期計(jì)算機(jī)活動(dòng)家,他努力實(shí)現(xiàn)了一些方便消費(fèi)者(consumer-friendly)的政策,以幫助把現(xiàn)代通信延伸到偏遠(yuǎn)地區(qū)和貧困地區(qū)。他目前的研究領(lǐng)域包括農(nóng)村無(wú)限通信以及幫助殘疾用戶的技術(shù)。他是印度哈里亞納邦Radaur地區(qū)JMIT大學(xué)計(jì)算機(jī)工程系的教授和主任。他的網(wǎng)址包括http://india-gii.org, http://radiophony.com和 http://holisticit.com。Rafael Manhaes Monnerat是CEFET CAMPOS的一位IT分析家,以及Nexedi SARL的海外顧問(wèn)。他的研究領(lǐng)域包括免費(fèi)/開(kāi)源系統(tǒng)、ERP以及最新的編程語(yǔ)言。Travis E. Oliphant于1995年在美國(guó)楊百翰大學(xué)獲得電子與計(jì)算機(jī)工程學(xué)士學(xué)位和數(shù)學(xué)學(xué)士學(xué)位,并于1996年在本校獲得電子與計(jì)算機(jī)工程碩士學(xué)位。他于2001年在明尼蘇達(dá)羅切斯特的梅奧研究生院獲得了生物醫(yī)學(xué)工程博士學(xué)位。他是Python語(yǔ)言中科學(xué)計(jì)算庫(kù)SciPy和NumPy的主要編寫者。他的研究領(lǐng)域包括顯微阻抗成像,異構(gòu)領(lǐng)域中的MRI重構(gòu)以及生物醫(yī)學(xué)逆問(wèn)題。他目前是楊百翰大學(xué)電子與計(jì)算機(jī)工程的副教授。Andy Oram是O'Reilly Media的編輯。他從1992年開(kāi)始就在這家公司工作,Andy目前主要關(guān)注自由軟件和開(kāi)源技術(shù)。他在O'Reilly的工作成果包括第一批Linux系列叢書(shū)以及2001年的P2P系列叢書(shū)。他的編程技術(shù)和系統(tǒng)管理技術(shù)大多都是自學(xué)的。Andy還是Computer Professionals for Social Responsibility協(xié)會(huì)的成員并且經(jīng)常在O'Reilly Network(http://oreillynet.com)和其他一些刊物上撰寫文章,這些文章的主題包括互聯(lián)網(wǎng)上的政策問(wèn)題,以及影響技術(shù)創(chuàng)新的潮流及其對(duì)社會(huì)的影響。他的網(wǎng)址為http://www.praxagora.com/andyo。William R. Otte是田納西范德堡大學(xué)電子工程與計(jì)算機(jī)系(EECS)的一位博士研究生。他的研究領(lǐng)域是分布式實(shí)時(shí)嵌入(DRE)系統(tǒng)的中間件,目前從事CORBA組件的部署和配置引擎(DAnCE)開(kāi)發(fā)工作。這個(gè)工作主要研究運(yùn)行時(shí)規(guī)劃技術(shù),基于組件的應(yīng)用程序的適應(yīng)性,以及對(duì)應(yīng)用程序服務(wù)質(zhì)量和容錯(cuò)需求的規(guī)范與實(shí)施。在攻讀研究生之前,William于2005年在范德堡大學(xué)計(jì)算機(jī)系畢業(yè)并獲得學(xué)士學(xué)位,之后在軟件集成系統(tǒng)學(xué)院(ISIS)工作了一年。Andrew Patzer是威斯康星大學(xué)醫(yī)學(xué)院生物信息系的主管。過(guò)去15年Andrew是一位軟件開(kāi)發(fā)人員并且編寫了許多文章和書(shū)籍,包括《Professional Java Server Programming》(Peer Information公司)和《JSP Examples and Best Practices》(Apress出版社)。Andrew目前的研究領(lǐng)域?yàn)樯镄畔㈩I(lǐng)域,利用像Groovy這樣的動(dòng)態(tài)語(yǔ)言來(lái)發(fā)掘大量有效的生物數(shù)據(jù)并幫助科學(xué)研究人員進(jìn)行分析。Charles Petzold是一位自由作家,主要研究領(lǐng)域?yàn)閃indows應(yīng)用程序編程。他是《Programming Windows》(Microsoft Press出版社)的作者, 1988年至1999年之間共出版了五版,教育了整整一代程序員的Windows API編程技術(shù)。他最新的書(shū)籍包括《Applications = Code + Markup: A Guide to the Microsoft Windows Presentation Foundation》(Microsoft Press出版社),以及《Code: The Hidden Language of Computer Hardware and Software》(Microsoft Press出版社),在這本書(shū)中他對(duì)數(shù)字技術(shù)進(jìn)行了獨(dú)特的研究。他的網(wǎng)址是http://www.charlespetzold.com。T. V. Raman的研究領(lǐng)域包括網(wǎng)頁(yè)技術(shù)和聽(tīng)覺(jué)用戶界面。在20世紀(jì)90年代初,在他的博士論文中介紹了音頻格式的概念,叫作AsTeR:Audio System For Technical Readings(技術(shù)讀物語(yǔ)音系統(tǒng)),這是一個(gè)為技術(shù)文檔生成高質(zhì)量聽(tīng)覺(jué)表示的系統(tǒng)。Emacspeak則將這些思想應(yīng)用到更廣泛的計(jì)算機(jī)用戶界面領(lǐng)域。Raman現(xiàn)在是Google的一位研究人員,主要研究Web應(yīng)用程序。Alberto Savoia是Agitar軟件公司的創(chuàng)建人之一和CTO。在創(chuàng)建Agitar之前,他是Google的高級(jí)工程主管;在這之前,他還是Sun Microsystems實(shí)驗(yàn)室軟件研究中心的主管。Alberto的主要研究領(lǐng)域是軟件開(kāi)發(fā)技術(shù)——尤其是那些幫助程序員在設(shè)計(jì)和開(kāi)發(fā)階段進(jìn)行測(cè)試和代碼驗(yàn)證的工具和技術(shù)。Douglas C. Schmidt是田納西范德堡大學(xué)電子工程與計(jì)算機(jī)(EECS)系的一位教授,計(jì)算機(jī)科學(xué)與工程系的副主任,以及軟件集成系統(tǒng)學(xué)院(ISIS)的高級(jí)研究人員。他是分布式計(jì)算模式和中間件框架方面的專家,并且已經(jīng)發(fā)表了超過(guò)350篇的技術(shù)論文和9本書(shū)籍,內(nèi)容涉及的主題很廣,包括高性能通信軟件系統(tǒng),高速網(wǎng)絡(luò)協(xié)議并行處理,實(shí)時(shí)分布式對(duì)象計(jì)算,并發(fā)與分布式系統(tǒng)的面向?qū)ο竽J?,以及模型?qū)動(dòng)的開(kāi)發(fā)工具。在他的學(xué)術(shù)研究之外,Dr. Schmidt還是PrismTechnologies公司的CTO,并且在領(lǐng)導(dǎo)開(kāi)發(fā)應(yīng)用廣泛開(kāi)源的中間件平臺(tái)上有著15年的經(jīng)驗(yàn),在這些平臺(tái)上包含了豐富的組件以及實(shí)現(xiàn)高性能分布式系統(tǒng)中核心模式的領(lǐng)域特定語(yǔ)言。Dr. Schmidt于1994年于加利福尼亞大學(xué)歐文分校獲得計(jì)算機(jī)科學(xué)博士學(xué)位。Christopher Seiwald編寫了Perforce(一種軟件配置管理系統(tǒng))、Jam(一種構(gòu)建工具)和“漂亮代碼的七個(gè)要素”(本書(shū)的第32章,變動(dòng)的代碼,正是從這篇文章中提取出了有價(jià)值的思想)。在創(chuàng)建Perforce之前,他在Ingres公司管理網(wǎng)絡(luò)開(kāi)發(fā)小組,他花了數(shù)年時(shí)間來(lái)使得異步網(wǎng)絡(luò)代碼看上去很漂亮?,F(xiàn)在他是Perforce軟件公司的CEO,并且仍然從事編碼工作。Diomidis Spinellis是希臘雅典經(jīng)濟(jì)與商業(yè)大學(xué)管理科學(xué)與技術(shù)系的副教授。他的研究領(lǐng)域包括軟件工程工具,編程語(yǔ)言和計(jì)算機(jī)安全。他在倫敦帝國(guó)理工大學(xué)獲得了軟件工程碩士學(xué)位和計(jì)算機(jī)科學(xué)博士學(xué)位。他發(fā)表了超過(guò)100篇的技術(shù)論文,所涉及的領(lǐng)域包括軟件工程,信息安全以及普適計(jì)算。他還編寫了兩本開(kāi)源方面的書(shū)籍:《Code Reading 》(獲得2004年度Software Development Productivity獎(jiǎng))和《 Code Quality 》(這兩本書(shū)都由Addison-Wesley出版社出版)。他是IEEE Software編輯委員會(huì)的成員,主編“Tools of the Trade”專欄。Diomidis是一位FreeBSD提交者(Committer),并且編寫了許多開(kāi)源軟件包、軟件庫(kù)以及工具。Lincoln Stein是一位碩士/博士,他的研究領(lǐng)域?yàn)樯镄畔?shù)據(jù)的集成與虛擬化。在從哈佛大學(xué)醫(yī)科學(xué)院畢業(yè)后,他在麻省理工大學(xué)Whitehead基因研究所工作,開(kāi)發(fā)用于老鼠和人類的基因圖譜數(shù)據(jù)庫(kù)。他在冷泉港實(shí)驗(yàn)室開(kāi)發(fā)了各種基因數(shù)據(jù)庫(kù),包括WormBase,線蟲(chóng)基因數(shù)據(jù)庫(kù);Gramene,用于水稻和其他單子葉植物的比較基因映射數(shù)據(jù)庫(kù);國(guó)際Hap-Map項(xiàng)目數(shù)據(jù)庫(kù);以及人類基因基礎(chǔ)數(shù)據(jù)庫(kù)Reactome。Lincoln還編寫了《books How to Set Up and Maintain a Web Site》(Addison-Wesley出版社)、《Network Programming in Perl》(Addison-Wesley出版社)、《Official Guide to Programming with CGI.pm 》(Wiley出版社)以及《Writing Apache Modules with Perl and C》(O'Reilly出版社)等書(shū)籍。Nevin Thompson把Yukihiro Matsumoto編寫的第29章內(nèi)容,把代碼當(dāng)作文章,從日文翻譯到英文。他的客戶包括日本最大的電視網(wǎng)絡(luò),以及Technorati Japan公司和Creative Commons組織。Henry S. Warren, Jr.在IBM工作了45年,他歷經(jīng)了從IBM 704到PowerPC的發(fā)展過(guò)程。他參與過(guò)多個(gè)軍方指揮與控制系統(tǒng)的開(kāi)發(fā)工作,在紐約大學(xué)Jack Schwartz教授指導(dǎo)下從事SETL項(xiàng)目。從1973年起,他在IBM研究部門工作,主要方向?yàn)榫幾g器和計(jì)算機(jī)架構(gòu)。Hank目前正在參與Blue Gene Petaflop超級(jí)計(jì)算機(jī)項(xiàng)目。他在紐約大學(xué)克朗數(shù)學(xué)研究所獲得了計(jì)算機(jī)博士學(xué)位。他是《Hacker's Delight》(Addison-Wesley出版社)一書(shū)的作者。Laura Wingerd多年Sybase和Ingres的數(shù)據(jù)庫(kù)產(chǎn)品開(kāi)發(fā)工作形成了她早期對(duì)軟件配置管理的觀點(diǎn)。她在Perforce軟件公司創(chuàng)建之初就加盟了這家公司,并且從她給Perforce客戶的建議中獲得了大量的SCM經(jīng)驗(yàn)。她編寫了《Practical Perforce》(O'Reilly出版社)一書(shū)以及許多與SCM相關(guān)的白皮書(shū)。她在Google的技術(shù)演講The Flow of Change中首次露面。Laura現(xiàn)在是Perforce 軟件公司產(chǎn)品技術(shù)部的副主管,主要負(fù)責(zé)推動(dòng)合理的SCM流程以及研究新的并且更好的Perforce使用方式。Greg Wilson在愛(ài)丁堡大學(xué)獲得了計(jì)算機(jī)科學(xué)博士學(xué)位,他的研究領(lǐng)域包括高性能科學(xué)計(jì)算,數(shù)據(jù)虛擬化以及計(jì)算機(jī)安全。他現(xiàn)在是多倫多大學(xué)計(jì)算機(jī)科學(xué)系的一位副教授,并且是《Dr. Dobb's Journal》雜志的特約編輯。Andreas Zeller于1991年畢業(yè)于德國(guó)達(dá)姆斯塔特理工大學(xué),并于1997年在不倫瑞克理工大學(xué)獲得計(jì)算機(jī)科學(xué)博士學(xué)位。2001年以來(lái),他一直在德國(guó)薩爾蘭登大學(xué)的計(jì)算機(jī)科學(xué)系擔(dān)任教授。Zeller主要研究大型程序以及它們的發(fā)展歷史,他開(kāi)發(fā)了大量的方法來(lái)分析在開(kāi)源軟件以及IBM、Microsoft、SAP以及其他公司的商業(yè)軟件中失敗的原因。他編寫的《Why Programs Fail: A Guide to Systematic Debugging》(Morgan Kaufmann出版社)獲得了《Software Development Magazine》雜志2006年度的Productivity大獎(jiǎng)。

媒體關(guān)注與評(píng)論

這是一本獨(dú)特的書(shū)。  其英文封面上本應(yīng)寫著作者的位置寫的卻是“Edited by Andy Oram and Greg Wilson”。Edited?!那作者呢?  實(shí)際上,這本書(shū)有33位作者!  現(xiàn)在你知道為什么封面上不列作者了吧?一,列不下。二,也是更重要的,每位作者都是一個(gè)領(lǐng)域的大牛,怎么排列?  每位作者都貢獻(xiàn)了一章內(nèi)容,所以本書(shū)一共有33章。這種做法帶來(lái)了三個(gè)重要的結(jié)果:  ? 每位作者都是大牛,所以每個(gè)人都知道自己在說(shuō)什么,絕無(wú)一個(gè)人寫整本書(shū)而導(dǎo)致的在某些不甚在行的地方語(yǔ)焉不詳?shù)那闆r。 ? 每位作者都將自己心目中對(duì)于“美麗的代碼”的認(rèn)識(shí)濃縮在一章當(dāng)中,張力十足。 ? 心理學(xué)上有一種說(shuō)法叫做聯(lián)合評(píng)估與單獨(dú)評(píng)估,即如果你單獨(dú)評(píng)估一樣?xùn)|西,是難以把握其好壞的,然而如果將它跟同類東西一比,就能夠作出更準(zhǔn)確的判斷。33位大牛,每個(gè)人對(duì)代碼之美都有自己獨(dú)特的認(rèn)識(shí),現(xiàn)在一覽無(wú)余的放在一起,對(duì)于熱愛(ài)程序的每個(gè)人都不啻一場(chǎng)盛宴。  當(dāng)初朋友介紹這本書(shū)給我的時(shí)候,我頓時(shí)產(chǎn)生了一種恍然大悟的錯(cuò)覺(jué):這才是我真正想讀的書(shū)的樣子啊,難道技術(shù)書(shū)籍本來(lái)不就應(yīng)該是這個(gè)樣子的嗎?就一個(gè)主題,讓幾十位領(lǐng)域大牛各抒己見(jiàn),簡(jiǎn)直完美符合了我內(nèi)心對(duì)“書(shū)”的定義。 而且,編程是計(jì)算機(jī)行業(yè)的核心活動(dòng),而代碼則是編程活動(dòng)的核心,代碼之美一直一來(lái)都是一個(gè)玄妙永恒的話題,如果讓我選一個(gè)主題來(lái)請(qǐng)教這些作者,我還真想不出比這更好的主題! 所以,我就迫不及待地把這本書(shū)介紹給了更多的朋友。 所以,我同樣也已經(jīng)迫不及待地想要告訴你,這本書(shū)的作者都有哪些人了:  Jon Bentley:久負(fù)盛名的《Programming Pearls》(《編程珠璣》)的作者。在斯坦福獲得學(xué)士學(xué)位,在北卡羅萊納獲得碩士和博士學(xué)位。繼而在卡內(nèi)基梅隆執(zhí)教6年。貝爾實(shí)驗(yàn)室前研究員,西點(diǎn)軍校和普林斯頓的訪問(wèn)教授。 Brian Kernighan:C語(yǔ)言圣經(jīng)K&R C(《C程序設(shè)計(jì)語(yǔ)言》)和《程序設(shè)計(jì)實(shí)踐》兩本不朽著作的作者,他的書(shū)被翻譯成近30種不同的語(yǔ)言。Charles Petzold:經(jīng)典的《Windows程序設(shè)計(jì)》影響了整整一代程序員,被奉為Windows編程圣經(jīng)。而他的另一本經(jīng)典著作《編碼的奧秘》則另辟蹊徑,由淺入深地將計(jì)算機(jī)最深層的奧秘娓娓道來(lái)。Tim Bray:XML創(chuàng)始人之一。 Yukihiro "Matz" Matsumoto:Ruby之父。 Douglas C. Schmidt:著名的C++跨平臺(tái)開(kāi)源框架ACE的設(shè)計(jì)者,《C++網(wǎng)絡(luò)編程》卷I,卷II的作者。 Jeff Dean:天才架構(gòu)師,Google大型并發(fā)編程框架Map/Reduce作者。Diomidis Spinellis:兩屆Jolt大獎(jiǎng)獲主,分別以《Code Reading》和《Code Quality》獲2004 和2007年的Jolt大獎(jiǎng)。 Simon Peyton Jones:Haskell語(yǔ)言核心人物之一,并領(lǐng)導(dǎo)設(shè)計(jì)了著名的Haskell編譯器GHC。Douglas Crockford:JSON發(fā)明者,Javascript領(lǐng)域大牛,寫了廣為流傳的《Javascript,世界上最被誤解的語(yǔ)言》。 Bryan Cantrill:著名的DTrace的作者之一;之前是Sun杰出工程師,主要工作領(lǐng)域?yàn)镾olaris內(nèi)核開(kāi)發(fā)... Greg Kroah-Hartman:目前的Linux內(nèi)核維護(hù)者,經(jīng)典的《Linux Device Drivers》的作者。 Andreas Zeller:大名鼎鼎的GNU DDD可視化調(diào)試器的作者,著作《Why Programs Fail》獲得2006年Jolt生產(chǎn)效率大獎(jiǎng)。Sanjay Ghemawat:大規(guī)模分布式文件系統(tǒng)Google FileSystem(GFS)的主要作者(GFS是Google的基石之一),同時(shí)也是Google Map/Reduce以及Google BigTable的作者之一。 ...(一個(gè)完整的作者列表見(jiàn)于書(shū)后)  如今這些如雷貫耳的名字居然出現(xiàn)在同一本書(shū)中,怎能不令人興奮?!  你是程序員嗎?你對(duì)代碼之美的認(rèn)識(shí)是什么?33位作者,33個(gè)來(lái)自不同開(kāi)發(fā)領(lǐng)域的專業(yè)經(jīng)驗(yàn),33種不同的意見(jiàn)。你想知道牛人們對(duì)代碼之美是怎么想的嗎?  其實(shí),這本書(shū)最奇妙的地方還不在于這一點(diǎn),而在于,如果你知道這些作者的名字,你肯定會(huì)忍不住去看一看。如果你不知道這些作者的名字,你更加會(huì)忍不住去看一看。因?yàn)槟阒肋@些人的觀點(diǎn)肯定不會(huì)讓你失望! 最后,還有一個(gè)更大的好消息, Oreilly出版社表示還會(huì)繼續(xù)出書(shū)的第二版,邀請(qǐng)更多的牛人! 其實(shí),“Beautiful Team”還有另一個(gè)含義:我們有一個(gè)漂亮的翻譯團(tuán)隊(duì);此外團(tuán)隊(duì)組建的過(guò)程也很是有趣。在此就留一個(gè)懸念,稍后會(huì)公布:-)

編輯推薦

38位大師級(jí)的程序員,一步步講解他們的項(xiàng)目架構(gòu),開(kāi)發(fā)時(shí)的種種折中考慮(tradeoffs)以及何時(shí)必須打破常規(guī),尋求突破。全球38位頂尖高手、眾多語(yǔ)言之父經(jīng)典之作《代碼之美》,9月22s日全國(guó)首映

圖書(shū)封面

圖書(shū)標(biāo)簽Tags

無(wú)

評(píng)論、評(píng)分、閱讀與下載


    代碼之美 PDF格式下載


用戶評(píng)論 (總計(jì)27條)

 
 

  •   圖書(shū)好壞,我沒(méi)有看完不知道。但圖片印刷質(zhì)量太差了,從第一頁(yè)都快能看到第二頁(yè)的內(nèi)容了。我同時(shí)買了兩本書(shū),先拿了一本“代碼之美”,一看,紙張好差,而且充滿了難聞的印刷味,再翻一本”設(shè)計(jì)模式”,紙張很差很透明,我有點(diǎn)小氣憤,一看,竟然都是“機(jī)械工業(yè)出版社”。買書(shū)的同道們請(qǐng)注意了,請(qǐng)留意你的書(shū)是否是“機(jī)械工業(yè)出版社”,不然再好的書(shū),由于印刷質(zhì)量問(wèn)題,閱讀效果會(huì)大打折扣。請(qǐng)“卓越”將此信息反饋給“機(jī)械工業(yè)出版社”,因?yàn)檫@可能會(huì)大大影響你們的銷量。
  •   書(shū)不錯(cuò)。在此譴責(zé)的是推薦序的作者們,為了讓自己出名,在一本好書(shū)的前面加入太多無(wú)關(guān)痛癢的廢話--共15頁(yè)。為了加入自己的私貨而不惜犧牲讀者的利益(增加了本書(shū)的出版成本),實(shí)在是前所未有的無(wú)恥。
  •   缺點(diǎn)是出版商有點(diǎn)BT,序言太多了,我不得不在目錄那頁(yè)夾一個(gè)標(biāo)簽。注意:本書(shū)雖然是文集,但每個(gè)案例討論得都很深入,需要靜下心來(lái)研讀,不適合日常翻閱。
  •   我中學(xué)時(shí)有位老師說(shuō),如果買一本書(shū),里面有10%對(duì)你有用,那就應(yīng)該知足?!洞a之美》的內(nèi)容可謂五花八門,各個(gè)領(lǐng)域的大牛都來(lái)湊熱鬧寫一段,所以想要50%以上的內(nèi)容都看出味道來(lái)是不大容易的事。不過(guò)每一章節(jié)都是值得細(xì)讀推敲的佳作,因?yàn)槲覀冃枰牟⒉粌H僅是看看正則表達(dá)式如何用C代碼進(jìn)行解析,SVN的接口設(shè)計(jì)怎樣,或者XML的解釋器究竟長(zhǎng)個(gè)什么樣子。我們最需要的是知道這些頂尖大牛在當(dāng)初設(shè)計(jì)這些漂亮程序的時(shí)候,腦子里究竟是如何思考的,以圖借鑒一點(diǎn)點(diǎn)他們的感覺(jué);或者對(duì)這些雜七雜八的領(lǐng)域的代碼實(shí)現(xiàn)有所參考,以融會(huì)貫通,當(dāng)然這是很不容易做到的。缺陷也很明顯,紙張非常的挫。以至于我?guī)讉€(gè)同學(xué)翻過(guò)之后都嘲笑我那么貴的價(jià)錢買了本爛書(shū),不過(guò)我卻因此而非常高興,因?yàn)槲也⒉幌M腥硕纪乙粯诱J(rèn)識(shí)到這本書(shū)的價(jià)值。
  •   前面那堆序,太煞風(fēng)景早知道買影印了
  •   紙質(zhì)感覺(jué)跟盜版書(shū)的有得比.如果重視書(shū)質(zhì)量和手感的同學(xué)請(qǐng)多考慮..
  •   本網(wǎng)站這本書(shū)的圖片鏈接有誤,作者也不對(duì),想買不敢買,希望網(wǎng)站管理人員及時(shí)修改,謝謝。
  •   封面、作者信息錯(cuò)誤,請(qǐng)求更正?。。?!
  •   我是初學(xué)者,買了后挺后悔.應(yīng)該有了一定經(jīng)驗(yàn)再看.所以這本書(shū)將會(huì)在我的書(shū)架上吸塵多年后才會(huì)發(fā)出應(yīng)該有的光彩....
  •   說(shuō)得那么好,還以為是本經(jīng)典呢。結(jié)果只是一個(gè)技術(shù)編輯以“美麗的代碼”為主題向許多(很牛的和較牛的)程序員約稿而成的很散的文集。各篇章之間沒(méi)任何聯(lián)系,完全不成系統(tǒng)。有的講如何用一段非常簡(jiǎn)潔的代碼實(shí)現(xiàn)基本的正則表達(dá)式匹配功能,有的講REST式Web服務(wù)的實(shí)現(xiàn)問(wèn)題…… 雖然其中不乏一些很牛的程序員的經(jīng)驗(yàn)和靈感,但有些比較乏味。 另外,在現(xiàn)在企業(yè)里高度重視軟件工程方法的時(shí)代,對(duì)那些損害軟件工程原則的簡(jiǎn)潔、精巧的強(qiáng)調(diào)會(huì)誤導(dǎo)讀者的。 無(wú)論如何,雖然我才看了不多的幾章,但相信這本書(shū)遠(yuǎn)遠(yuǎn)算不上經(jīng)典。搞不懂怎么請(qǐng)到那么多國(guó)內(nèi)業(yè)界名人來(lái)寫序。
  •   一直很想讀的一本書(shū)。非常滿意!
  •   過(guò)去買的了,不是特別實(shí)用
  •   幾年前買的書(shū)了,之后沒(méi)再卓越上買過(guò)東西,今天無(wú)意中在這買了洗面奶,才發(fā)現(xiàn)原來(lái)自己買過(guò)這本書(shū),當(dāng)時(shí)是買了送人的
  •   對(duì)卓越的服務(wù)很滿意。書(shū)非常好,看完了第一章,很精彩。但是正文第二頁(yè)就有一個(gè)明顯的錯(cuò)誤,grep寫成了grpe,很不爽。出版社要對(duì)錯(cuò)誤負(fù)責(zé)
  •   非常激動(dòng)人心的作品,還沒(méi)有讀完,已經(jīng)被深深吸引了,相見(jiàn)恨晚。
  •   送過(guò)來(lái)還以為是舊書(shū),紙張也很差,完全不值這么多錢啊……
  •   買了很久了,還沒(méi)看!
  •   這種書(shū)一定要買原版的來(lái)讀呀
  •   兩三天后就到了,很好,比書(shū)店的都要新。翻看了許多章,感受著大師的思維,很多東西不能一時(shí)領(lǐng)悟,需要慢慢的想,就如同排序一章如何用二分來(lái)替代hash我至今沒(méi)想通,文章有很多很有感覺(jué),剖析也比較到位,有的確實(shí)離自己太遠(yuǎn),無(wú)法進(jìn)入?,F(xiàn)在事情比較多,無(wú)法細(xì)看。
  •   整體還不錯(cuò)。有些零散的東西,可以被書(shū)中的某些題目整理一下。
  •   經(jīng)典中的經(jīng)典歌
  •   碼農(nóng)必備,書(shū)在人在
  •   介紹人類在一個(gè)奮斗領(lǐng)域中的創(chuàng)造性和靈活性
  •   內(nèi)容不錯(cuò),應(yīng)該對(duì)我有幫助
  •   看到那么多的作者
  •   據(jù)說(shuō)很經(jīng)典,買來(lái)看看!?。。。。。?/li>
  •   代碼之美
 

250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7