代碼之美
目錄
《代碼之美》
  原 書 名" Beautiful Code
  叢 書 名 華章程序員書庫
  作 者: (美)奧萊姆(Oram,A),(美)維爾森(Wilson,G) 編;BC Group 譯
  出 版 社: 機械工業出版社
  出版時間: 2009-1-1
  版 次: 1
  頁 數: 599
  開 本: 16開
  印 次: 1
  紙 張: 膠版紙
  I S B N : 9787111251330
  包 裝: 平裝
  所屬分類: 圖書 >> 計算機/網絡 >> 程序設計 >> 其他
  定價:¥99.00
編輯推薦
  38位大師級的程序員,一步步講解他們的項目架構,開發時的種種折中考慮(tradeoffs)以及何時必須打破常規,尋求突破。
  全球38位頂尖高手、衆多語言之父經典之作。
  本書收錄的是軟件設計領域中的一組大師級作品。每一章都是由一位或幾位著名程序員針對某個問題給出的完美的解决方案,並且細述了這些解决方案的巧妙之處。
  本書既不是一本關於設計模式的書,也不是一本關於軟件工程的書,它告訴你的不僅僅是一些正確的方式或者錯誤的方式。它讓你站在那些優秀軟件設計師的肩膀上,從他們的角度來看待問題。
  本書給出了38位大師級程序員在項目設計中的思路、在開發工作中的權衡,以及一些打破成規的决策。
內容簡介
  本書介紹了人類在一個奮鬥領域中的創造性和靈活性:計算機係統的開發領域。在每章中的漂亮代碼都是來自獨特解决方案的發現,而這種發現是來源於作者超越既定邊界的遠見卓識,並且識別出被多數人忽視的需求以及找出令人嘆為觀止的問題解决方案。
  本 書33章,有33位作者,每位作者貢獻一章。每位作者都將自己心目中對於“美麗的代碼”的認識濃縮在一章當中,張力十足。33位大牛,每個人對代碼之美都 有自己獨特的認識,現在一覽無餘的放在一起,對於熱愛程序的每個人都不啻一場盛宴。 雖然本書的涉獵範圍很廣,但也衹能代表一小部分在這個軟件開發這個最令人興奮領域所發生的事情。
作者簡介
  Andy Oram
  《Beautiful Code》介紹了人類在一個奮鬥領域:計算機係統的開發領域中的創造性和靈活性。在每章中的漂亮代碼都來自獨特解决方案的發現,而這種發現來源於作者超越既定邊界的遠見卓識,並且識別出被多數人忽視的需求以及找出令人嘆為觀止的問題的解决方案。
  大多數作者都面臨着種種限製——包括物理環境,可用資源,或者特殊的需求定義——這些限製通常會使我們很難想象出解决方案。而其他一些作者則是在已經存在解决方案的領域中重新研究,並且提出新的觀點以及更好地實現某個功能。
  本書的所有作者都從他們的項目中獲得了一些經驗。不過在閱讀完本書後,我們同樣可以總結出一些更廣泛的經驗。
  首 先,在可靠和真實的規則能夠真正應用之前,需要進行多次嘗試。因為,人們在維護穩定性、可靠性以及其他軟件工程要求的標準時經常會遇到重重睏難。在這種情 況下,我們通常沒有必要拋棄支持這種承諾的原則。有時候,從另一個角度來思考問題或許能夠揭示一種新的方向,從而使我們在滿足需求的同時無需犧牲那些好的 技術。
  另一方面,在有些章節中強調了這條古老的原則:在打破原則之前,人們必須首先瞭解這個規則。有些作者在獲得一種不同的解决方案之前積纍了數十年的經驗——而正是這些經驗給了他們自信,從而以創造性的方式打破規則。
  此外,書中的一些經驗還提倡跨學科研究。許多作者都是在新的領域中進行研究並在黑暗中不斷探索。在這種情況下,全新的創造力和個人智慧將起到重要的作用。
  最後,我們從書中學到的漂亮的解决方案並不會持續很長時間。在新的環境中總會要求新的解决方式。因此,如果閱讀了本書並且認為,“無法在自己的任何一個項目上使用這些作者的解决方案”,那麽也不要擔心——這些作者在做下一個項目的時候,也會使用不同的解决方案。
  我在這本書上全身心地工作了兩個月,以幫助作者完善他們的主題和更好地表達他們的觀點。閱讀這些天才發明傢的文章的確令人鼓舞甚至是令人情緒高漲的。它給了我嘗試新鮮事物的衝動,我希望讀者在閱讀本書時也能有同樣的感受。
  作者簡介
  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網站(http://www.cafeaulait.org)是互聯網上最流行的獨立Java網站之一;他的另一個網站Cafe con Leche (http://www.cafeconleche.org)則成為了最流行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》雜志編寫計算機專欄,他還擁有一個博客http://bit-player.org。過去,他還為《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年畢業於麥吉 爾大學並獲得計算機科學學士學位。他的個人網頁是http://www.amk.ca。
  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(http://www.willardlowe.com)公司的創建人之一和CTO,這是一個針對企業信息管理係統的咨詢公司。他編寫了 數本關於計算機軟件的書籍,他在斯坦福大學分別獲得了數學科學學位和計算機科學學位。
  Yukihiro "Matz" Matsumoto是一位程序員,他是一位日本籍的開源倡導者,他發明了最近非常流行的Ruby語言。他從1993年開始研發Ruby,這和Java語言 一樣久遠。現在他工作於日本Network Applied Communication Laboratory(NaCl,網址為netlab.jp)公司,該公司從1997年起開始贊助Ruby的開發。因為他的真實姓名太長而難以記住,並且 對於非日本的演講者來說難以發音,因此在網上他使用了昵稱Matz。
  Arun Mehta是一位電子工程師和計算機科學家,他曾在印度、美國和德國進行過研究和教學工作。他是印度早期計算機活動傢,他努力實現了一些方便消費者 (consumer-friendly)的政策,以幫助把現代通信延伸到偏遠地區和貧睏地區。他目前的研究領域包括農村無限通信以及幫助殘疾用戶的技術。 他是印度哈裏亞納邦Radaur地區JMIT大學計算機工程係的教授和主任。他的網址包括http://india-gii.org, http://radiophony.com和 http://holisticit.com。
  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)和其他一些刊物上撰寫文章,這些文章的主題包括互聯網上的政策問題,以及影響技術創新的潮 流及其對社會的影響。他的網址為http://www.praxagora.com/andyo。
  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出版社),在這本書中他對數字技術進行了獨特的研究。他的網址是http://www.charlespetzold.com。
  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大奬。
譯序
  第一部分:這是一本什麽書
  By 劉未鵬(pongba)
  C++的羅浮宮(http://blog.csdn.net/pongba)
  這是一本獨特的書。
  其英文封面上本應寫着作者的位置寫的卻是“Edited by Andy Oram and Greg Wilson”。Edited?!那作者呢?
  實際上,這本書有33位作者!
  現在你知道為什麽封面上不列作者了吧?一,列不下。二,也是更重要的,每位作者都是一個領域的大牛,怎麽排列?
  每位作者都貢獻了一章內容,所以本書一共有33章。這種做法帶來了三個重要的結果:
  • 每位作者都是大牛,所以每個人都知道自己在說什麽,絶無一個人寫整本書而導致的在某些不甚在行的地方語焉不詳的情況。
  • 每位作者都將自己心目中對於“美麗的代碼”的認識濃縮在一章當中,張力十足。
  • 心理學上有一種說法叫做聯合評估與單獨評估,即如果你單獨評估一樣東西,是難以把握其好壞的,然而如果將它跟同類東西一比,就能夠作出更準確的判斷。33位大牛,每個人對代碼之美都有自己獨特的認識,現在一覽無餘的放在一起,對於熱愛程序的每個人都不啻一場盛宴。
  當初朋友介紹這本書給我的時候,我頓時産生了一種恍然大悟的錯覺:這纔是我真正想讀的書的樣子啊,難道技術書籍本來不就應該是這個樣子的嗎?就一個主題,讓幾十位領域大牛各抒己見,簡直完美符合了我內心對“書”的定義。
  而且,編程是計算機行業的核心活動,而代碼則是編程活動的核心,代碼之美一直一來都是一個玄妙永恆的話題,如果讓我選一個主題來請教這些作者,我還真想不出比這更好的主題!
  所以,我就迫不及待地把這本書介紹給了更多的朋友。
  所以,我同樣也已經迫不及待地想要告訴你,這本書的作者都有哪些人了:
  Jon Bentley:久負盛名的《Programming Pearls》(《編程珠璣》)的作者。在斯坦福獲得學士學位,在北卡羅萊納獲得碩士和博士學位。繼而在卡內基梅隆執教6年。貝爾實驗室前研究員,西點軍校和普林斯頓的訪問教授。
  Brian Kernighan:C語言聖經K&R C(《C程序設計語言》)和《程序設計實踐》兩本不朽著作的作者,他的書被翻譯成近30種不同的語言。
  Charles Petzold:經典的《Windows程序設計》影響了整整一代程序員,被奉為Windows編程聖經。而他的另一本經典著作《編碼的奧秘》則另闢蹊徑,由淺入深地將計算機最深層的奧秘娓娓道來。
  Tim Bray:XML創始人之一。
  Yukihiro "Matz" Matsumoto:Ruby之父。
  Douglas C. Schmidt:著名的C++跨平臺開源框架ACE的設計者,《C++網絡編程》I,II的作者。
  Jeff Dean:天才架構師,Google大型並發編程框架Map/Reduce作者。
  Diomidis Spinellis:兩屆Jolt大奬獲主,分別以《Code Reading》和《Code Quality》2004 和2007年的Jolt大奬。
  Simon Peyton Jones:Haskell語言核心人物之一,並領導設計了著名的Haskell編譯器GHC。
  Douglas Crockford:JSON發明者,Javascript領域大牛,寫了廣為流傳的《Javascript,世界上最被誤解的語言》。
  Bryan Cantrill:著名的DTrace的作者之一;之前是Sun傑出工程師,主要工作領域為Solaris內核開發...
  Greg Kroah-Hartman:目前的Linux內核維護者,經典的《Linux Device Drivers》的作者。
  Andreas Zeller:大名鼎鼎的GNU DDD可視化調試器的作者,著作《Why Programs Fail》獲得2006年Jolt生産效率大奬。
  Sanjay Ghemawat:大規模分佈式文件係統Google FileSystem(GFS)的主要作者(GFS是Google的基石之一),同時也是Google Map/Reduce以及Google BigTable的作者之一。
  ...
  (一個完整的作者列表見於書後)
  如今這些如雷貫耳的名字居然出現在同一本書中,怎能不令人興奮?!
  你是程序員嗎?你對代碼之美的認識是什麽?33位作者,33個來自不同開發領域的專業經驗,33種不同的意見。你想知道牛人們對代碼之美是怎麽想的嗎?
  其實,這本書最奇妙的地方還不在於這一點,而在於,如果你知道這些作者的名字,你肯定會忍不住去看一看。如果你不知道這些作者的名字,你更加會忍不住去看一看。因為你知道這些人的觀點肯定不會讓你失望!
  最後,還有一個更大的好消息, Oreilly出版社表示還會繼續出書的第二版,邀請更多的牛人!
  其實,“Beautiful Team”還有另一個含義:我們有一個漂亮的翻譯團隊;此外團隊組建的過程也很是有趣。在此就留一個懸念,稍後會公佈:-)
  註:由於我衹是譯者之一(我們的翻譯團隊裏面有一堆牛人),所以這篇僅代表我個人意見:-)
目錄信息
  第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%的價值!我們不是要閱讀這些文字,而是要與文字背後的作者交流學習,一點一點把自己的心得記下來,對於作者提出的新問題,先自己思考,直接寫程序嘗試,爭取跟上大師的思路,甚至可能需要反復幾遍,才能真正讀通這本書。這樣的精力不會是白費的,讀者應當認識到,當我們擁有這本書的時候,我們獲得了怎樣寶貴的機會,可以在相對比較短的時間裏有效地提升自己的思考能力。這是一個機會,也是一次考驗,我絶對相信,通過了這次考驗的讀者,會在思考和解决問題的能力上有一個大的進步。
  我希望自己能夠以這樣的態度讀這本了不起的書,以此文與其他讀者朋友共勉之。
  ——孟岩
英文解釋
  1. :  Code Zhimei