代碼之美

代碼之美

《代碼之美》是2009年機械工業出版社出版的圖書,作者是(美)奧萊姆(Oram,A),(美)維爾森(Wilson,G)。

基本信息

內容簡介

主要講述了計算機系統的開發領域。在每章中的漂亮代碼都是來自獨特解決方案的發現,而這種發現是來源於作者超越既定邊界的遠見卓識,並且識別出被多數人忽視的需求以及找出令人嘆為觀止的問題解決方案。

本書介紹了人類在一個奮鬥領域中的創造性和靈活性:計算機系統的開發領域。在每章中的漂亮代碼都是來自獨特解決方案的發現,而這種發現是來源於作者超越既定邊界的遠見卓識,並且識別出被多數人忽視的需求以及找出令人嘆為觀止的問題解決方案。

本書33章,有33位作者,每位作者貢獻一章。每位作者都將自己心目中對於“美麗的代碼”的認識濃縮在一章當中,張力十足。33位大師,每個人對代碼之美都 有自己獨特的認識,現在一覽無餘的放在一起,對於熱愛程式的每個人都不啻一場盛宴。 雖然本書的涉獵範圍很廣,但也只能代表一小部分在這個軟體開發這個最令人興奮領域所發生的事情 。

編輯推薦

38位大師級的程式設計師,一步步講解他們的項目架構,開發時的種種折中考慮(tradeoffs)以及何時必須打破常規,尋求突破。

全球38位頂尖高手、眾多語言之父經典之作。

本書收錄的是軟體設計領域中的一組大師級作品。每一章都是由一位或幾位著名程式設計師針對某個問題給出的完美的解決方案,並且細述了這些解決方案的巧妙之處。

本書既不是一本關於設計模式的書,也不是一本關於軟體工程的書,它告訴你的不僅僅是一些正確的方式或者錯誤的方式。它讓你站在那些優秀軟體設計師的肩膀上,從他們的角度來看待問題。

本書給出了38位大師級程式設計師在項目設計中的思路、在開發工作中的權衡,以及一些打破成規的決策。

作者簡介

John Bentley是美國Avaya實驗室的一位計算機科學家。他的研究領域包括編程技術、算法設計以及軟體工具與界面設計。他已編寫了數本關於編程的書籍, 還撰寫了大量的文章,主題涉及從算法理論到軟體工程的各個方向。他於1974年在史丹福大學獲得學士學位,並於1974年獲得碩士學位以及於1976年在 北卡羅來納大學獲得博士學位,隨後在卡耐基-梅隆大學任教6年,教授計算機科學。1982年他加入貝爾實驗室,並於2001年離開貝爾實驗室並加入 Avaya實驗室。他曾是西點軍校和普林斯頓大學的訪問教授、曾經參與開發過軟體工具、電話交換機、電話以及網路服務。

Tim Bray於1987-1989年間在加拿大的安大略省滑鐵盧大學負責牛津英語詞典項目,1989年與他人聯合創建了Open Text公司,在1995年啟動了最早的公共網頁搜尋引擎之一,在1996至1999年間與他人共同發明了XML 1.0併合作編寫了

《Namespaces in XML》規範,在1999年他創建了Antarctica Systems公司,並於2002-2004年被Tim Berners-Lee任命在W3C技術架構組中工作。目前,他在Sun Microsystems公司Web Technologies部門任主管,他有一個很受歡迎的部落格,並且參與主持IETF AtomPub工作組。

Bryan Cantrill是Sun Microsystems公司的一位傑出的工程師,在他的職業生涯中主要從事Solaris核心的開發。最近他與同事Mike Shapiro和Adam Leventhal一起設計並實現了DTrace,這是一個用於產品系統動態控制的工具,獲得了《華爾街日報》2006年度的最高創新獎。

Douglas Crockford畢業於公立學校。他是一位登記選民,擁有自己的汽車。他曾開發過辦公自動化系統。他曾在Atari公司從事過遊戲和音樂研究。他曾是 Lucasfilm有限公司技術部門的主管,以及Paramount公司New Media部門的主管。他創建了Electric Communities公司並且擔任CEO。他還是State 軟體公司的創建者和CTO,正是在這個公司中他發明了JSON數據格式。他現在是Yahoo!公司的一位架構師。

Rogerio Atem de Carvalho是巴西校園技術教育聯合中心(Federal Center for Technological Education of Campos,CEFET Campos)的一位教師兼研究人員。他在奧地利的維也納獲得了2006年度IFIP傑出學術領導獎(Distinguished Academic Leadership Award),以表彰他在免費/開源企業資源計畫(ERP)上所做的研究工作。他的研究領域還包括決策支持系統和軟體工程。

Jeff Dean於1999年加入Google,目前是Google系統架構小組的成員。他在Google主要負責開發Google的網頁抓取、索引、查詢服務以 及廣告系統等,他對搜尋質量實現了多次改進,並實現了Google分散式計算架構的多個部分。在加入Google之前,他工作於DEC/Compaq的 Western實驗室,主要從事軟體分析工具、微處理器架構以及信息檢索等方面的研究。他於1996年在華盛頓大學獲得了博士學位,與Craig Chambers一起從事面向對象語言的編譯器最佳化技術方面的研究。在畢業之前,他還在世界衛生組織的愛滋病全球規劃署工作過。

Jack Dongarra於1972年在芝加哥大學獲得數學學士學位,並於1973年在伊利諾理工大學獲得計算機科學碩士學位,又於1980年在新墨西哥大學獲得 套用數學博士學位。他在美國阿貢國家實驗室(Argonne National Laboratory)一直工作到1989年,並成為了一名著名科學家。他現在被任命為田納西大學計算機科學系的計算機科學傑出教授。他是美國橡樹嶺國家 實驗室(Oak Ridge National Laboratory ,ORNL)計算機科學與數學部的傑出的研究人員,曼徹斯特大學計算機科學與數學學院的Turing Fellow,美國萊斯大學計算機科學系的副教授。他的研究領域包括線性代數中的數值算法,並行計算,高級計算機架構的套用,程式設計方法學以及用於並行 計算機的工具。他的研究工作包括開發、測試高質量的數學軟體以及整理相關文檔。他在以下開源軟體包和系統的設計及實現上做出了貢獻:ISPACK, LINPACK, the BLAS, LAPACK, ScaLAPACK, Netlib, PVM, MPI, NetSolve, Top500, ATLAS, 和 PAPI。他公開發表了大約200篇文章、論文、報告以及技術備忘錄,還參與編寫了數本著作。他於2004年獲得了IEEE Sid Fernbach獎,以表彰他在高性能計算機的套用中使用了創新的方法。他不僅是AAAS,ACM和IEEE的成員,還是美國工程院的院士。

R. Kent Dybvig是印第安納大學計算機科學系的一位教授。在印第安納大學任教兩年之後,他於1987年在北卡羅來納大學獲得了博士學位。他在設計和實現編程語 言的研究上做出了重要的貢獻,包括控制運算符、句法抽象、程式分析、編譯器最佳化、暫存器分配、多執行緒以及自動存儲管理等。在1984年,他創建了Chez Scheme軟體並一直是主要的開發人員。Chez Scheme的特點在於快速的編譯時間、可靠性以及能夠高效地運行記憶體需求巨大的複雜程式,它已經被用於構建企業集成、網頁服務、虛擬現實、機器人藥品抽 檢、電路設計以及其他的商業系統。它還可以用於各種層次的計算機教育以及許多其他領域中的研究。Dybvig是《The Scheme Programming Language, Third Edition》(MIT Press出版社)一書的作者,以及即將發布的“Revised6 Report on Scheme”文檔的編輯。

Michael Feathers是Object Mentor 公司的顧問。在過去七年間,他一直活躍於Agile社群,他的工作主要是與世界各地不同的團隊合作,培訓以及指導。在加入Object Mentor公司之前,Michael設計過一種程式語言,並為這種語言寫了一個編譯器。他還設計了一個龐大的多平台類庫以及用於控制的框架。 Michael開發了CppUnit,也就是最初把JUnit移植到C++;以及FitCpp,也就是把FIT移植到C++。在2005年, Michael編寫了《Working Effectively with Legacy Code》(Prentice Hall出版社)一書。在與各個團隊合作的間隙,他的大多數時間都花在研究大型代碼庫中的設計修改方式方面。

1995年,Karl Fogel和Jim Blandy一起創建了Cyclic軟體公司,這是第一個提供商業CVS支持的公司。1997年,Karl增加了對CVS匿名唯讀存儲倉庫訪問的支持,這 樣就可以更方便地訪問開源項目中的開發代碼。1999年,他工作於CollabNet公司,主要從事管理Subversion的創建和開發工作,這是 CollabNet公司和一群開源志願者們從頭開始編寫的開源版本控制系統。2005年,他編寫了《Producing Open Source Software: How to Run a Successful Free Software Project 》(O'Reilly出版社;在http://producingoss.com上有在線上版本) 一書。2006年,他在Google擔任了短期的開源技術專家之後離開Google並成為了Question-Copyright.org網站的全職編 輯。他目前仍然參與了多個開源項目,包括Subversion和GNU Emacs。

Sanjay Ghemawat是一位Google Fellow,工作於Google的系統架構小組。他設計並實現了分散式的存儲系統,文本索引系統,性能分析工具,一種數據表示語言,一個RPC系統,一 個malloc函式實現以及許多其他的庫。在加入Google之前,他是DEC系統研究中心的一位研究人員,主要從事系統性能分析和最佳化Java編譯器的 工作,他還實現了一個Java虛擬機。他於1995年在麻省理工大學獲得博士學位,研究領域為面向對象資料庫的實現。

Ashish Gulhati是網際網路隱私服務Neomailbox的首席開發員,以及Cryptonite的開發員,這是一個支持OpenPGP協定的安全網頁郵件系 統。他有著15年的商業軟體開發經驗,是印度最早的數字著作權活動家之一和F/OSS程式設計師,他編寫了大量的開源Perl模組,這些模組可以從CPAN上下 載。在1993~1994年間,他在《PC Quest》和《DataQuest》等雜誌上發表了大量文章,這是在印度主流計算機刊物中最早向讀者介紹自由軟體,GNU/ Linux,Web和Internet的文章,在這些文章發表多年以後,印度才擁有了商業的網際網路訪問,這些文章還構成了PC Quest Linux Initiative活動的重要組成部分,這個活動促使自1995年以來,在印度分發了一百萬份Linux光碟。在獲得了一組可穿戴的計算機後,他很快地 成為了一個電子人。

Elliotte Rusty Harold是紐奧良人,他會定期返回紐奧良去吃一大碗海鮮乾波湯(Gumbo)。不過,他目前住在布魯克林附近的Prospect Heights,和他生活在一起還有他的妻子Beth,狗Shayna,和兩隻貓Charm(以夸克命名)和Marjorie(以他的岳母命名)。他是紐 約科技大學的一位副教授,主要講授Java、XML以及面向對象編程。他的Cafe au Lait網站是網際網路上最流行的獨立Java網站之一;他的另一個網站Cafe con Leche 則成為了最流行XML站點之一。他編寫的書籍包括《Java I/O》,《Java Network Programming》和《XML in a Nutshell》(這三本書都由O'Reilly出版社出版),以及XML Bible (Wiley出版社)。他目前的研究領域包括用Java來處理XML的XOM庫、Jaxen XPath引擎以及Amateur媒體播放器。

Brian Hayes為《American Scientist》雜誌編寫計算機專欄,他還擁有一個部落格。過去,他還為《Scientific American》、《Computer Language》、 以及《The Sciences》等雜誌編寫過類似的專欄。他編寫的《Infrastructure: A Field Guide to the Industrial Landscape》(Norton出版社)一書於2005年發行。

Simon Peyton Jones,碩士,於1980年畢業於劍橋大學三一學院。在工作兩年後,他在倫敦大學學院擔任了7年的講師,然後在格拉斯哥大學擔任了9年的教授,後來於 1998年加入微軟研究中心。他的研究領域包括函式式程式語言及其實現和套用。他領導了一系列的研究項目,主要研究用於單處理器機器和並行機的高質量函式 式語言系統的設計和實現。他是函式式語言Haskell的主要設計者,此外他還是被廣泛套用的Glasgow Haskell編譯器(GHC)首席設計師。他還編寫了兩本關於函式式語言實現的教科書。

Jim Kent是加利福尼亞大學聖克魯茲分校基因信息小組(Genome Bioinformatics Group)的一位研究學家。Jim從1983年起就開始編程。在職業生涯的前半段,他主要從事繪畫和動畫軟體的開發,他開發了Aegis Animator、 Cyber Paint以及 Autodesk Animator等獲獎軟體。1996年,由於厭倦了基於Windows API的開發工作,他決定在生物學上追求他的興趣,並於2002年獲得了博士學位。在研究生期間,他編寫GigAssembler——這個程式計算出了第 一批人類基因組——比Celera公司發布的第一批基因組提前了一天,從而使得這批基因組成為免費的專利並且避免了其他的法律問題。Jim發表了40餘篇 科學論文。他目前的研究工作主要是編寫程式,資料庫和網站以幫助科學家分析和了解基因組。

Brian Kernighan於1964年在多倫多大學獲得學士學位,並於1969年在普林斯頓大學獲得電子工程博士學位。他在貝爾實驗室的計算科學研究中心一直工 作到2000年,目前就職於普林斯頓大學的計算機科學系。他編寫了8本著作以及大量的技術論文,並擁有4項專利。他的研究領域包括程式語言、工具、為非專 業用戶設計易用的計算機操作界面等。他還致力於非技術讀者的技術教育工作。

Adam Kolawa是Parasoft公司的創建者之一和CEO,這家公司是自動錯誤預防(Automated Error Prevention ,AEP)解決方案的領先提供商。Kolawa有著多年在各種軟體開發流程中的經驗,這使得他對高科技企業有著獨特的視野,以及成功辨識技術潮流的非凡能 力。因此,他策劃了幾個成功商業軟體產品的開發過程來滿足在提高軟體質量中不斷增長的工業需求——經常在這種潮流被廣泛接受之前。Kolawa參與編寫了 《Bulletproofing Web Applications》(Hungry Minds出版社)一書,他還撰寫了100餘篇評論和技術文章,發表在《The Wall Street Journal》、《CIO》、《Computerworld》、《Dr. Dobb's Journal》以及《IEEE Computer》等期刊上。此外,他還撰寫了大量關於物理學和並行處理方面的科學論文。他現在的簽約媒體包括CNN、 CNBC、 BBC和NPR。Kolawa擁有加利福尼亞理工大學理論物理博士學位,並擁有10項專利發明。2001年,Kolawa獲得了軟體類別的Los Angeles Ernst & Young's Entrepreneur of the Year獎項。

Greg Kroah-Hartman是目前Linux核心的維護人員,負責多個驅動程式子系統以及驅動程式核心、sysfs、 kobject、 kref和debugfs等代碼。他還為啟動linux-hotplug 和 udev等項目提供了幫助,是核心穩定維護團隊中的重要人員。他編寫了《Linux Kernel in a Nutshell》(O'Reilly出版社),並參與編寫了《Linux Device Drivers, Third Edition》(O'Reilly出版社)。

Andrew Kuchling有著11年的軟體工程師經驗,他是Python開發群體中的長期成員。他的一些與Python相關的工作包括編寫和維護數個標準的庫模 塊,編寫一系列的“What's new in Python 2.x”文章以及其他一些文檔,策劃了2006年和2007年的PyCon會議,並是Python軟體基金會的主管。Andrew於1995年畢業於麥吉 爾大學並獲得計算機科學學士學位。

Piotr Luszczek畢業於波蘭克拉科夫礦業與冶金大學,並獲得碩士學位,他的研究領域是並行的核外(out-of-core)庫。他將稠密矩陣計算核套用於 稀疏矩陣直接求解算法和疊代數值線性幾何算法中的創新研究使他獲得了博士學位。他把這種思想用來開發使用核外技術容錯庫。目前,他是田納西大學諾克斯維爾 分校的一位研究教授。他的研究工作包括大型超級計算機安裝的標準化評價。他開發了一個自適應的軟體庫,能夠自動選擇最優的算法來有效地利用現有硬體以及有 選擇地處理輸入數據。他還感興趣於高性能程式語言的設計和實現。

Ronald Mak是高級計算機科學研究所(Research Institute for Advanced Computer Science)的一位資深科學家,在NASA Ames研究中心工作時,他是協同信息系統(Collaborative Information Portal,CIP)的架構師和首席開發人員。在漫步者登錄火星之後,他分別在JPL和Ames對探測任務提供支持。然後,他獲得了加利福尼亞大學聖克 魯茲分校的學術任命,並且他再次與NASA簽約,這次的工作是設計幫助太空人返回月球的企業軟體。Ron是Willard & Lowe Systems公司的創建人之一和CTO,這是一個針對企業信息管理系統的諮詢公司。他編寫了 數本關於計算機軟體的書籍,他在史丹福大學分別獲得了數學科學學位和計算機科學學位。

Yukihiro "Matz" Matsumoto是一位程式設計師,他是一位日本籍的開源倡導者,他發明了最近非常流行的Ruby語言。他從1993年開始研發Ruby,這和Java語言 一樣久遠。現在他工作於日本Network Applied Communication Laboratory(NaCl,網址為netlab.jp)公司,該公司從1997年起開始贊助Ruby的開發。因為他的真實姓名太長而難以記住,並且 對於非日本的演講者來說難以發音,因此在網上他使用了暱稱Matz。

Arun Mehta是一位電子工程師和計算機科學家,他曾在印度、美國和德國進行過研究和教學工作。他是印度早期計算機活動家,他努力實現了一些方便消費者 (consumer-friendly)的政策,以幫助把現代通信延伸到偏遠地區和貧困地區。他目前的研究領域包括農村無限通信以及幫助殘疾用戶的技術。 他是印度哈里亞納邦Radaur地區JMIT大學計算機工程系的教授和主任。

Rafael Manhaes Monnerat是CEFET CAMPOS的一位IT分析家,以及Nexedi SARL的海外顧問。他的研究領域包括免費/開源系統、ERP以及最新的程式語言。

Travis E. Oliphant於1995年在美國楊百翰大學獲得電子與計算機工程學士學位和數學學士學位,並於1996年在該校獲得電子與計算機工程碩士學位。他於 2001年在明尼蘇達羅切斯特的梅奧研究生院獲得了生物醫學工程博士學位。他是Python語言中科學計算庫SciPy和NumPy的主要編寫者。他的研 究領域包括顯微阻抗成像,異構領域中的MRI重構以及生物醫學逆問題。他目前是楊百翰大學電子與計算機工程的副教授。

Andy Oram是O'Reilly Media的編輯。他從1992年開始就在這家公司工作,Andy目前主要關注自由軟體和開源技術。他在O'Reilly的工作成果包括第一批Linux 系列叢書以及2001年的P2P系列叢書。他的編程技術和系統管理技術大多都是自學的。Andy還是Computer Professionals for Social Responsibility協會的成員並且經常在O'Reilly Network(http://oreillynet.com)和其他一些刊物上撰寫文章,這些文章的主題包括網際網路上的政策問題,以及影響技術創新的潮 流及其對社會的影響。

William R. Otte是田納西范德堡大學電子工程與計算機系(EECS)的一位博士研究生。他的研究領域是分散式實時嵌入(DRE)系統的中間件,目前從事CORBA 組件的部署和配置引擎(DAnCE)開發工作。這個工作主要研究運行時規劃技術,基於組件的應用程式的適應性,以及對應用程式服務質量和容錯需求的規範與 實施。在攻讀研究生之前,William於2005年在范德堡大學計算機系畢業並獲得學士學位,之後在軟體集成系統學院(ISIS)工作了一年。

Andrew Patzer是威斯康星大學醫學院生物信息系的主管。過去15年Andrew是一位軟體開發人員並且編寫了許多文章和書籍,包括 《Professional Java Server Programming》(Peer Information公司)和《JSP Examples and Best Practices》(Apress出版社)。Andrew目前的研究領域為生物信息領域,利用像Groovy這樣的動態語言來發掘大量有效的生物數據並 幫助科學研究人員進行分析。

Charles Petzold是一位自由作家,主要研究領域為Windows應用程式編程。他是《Programming Windows》(Microsoft Press出版社)的作者, 1988年至1999年之間共出版了五版,教育了整整一代程式設計師的Windows API編程技術。他最新的書籍包括《Applications = Code + Markup: A Guide to the Microsoft Windows Presentation Foundation》(Microsoft Press出版社),以及《Code: The Hidden Language of Computer Hardware and Software》(Microsoft Press出版社),在這本書中他對數位技術進行了獨特的研究。

T. V. Raman的研究領域包括網頁技術和聽覺用戶界面。在20世紀90年代初,在他的博士論文中介紹了音頻格式的概念,叫作AsTeR:Audio System For Technical Readings(技術讀物語音系統),這是一個為技術文檔生成高質量聽覺表示的系統。Emacspeak則將這些思想套用到更廣泛的計算機用戶界面領 域。Raman現在是Google的一位研究人員,主要研究Web應用程式。

Alberto Savoia是Agitar軟體公司的創建人之一和CTO。在創建Agitar之前,他是Google的高級工程主管;在這之前,他還是Sun Microsystems實驗室軟體研究中心的主管。Alberto的主要研究領域是軟體開發技術——尤其是那些幫助程式設計師在設計和開發階段進行測試和代 碼驗證的工具和技術。

Douglas C. Schmidt是田納西范德堡大學電子工程與計算機(EECS)系的一位教授,計算機科學與工程系的副主任,以及軟體集成系統學院(ISIS)的高級研究 人員。他是分散式計算模式和中間件框架方面的專家,並且已經發表了超過350篇的技術論文和9本書籍,內容涉及的主題很廣,包括高性能通信軟體系統,高速 網路協定並行處理,實時分散式對象計算,並發與分散式系統的面向對象模式,以及模型驅動的開發工具。在他的學術研究之外,Dr. Schmidt還是PrismTechnologies公司的CTO,並且在領導開發套用廣泛開源的中間件平台上有著15年的經驗,在這些平台上包含了豐 富的組件以及實現高性能分散式系統中核心模式的領域特定語言。Dr. Schmidt於1994年於加利福尼亞大學歐文分校獲得計算機科學博士學位。

Christopher Seiwald編寫了Perforce(一種軟體配置管理系統)、Jam(一種構建工具)和“漂亮代碼的七個要素”(本書的第32章,變動的代碼,正是從 這篇文章中提取出了有價值的思想)。在創建Perforce之前,他在Ingres公司管理網路開發小組,他花了數年時間來使得異步網路代碼看上去很漂 亮。現在他是Perforce軟體公司的CEO,並且仍然從事編碼工作。

Diomidis Spinellis是希臘雅典經濟與商業大學管理科學與技術系的副教授。他的研究領域包括軟體工程工具,程式語言和計算機安全。他在倫敦帝國理工大學獲得 了軟體工程碩士學位和計算機科學博士學位。他發表了超過100篇的技術論文,所涉及的領域包括軟體工程,信息安全以及普適計算。他還編寫了兩本開源方面的 書籍:《Code Reading 》(獲得2004年度Software Development Productivity獎)和《 Code Quality 》(這兩本書都由Addison-Wesley出版社出版)。他是IEEE Software編輯委員會的成員,主編“Tools of the Trade”專欄。Diomidis是一位FreeBSD提交者(Committer),並且編寫了許多開源軟體包、軟體庫以及工具。

Lincoln Stein是一位碩士/博士,他的研究領域為生物信息數據的集成與虛擬化。在從哈佛大學醫科學院畢業後,他在麻省理工大學Whitehead基因研究所工 作,開發用於老鼠和人類的基因圖譜資料庫。他在冷泉港實驗室開發了各種基因資料庫,包括WormBase,線蟲基因資料庫;Gramene,用於水稻和其 他單子葉植物的比較基因映射資料庫;國際Hap-Map項目資料庫;以及人類基因基礎資料庫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出版社)等書籍。

Nevin Thompson把Yukihiro Matsumoto編寫的第29章內容,把代碼當作文章,從日文翻譯到英文。他的客戶包括日本最大的電視網路,以及Technorati Japan公司和Creative Commons組織。

Henry S. Warren, Jr.在IBM工作了45年,他歷經了從IBM 704到PowerPC的發展過程。他參與過多個軍方指揮與控制系統的開發工作,在紐約大學Jack Schwartz教授指導下從事SETL項目。從1973年起,他在IBM研究部門工作,主要方向為編譯器和計算機架構。Hank目前正在參與Blue Gene Petaflop超級計算機項目。他在紐約大學克朗數學研究所獲得了計算機博士學位。他是《Hacker's Delight》(Addison-Wesley出版社)一書的作者。

Laura Wingerd多年Sybase和Ingres的資料庫產品開發工作形成了她早期對軟體配置管理的觀點。她在Perforce軟體公司創建之初就加盟了這 家公司,並且從她給Perforce客戶的建議中獲得了大量的SCM經驗。她編寫了《Practical Perforce》(O'Reilly出版社)一書以及許多與SCM相關的白皮書。她在Google的技術演講The Flow of Change中首次露面。Laura現在是Perforce 軟體公司產品技術部的副主管,主要負責推動合理的SCM流程以及研究新的並且更好的Perforce使用方式。

Greg Wilson在愛丁堡大學獲得了計算機科學博士學位,他的研究領域包括高性能科學計算,數據虛擬化以及計算機安全。他現在是多倫多大學計算機科學系的一位副教授,並且是《Dr. Dobb's Journal》雜誌的特約編輯。

Andreas Zeller於1991年畢業於德國達姆斯塔特理工大學,並於1997年在不倫瑞克理工大學獲得計算機科學博士學位。2001年以來,他一直在德國薩爾蘭 登大學的計算機科學系擔任教授。Zeller主要研究大型程式以及它們的發展歷史,他開發了大量的方法來分析在開源軟體以及IBM、Microsoft、 SAP以及其他公司的商業軟體中失敗的原因。他編寫的《Why Programs Fail: A Guide to Systematic Debugging》(Morgan Kaufmann出版社)獲得了《Software Development Magazine》雜誌2006年度的Productivity大獎。

作品目錄

第1章 正則表達式匹配器 。

1.1 編程實踐

1.2 實現

1.3 討論

1.4 其他的方法

1.5 構建

1.6 小結

第2章 Subversion中的增量編輯器:像本體一樣的接口

2.1 版本控制與目錄樹的轉換

2.2 表達目錄樹的差異

2.3 增量編輯器接口

2.4 但這是不是藝術?

2.5 像體育比賽一樣的抽象

2.6 結論

第3章 我編寫過的最漂亮代碼

3.1 我編寫過的最漂亮代碼

3.2事倍功半

3.3 觀點

3.4 本章的中心思想是什麼?

3.5 結論

3.6致謝

第4章 查找

4.1. 耗時

4.2. 問題:部落格數據

4.3. 問題:時間,人物,以及對象?

4.4. 大規模尺度的搜尋

4.5. 結論

第5章 正確、優美、迅速(按重要性排序):從設計XML驗證器中學到的經驗

5.1 XML驗證器的作用

5.2 問題所在

5.3 版本1:簡單的實現

5.4 版本2:模擬BNF語法——複雜度O(N)

5.5 版本3:第一個複雜度O(log N)的最佳化

5.6 版本4:第二次最佳化:避免重複驗證

5.7 版本5:第三次最佳化:複雜度 O(1)

5.8 版本 6:第四次最佳化:快取(Caching)

5.9 從故事中學到的

第6章 集成測試框架:脆弱之美

6.1. 三個類搞定一個驗收測試框架

6.2. 框架設計的挑戰

6.3. 開放式框架

6.4. 一個HTML解析器可以簡單到什麼程度?

6.5. 結論

第7章 美麗測試

7.1 討厭的二分查找

7.2 JUnit簡介

7.3將二分查找進行到底

7.4 結論

第8章 圖像處理中的即時代碼生成

第9章 自頂向下的運算符優先權

9.1. JavaScript

9.2. 符號表

9.3. 語素

9.4. 優先權

9.5. 表達式

9.6. 中置運算符

9.7. 前置操作符

9.8. 賦值運算符

9.9. 常數

9.10. Scope

9.11. 語句

9.12. 函式

9.13. 數組和對象字面量

9.14. 要做和要思考的事

第 10章 追求加速的種群計數

10.1. 基本方法

10.2. 分治法

10.3. 其他方法

10.4. 兩個字種群計數的和與差

10.5. 兩個字的種群計數比較

10.6. 數組中的1位種群計數

10.7. 套用

第11章 安全通信:自由的技術

11.1 項目啟動之前

11.2剖析安全通信的複雜性

11.3 可用性是關鍵要素

11.4 基礎

11.5 測試集

11.6 功能原型

11.7 清理,插入,繼續……

11.8 在喜馬拉雅山的開發工作

11.9 看不到的改動

11.10 速度確實重要

11.11 人權中的通信隱私

11.12 程式設計師與文明

第12章 在BioPerl里培育漂亮代碼

12.1. BioPerl和Bio::Graphics模組

12.2. Bio::Graphics的設計流程

12.3. 擴展Bio::Graphics

12.4. 結束語和教訓

第13章 基因排序器的設計

13.1 基因排序器的用戶界面

13.2 通過Web跟用戶保持對話

13.3. 多態的威力

13.4 濾除無關的基因

13.5 大規模美麗代碼理論

13.6 結論

第14章 優雅代碼隨硬體發展的演化

14.1. 計算機體系結構對矩陣算法的影響

14.2 一種基於分解的方法

14.3 一個簡單版本

14.4 LINPACK庫中的DGEFA子程式

14.5 LAPACK DGETRF

14.6遞歸LU

14.7 ScaLAPACK PDGETRF

14.8 針對多核系統的多執行緒設計

14.9 誤差分析與操作計數淺析

14.10 未來的研究方向

14.11 進一步閱讀

第15章 漂亮的設計會給你帶來長遠的好處

15.1. 對於漂亮代碼的個人看法

15.2. 對於CERN庫的介紹

15.3. 外在美(Outer Beauty)

15.4. 內在美(Inner Beauty )

15.5. 結論

第16章,Linux核心驅動模型:協作的好處

16.1 簡單的開始

16.2 進一步簡化

16.3 擴展到上千台設備

16.4 小對象的鬆散結合

第17章 額外的間接層

17.1. 從直接代碼操作到通過函式指針操作

17.2. 從函式參數到參數指針

17.3. 從檔案系統到檔案系統層

17.4. 從代碼到DSL(Domain-Specific Language)

17.5. 復用與分離

17.6.分層是永恆之道?

第18章 Python的字典類:如何打造全能戰士

18.1. 字典類的內部實現

18.2. 特殊調校

18.3. 衝突處理

18.4. 調整大小

18.5. 疊代和動態變化

18.6. 結論

18.7. 致謝

第19章 NumPy中的多維疊代器

19.1 N維數組操作中的關鍵挑戰

19.2 N維數組的記憶體模型

19.3NumPy疊代器的起源

19.4 疊代器的設計

19.5 疊代器的接口

19.6 疊代器的使用

19.7 結束語

第20章 NASA火星漫步者任務中的高可靠企業系統

20.1 任務與CIP

20.2 任務需求

20.3 系統架構

20.4 案例分析:流服務

20.5 可靠性

20.6 穩定性

20.7 結束語

第21章 ERP5:最大可適性的設計

21.1 ERP的總體目標

21.2 ERP5

21.3 Zope基礎平台

21.4 ERP5 Project中的概念

21.5 編碼實現ERP5 Project

21.6 結束語

第22章 一匙污水

第23章 MapReduce分散式編程

23.1 激動人心的示例

23.2 MapReduce編程模型

23.3 其他MapReduce示例

23.4 分散式MapReduce的一種實現

23.5 模型擴展

23.6 結論

23.7 進階閱讀

23.8 致謝

23.9 附錄:單詞計數解決方案

第24章 美麗的並發

24.2 軟體事務記憶體

24.3 聖誕老人問題

24.4 對Haskell的一些思考

24.6 致謝

第25章 句法抽象:syntax-case 展開器

25.1. syntax-case簡介

25.2. 展開算法

25.3. 例子

25.4. 結論

第26章 節省勞動的架構:一個面向對象的網路化軟體框架

26.1 示例程式:日誌服務

26.2 日誌伺服器框架的面向對象設計

26.3 實現串列化日誌伺服器

26.4 實現並行日誌伺服器

26.5 結論

第27章 以REST方式集成業務夥伴

27.1 項目背景

27.2 把服務開放給外部客戶

27.3 使用工廠模式轉發服務

27.4 用電子商務協定來交換數據

27.5 結束語

第28章 漂亮的調試

28.1 對調試器進行調試

28.2 系統化的過程

28.3 關於查找的問題

28.4 自動找出故障起因

28.5 增量調試

28.6 最小化輸入

28.7 查找缺陷

28.8 原型問題

28.9 結束語

28.10 致謝

28.11 進一步閱讀

第29章 把代碼當作文章

第30章 當你與世界的聯繫只有一個按鈕

30.1 基本的設計模型

30.2 輸入界面

30.3 用戶界面的效率

30.4 下載

30.5 未來的發展方向

第31章 Emacspeak:全功能音頻桌面

31.1 產生語音輸出

31.2 支持語音的Emacs

31.3 對於線上信息的簡單訪問

31.4 小結

31.5 致謝

第32章 變動的代碼

32.1 像書本一樣

32.2 功能相似的代碼在外觀上也保持相似

32.3 縮進帶來的危險

32.4 瀏覽代碼

32.5 我們使用的工具

32.6 DiffMerge的曲折歷史

32.7 結束語

32.8 致謝

32.9 進一步閱讀

第33章 為“The Book”編寫程式

33.1 沒有捷徑

33.2 給Lisp初學者的提示

33.3 三點共線

33.4 不可靠的斜率

33.5 三角不等性

33.6 河道彎曲模型

33.7 “Duh!”——我的意思是“Aha!”

33.8 結束語

33.9 進一步閱讀

後記

作者簡介

媒體評論

重新擦亮思考的火花

《代碼之美》這本書已經成為經典。關於它本身的讚美之辭已經不少了,不過到底從這本書里該讀些什麼東西,我倒是有些思考。

上世紀九十年代初期,當時正在加州大學埃爾文分校攻讀博士學位的Douglas Schmidt在觀察了他所參與的軟體項目開發實踐之後,得出一個結論,即未來的軟體開發將越來越多地體現為整合(integration),而不是傳統意義上的編程(programming)。換言之,被稱為 “軟體開發者” 的這個人群,將越來越明顯地分化:一部分人開發核心構件和基礎平台,而更多地人將主要是配置和整合現有構件以滿足客戶的需求,類似汽車、工具機和家用電器製造業的產業格局即將到來。面對這一前景,博士生Schmidt一方面寫文章對於其進步意義大加讚揚,另一方面毫不猶豫地投入到核心構件及平台的開發陣營中去。他很清楚,在這樣一種分工體系中,由於軟體整合產業很難出現壟斷局面,因此大多數利潤總是被截留在上游,人當然要往高處走,整合是好事,但他老兄寧可讓別人來做這個好事。

事實上,軟體產業中大多數看上去挺靠譜的預測都被歷史的發展無情地拋到垃圾堆里了,然而Schmidt博士生的這個預測卻驚人的準確,其後十幾年軟體工業的發展完美地印證了他當年的判斷。因此,他本人基於這一預測所選擇的人生道路也一帆風順。如今已經是教授的Douglas Schmidt先後創造了ACE、TAO、CIAO等一系列分散式計算基礎件,先後主導了美國學界和國防領域內若干重大科研與實際開發項目,稱為世人公認的分散式計算架構領導者。

拋開他個人的輝煌不說,“整合化”趨勢實際上已經深刻地改變了世界軟體工業的面貌,從而也影響了身為晚進者的我們的命運。如今大部分的程式設計師實際上是在整合與配置現有資源以滿足需求,而不是真正意義上的“編程”。這當然是一件好事,整契約樣需要深刻的洞察力和創新精神,優秀的整合者與天才的程式設計師一樣不可多得,甚至更加罕見。然而我們也不能不承認,大多數整合性的工作是機械的,簡單的,重複的,欠缺創意的,深入的思考往往不必要。因此,在這個整合為王的時代里,思考的精神在鈍化。更有甚者,網際網路和搜尋引擎的出現大大加速了這種鈍化,幾乎所有的問題都有人解決並且張貼在網際網路上了,因此獨自思考和解決問題已經成了不必要的、降低效率的行為,不但不時髦,而且不經濟。軟體開發迅速成為一個強調搜尋和短期記憶力的技能,我想這是50年前第一代程式設計師們做夢也沒有想到的。

老實講,就整體而言,我仍然認為這是一種進步。任何一個產業的成熟,無不伴隨著分工的明晰、技能的簡化和從業門檻的降低。與少數人享受思考樂趣的需求相比,大多數人享受便宜而無處不在的軟體服務的需求顯然遠為重要。但是,對於身處軟體行業中的個體來說,思考力的削弱和喪失卻是不折不扣的悲劇。這一點不必過多解釋,正在苦苦尋找自己核心競爭力的開發者們都知道我說的是什麼意思。幾年來對中國開發者社群的近距離觀察使我確信,儘管作為一個產業,中國軟體一直享受著比較快的成長,但是總體而言,中國的軟體開發者越來越迷惘、焦躁和不自信。這一情況當然是由多種原因導致的,但開發者們每念及此,多抱怨體制、產業、市場等身外之物,實在也有失偏頗。評心而論,這幾年中國軟體技術界的生存環境還是有了很大改善,對於那些真正出類拔萃的程式設計師來說,過上一種充實自信的生活並不困難。擺在每一個個體面前的主要問題還是在於能否出類拔萃,而這就需要我們重新找回思考的能力。具備強悍思考能力的人,也就具備強悍的解決問題的能力,而這樣的開發者永遠都是產業中的稀缺資源。

我認為這正是《代碼之美》這本書的一個重要價值。合作的諸位大師級作者,給我們一個很好的機會,讓我們能夠一邊閱讀,一邊思考,找回深思熟慮的智慧火花。這本書里所講的每一個問題,可以說都是程式設計師在工作中會遇到或者至少會擦邊的問題,既沒有故弄玄虛的文字遊戲,也沒有攜帶了領域知識的私貨,只有樸實而實際的一個個問題。雖然不是以提問的方式給出,但在整個閱讀的過程中,我們還是能夠找到很多機會與大師互動,不斷地發現問題和解決問題。我在閱讀中經常感到,看上去一個很簡單的問題,卻被這些大師們一層一層挖掘的如此深入,到最後階段不由得令人感到戰慄和震撼。看著這些智慧的光芒,我們不但可以領略大師之所謂稱為大師的秘密,而且也認識到思考的真諦。因此,千萬不要想看小說一樣一帶而過,那樣會錯過本書95%的價值!我們不是要閱讀這些文字,而是要與文字背後的作者交流學習,一點一點把自己的心得記下來,對於作者提出的新問題,先自己思考,直接寫程式嘗試,爭取跟上大師的思路,甚至可能需要反覆幾遍,才能真正讀通這本書。這樣的精力不會是白費的,讀者應當認識到,當我們擁有這本書的時候,我們獲得了怎樣寶貴的機會,可以在相對比較短的時間裡有效地提升自己的思考能力。這是一個機會,也是一次考驗,我絕對相信,通過了這次考驗的讀者,會在思考和解決問題的能力上有一個大的進步。

我希望自己能夠以這樣的態度讀這本了不起的書,以此文與其他讀者朋友共勉之。

——孟岩

相關詞條

熱門詞條

聯絡我們