前言(卷一)

2018-02-24 15:55 更新

原文鏈接

木工是一門嚴(yán)苛的技藝,人們可以為之付出畢生精力以求精通。不過木工還不是建筑架構(gòu): 如果我們從樓梯三角板、斜接規(guī)這些細(xì)節(jié)回溯,建筑必須要作為一個整體去設(shè)計(jì);設(shè)計(jì)是一門技藝或科學(xué),同時也是一門藝術(shù)。

編程同樣是一門嚴(yán)苛的技藝,人們可以為之付出畢生精力以求精通。不過編程還不是軟件架構(gòu)。多少程序員年復(fù)一年地思索乃至斟酌著一些更博大的設(shè)計(jì)問題:此應(yīng)用是否應(yīng)具備可擴(kuò)展性?如果答案是肯定的,那么應(yīng)該借助一個腳本接口來實(shí)現(xiàn),還是通過某些插件機(jī)制,抑或采取完全不同的其它什么辦法?什么該交給客戶端去做?什么該留給服務(wù)器端?客戶端-服務(wù)器架構(gòu)對此應(yīng)用是否適用?這些問題都不是編程問題,正如在何處放置樓梯并不是一個木工問題。

建筑架構(gòu)與軟件架構(gòu)之間有許多相通的地方,但仍有一點(diǎn)關(guān)鍵區(qū)別。建筑師在其職業(yè)生涯要研習(xí)成千上萬的建筑,而大多數(shù)軟件開發(fā)者僅了解只手可數(shù)的幾個大型程序,多半還是他們自己寫的。他們從不看歷史上偉大的程序,也不閱讀有老手程序員寫的程序設(shè)計(jì)評論。結(jié)果,他們重復(fù)著別人的錯誤,而非站在別人的肩膀上。

我們編寫本書的目的就是嘗試改變這種現(xiàn)狀。本書的每章都介紹一個開源應(yīng)用程序的架構(gòu):從程序的構(gòu)成、內(nèi)部組件的交互,到架構(gòu)形成的原因,以及適用其它大型設(shè)計(jì)問題的經(jīng)驗(yàn)教訓(xùn)總結(jié)。文章都是由那些最了解軟件的人執(zhí)筆,這些人有著幾年甚至幾十年的復(fù)雜應(yīng)用程序設(shè)計(jì)或重構(gòu)經(jīng)驗(yàn)。這些應(yīng)用程序的覆蓋面從簡易繪圖程序和基于網(wǎng)頁的電子表格,到編譯工具包和數(shù)百萬行代碼的可視化軟件包,有些只有幾年的歷史,有些則接近三十年。這些軟件的共同點(diǎn)是,其作者思慮周詳,設(shè)計(jì)嚴(yán)謹(jǐn),且樂于分享他們的思想。我們希望你能享受他們的文字。

貢獻(xiàn)者

Eric P. Allman (Sendmail):Eric Allman是sendmail,syslog和trek的原作者,也是Sendmail公司的聯(lián)合創(chuàng)始人。在開源軟件剛剛得名而尚未形成一場“運(yùn)動”之前,他就已經(jīng)在編寫開源軟件。他是ACM Queue的編輯審查委員會成員,也是Cal Performances的理事會成員。他的個人網(wǎng)站是 http://www.neophilic.com/~eric。

Keith Bostic (Berkeley DB):Keith是加州大學(xué)伯克利分校計(jì)算機(jī)系統(tǒng)研究小組的成員之一, 他是BSD 2.10發(fā)布版的架構(gòu)師,以及BSD 4.4相關(guān)發(fā)布版的主要開發(fā)者之一。他曾獲得USENIX終身成就獎(火焰獎),即Unix社區(qū)對他個人的貢獻(xiàn)給與肯定。他還曾因開放BSD4的源碼而獲得加州大學(xué)伯克利分校頒發(fā)的的杰出成就獎。Keith還是開源嵌入式數(shù)據(jù)庫系統(tǒng)Berkeley DB的架構(gòu)師,也是早期開發(fā)者之一。

Amy Brown (editorial):Amy擁有滑鐵盧大學(xué)數(shù)學(xué)專業(yè)的學(xué)士學(xué)位,并在從事軟件行業(yè)十年?,F(xiàn)在她從事寫作和編輯,有時參與軟件相關(guān)的書。她現(xiàn)居多倫多,有兩個孩子和一只老貓。

C. Titus Brown (Continuous Integration):Titus從事演化建模,物理氣象學(xué),發(fā)育生物學(xué),基因組學(xué)和生物信息學(xué)的工作。他現(xiàn)在是密歇根州立大學(xué)的助理教授,并將自己的興趣拓展到多個新領(lǐng)域中,包括科學(xué)軟件的重現(xiàn)性和可維護(hù)性。他也是Python軟件基金會的一個成員,博客在 http://ivory.idyll.org。

Roy Bryant (Snowflock):Roy作為一名從業(yè)20年的軟件架構(gòu)師和首席技術(shù)官,設(shè)計(jì)的系統(tǒng)包括Electronics Workbench(即現(xiàn)在National Instruments的Multisim)和Linkwalker Data Pipeline--2006年曾獲微軟全球高性能計(jì)算最佳客戶獎。在賣掉最近一家創(chuàng)業(yè)公司后,他回到多倫多大學(xué)攻讀計(jì)算機(jī)科學(xué)專業(yè)的研究生,研究方向是虛擬化和云計(jì)算。最近他在2011年的ACM歐洲計(jì)算機(jī)系統(tǒng)會議上發(fā)表了對Snowflock的Kaleidoscope擴(kuò)展。他的個人網(wǎng)站是 http://www.roybryant.net/

Russell Bryant (Asterisk):Russell在Digium公司擔(dān)任開源軟件團(tuán)隊(duì)的工程經(jīng)理。自2004年秋季以來他一直是Asterisk開發(fā)團(tuán)隊(duì)的核心成員。從那時起,從項(xiàng)目管理到核心架構(gòu)的設(shè)計(jì)和開發(fā),幾乎Asterisk開發(fā)所有領(lǐng)域都有他的貢獻(xiàn)。他的博客在 http://www.russellbryant.net。

Rosangela Canino-Koning (Continuous Integration):Rosangela在軟件工程領(lǐng)域潛心修行13年后,回歸大學(xué)校園,去密歇根州立大學(xué)攻讀計(jì)算機(jī)科學(xué)與進(jìn)化生物學(xué)的博士學(xué)位。她的業(yè)余生活豐富多彩,愛閱讀、遠(yuǎn)足、旅游以及鉆研(hack)開源的生物信息學(xué)軟件。她的博客在 http://www.voidptr.net。

Francesco Cesarini (Riak):Francesco Cesarini自1995年起就使用Erlang語言作為日常開發(fā)語言,在愛立信完成了許多交付項(xiàng)目,包括OPT R1發(fā)布版。他是Erlang Solution公司的創(chuàng)始人,也是O'Reilly出版的《Erlang程序設(shè)計(jì)》一書的作者之一。他如今是Erlang Solution的技術(shù)總監(jiān),但仍在抽時間去諸如英國牛津大學(xué)和瑞典哥德堡信息技術(shù)大學(xué)等校指導(dǎo)研究生和本科生。

Robert Chansler (HDFS):Robert是雅虎軟件開發(fā)部的高級經(jīng)理。在卡梅隆大學(xué)完成了分布式系統(tǒng)方向的的研究生學(xué)習(xí)后,他從事過編譯器(Tartan Labs),打印及成像系統(tǒng)(Adobe Systems),電子商務(wù)( Adobe Systems,Impresse),以及網(wǎng)格化存儲管理(SanNavigator, McDATA)等項(xiàng)目。當(dāng)回到分布式系統(tǒng)和HDFS,Rob發(fā)現(xiàn)許多熟悉的問題,而總數(shù)有3到4位數(shù)之多。

James Crook (Audacity):James是居于愛爾蘭都柏林的一名職業(yè)軟件開發(fā)人。雖然之前他開發(fā)的是生物信息軟件,但目前他正在開發(fā)電子設(shè)計(jì)工具。關(guān)于Audacity他有許多大膽的計(jì)劃,他希望至少其中一些計(jì)劃能夠付諸實(shí)現(xiàn)。

Chris Davis (Graphite):Chris是一名軟件顧問,也是一名Google軟件工程師,12年多一直致力于設(shè)計(jì)搭建可伸縮監(jiān)測及自動化工具。Chris最初于2006年開始編寫Graphite,也是從那時起開始引領(lǐng)開源項(xiàng)目。當(dāng)他不在寫代碼的時候,他熱衷于烹飪、創(chuàng)作音樂以及科研。他的研究興趣點(diǎn)包括知識建模,群論,信息論,混沌理論和復(fù)雜系統(tǒng)。

Juliana Freire (VisTrails):Juliana是在猶他州立大學(xué)計(jì)算機(jī)科學(xué)系副教授。此前她曾是貝爾實(shí)驗(yàn)室(朗訊科技)數(shù)據(jù)庫系統(tǒng)研究部門的技術(shù)組成員,亦曾在俄勒岡健康科技大學(xué)研究生院任副教授。她的研究興趣包括數(shù)據(jù)起源,科學(xué)數(shù)據(jù)管理,信息集成和Web挖掘。她是國家科學(xué)基金職涯獎和IBM導(dǎo)師獎的獲得者。她的研究資金來源于國家科學(xué)基金會,能源部,美國衛(wèi)生協(xié)會,IBM,微軟及雅虎。

Berk Geveci (VTK):Berk是Kitware公司的科學(xué)計(jì)算部主任。他負(fù)責(zé)領(lǐng)導(dǎo)研發(fā)團(tuán)隊(duì)致力于一個獲獎的基于VTK的可視化應(yīng)用程序--ParaView。他的研究興趣包括大規(guī)模并行計(jì)算,計(jì)算動力學(xué),有限元,可視化算法。

Andy Gross (Riak):Andy Gross是芭蕉科技的首席架構(gòu)師,負(fù)責(zé)管理芭蕉開源和企業(yè)數(shù)據(jù)存儲系統(tǒng)的設(shè)計(jì)與開發(fā)。2007年10月他進(jìn)入芭蕉之時,在軟件工程與分布式系統(tǒng)工程領(lǐng)域已有10年經(jīng)驗(yàn)。在進(jìn)入芭蕉之前,他曾在麻吉傳媒、蘋果和阿卡邁科技擔(dān)任高級分布式系統(tǒng)工程師。

Bill Hoffman (CMake):Bill是Kitware公司的聯(lián)合創(chuàng)始人兼首席技術(shù)官。他是CMake項(xiàng)目的核心開發(fā)人員,已經(jīng)從事大型C++系統(tǒng)開發(fā)20年以上。

Cay Horstmann (Violet):Cay在圣何塞州立大學(xué)計(jì)算機(jī)科學(xué)系任教授,但有時會休假去企業(yè)工作,或者去國外執(zhí)教。他是編程語言和軟件設(shè)計(jì)方面諸多書籍的作者,也是Violet和GridWorld開源程序的原作者。

Emil Ivov (Jitsi):Emil是Jitsi(以前名為SIP通訊)項(xiàng)目的創(chuàng)始人和領(lǐng)導(dǎo)者。他還與其他發(fā)起人共同參與了諸如ice4j.org和JAIN SIP等項(xiàng)目。Emil于2008年初在斯特拉斯堡大學(xué)取得博士學(xué)位,此后一直主要專注于Jitsi相關(guān)的活動。

David Koop (VisTrails):David是猶他州立大學(xué)計(jì)算機(jī)科學(xué)系的博士候選人(將于2011年夏取得博士學(xué)位)。他的研究興趣包括可視化,數(shù)據(jù)起源和科學(xué)數(shù)據(jù)管理。他是VisTrails系統(tǒng)的主程,也是VisTrails公司的高級軟件架構(gòu)師。

Hairong Kuang (HDFS):(鄺海蓉)長期以來一直是Hadoop項(xiàng)目的捐助者和提交者,無論在現(xiàn)在的Facebook還是在之前的雅虎,她都為Hadoop激情奉獻(xiàn)。她曾在波莫納的加州州立理工大學(xué)任助理教授。她于爾灣市加州大學(xué)計(jì)算機(jī)科學(xué)系獲得博士學(xué)位。她的興趣包括云計(jì)算、移動代理、并行計(jì)算,和分布式系統(tǒng)。

H. Andrés Lagar-Cavilla (Snowflock):Andrés是一名在虛擬化、操作系統(tǒng)、安全性,集群計(jì)算和移動計(jì)算等領(lǐng)域從實(shí)驗(yàn)性工作的軟件系統(tǒng)研究員。他曾在阿根廷取得理學(xué)學(xué)士學(xué)位,并于多倫多大學(xué)取得碩士和博士學(xué)位。他的資料在http://lagarcavilla.org。

Chris Lattner (LLVM):Chris是一個興趣廣泛、閱歷豐富的軟件開發(fā)者,特別是在編譯器工具鏈、操作系統(tǒng)、圖形圖像渲染領(lǐng)域。他是LLVM開源項(xiàng)目的設(shè)計(jì)師和首席架構(gòu)師。更多有關(guān)Chris以及他的項(xiàng)目的信息在http://nondot.org/~sabre/。

Alan Laudicina (Thousand Parsec):Alan是韋恩州立大學(xué)計(jì)算機(jī)科學(xué)系的一名碩士研究生,專攻分布式計(jì)算。他通過寫代碼、學(xué)習(xí)編程語言和玩撲克度過業(yè)余時間。你可以在http://alanp.ca/找到更多關(guān)于他的信息 。

Danielle Madeley (Telepathy):Danielle是一名澳大利亞軟件工程師,現(xiàn)在在Collabora公司從事Telepathy開發(fā)以及其他神奇的工作。她擁有電子工程和計(jì)算機(jī)科學(xué)學(xué)士學(xué)位。她還廣泛收集長毛絨企鵝。她的博客在 http://blogs.gnome.org/danni/。

Adam Marcus (NoSQL):Adam是麻省理工大學(xué)計(jì)算機(jī)科學(xué)和人工智能實(shí)驗(yàn)室的博士研究生,專注于數(shù)據(jù)庫系統(tǒng)與社會計(jì)算的交叉學(xué)科研究。他最近一項(xiàng)工作是用傳統(tǒng)數(shù)據(jù)庫與Twitter這樣的社交數(shù)據(jù)流以及亞馬遜土耳其機(jī)器人這樣的人群計(jì)算平臺相結(jié)合。他喜歡從他自己的研究原型構(gòu)建可用的開源系統(tǒng),喜歡在海灘漫步,更喜歡跟蹤開源存儲系統(tǒng)。他的博客在 http://blog.marcua.net。

Kenneth Martin (CMake):Ken是Kitware--一家總部設(shè)在美國的研發(fā)公司--的現(xiàn)任董事長兼首席財(cái)務(wù)官。他于1998年作為合伙人之一創(chuàng)立了Kitware公司,從此他幫助公司一步步發(fā)展到現(xiàn)在研發(fā)供應(yīng)商龍頭老大的地位--其客戶群橫跨諸多政府和商業(yè)部門。

Aaron Mavrinac (Thousand Parsec):Aaron是溫莎大學(xué)電氣和計(jì)算機(jī)工程專業(yè)博士學(xué)位候選人,目前從事攝像機(jī)網(wǎng)絡(luò)、計(jì)算機(jī)視覺和機(jī)器人方向的研究。他拿出了部分業(yè)余時間投入到Thousand Parsec及其他自由軟件的開發(fā)工作,用Python和C寫代碼,還有太多自己不擅長的雜事。他的網(wǎng)站是 http://www.mavrinac.com。

Kim Moir (Eclipse):Kim在渥太華的IBM Rational軟件實(shí)驗(yàn)室工作,他是Eclipse和Runtime Equinox項(xiàng)目的發(fā)布工程主管,也是Eclipse架構(gòu)委員會成員。她的興趣在編譯優(yōu)化,Equinox和組件化軟件構(gòu)建。工作之余,她經(jīng)常為了準(zhǔn)備參加下一屆公路賽,與比賽對手一路飚車。她的博客在 http://relengofthenerds.blogspot.com/。

Dirkjan Ochtman (Mercurial):Dirkjan自2010年計(jì)算機(jī)科學(xué)專業(yè)碩士畢業(yè)后,一直在一個金融創(chuàng)業(yè)公司工作了三年。他業(yè)余時間也不閑著,鉆研(hack)Mercurial,Python,Gentoo Linux和一個Python寫的CouchDB庫。他生活在美麗的阿姆斯特丹。他個人網(wǎng)站的網(wǎng)址是 http://dirkjan.ochtman.nl/

Sanjay Radia (HDFS):Sanjay在雅虎是Hadoop項(xiàng)目的架構(gòu)師以及Hadoop開源參與者,也是阿帕奇軟件基金會的項(xiàng)目管理委員會成員。之前他曾在Cassatt、Sun、INRIA等公司擔(dān)任高級軟件工程師,負(fù)責(zé)開發(fā)分布式系統(tǒng)軟件和網(wǎng)格/效用計(jì)算基礎(chǔ)軟件。Sanjay在加拿大的滑鐵盧大學(xué)計(jì)算機(jī)科學(xué)系取得博士學(xué)位。

Chet Ramey (Bash):Chet參與bash項(xiàng)目已經(jīng)20多年了,在過去的17年一直是主力開發(fā)人員。他是俄亥俄州克里夫蘭凱斯西儲大學(xué)的終身教員,他也是在這里取得了理工學(xué)士和碩士學(xué)位。如今他和家人以及寵物住在克利夫蘭附近。他的個人主頁是http://tiswww.cwru.edu/~chet。

Emanuele Santos (VisTrails):Emanuele是猶他大學(xué)一名從事科研工作的科學(xué)家。她的研究興趣包括科學(xué)數(shù)據(jù)管理,可視化和數(shù)據(jù)起源。她于2010年在猶他大學(xué)取得計(jì)算專業(yè)博士學(xué)位。她也是VisTrails系統(tǒng)的首席開發(fā)者。

Carlos Scheidegger (VisTrails):Carlos擁有猶他大學(xué)計(jì)算專業(yè)博士學(xué)位,現(xiàn)在是AT&T研究實(shí)驗(yàn)室的研究員。Carlos在2007年的IEEE可視化大會和2008年的圖形建模國際會議上均獲得最佳論文獎。他的研究興趣包括數(shù)據(jù)可視化與分析、幾何處理和計(jì)算機(jī)圖形學(xué)。

Will Schroeder (VTK):Will是Kitware公司主席和合伙人。他是一名科班出身的計(jì)算科學(xué)家,也是VTK的核心開發(fā)者。他樂于寫漂亮的代碼,尤其是涉及計(jì)算幾何學(xué)或圖形學(xué)的代碼。

Margo Seltzer (Berkeley DB):Margo是哈佛大學(xué)應(yīng)用科學(xué)與工程學(xué)院的史密斯學(xué)者教授,也是甲骨文公司的架構(gòu)師。她是Berkeley DB的主力設(shè)計(jì)師之一,也是睡貓軟件公司的合伙人之一。她的研究興趣包括文件系統(tǒng),數(shù)據(jù)庫系統(tǒng),交易系統(tǒng),以及醫(yī)療數(shù)據(jù)挖掘。她的職業(yè)生涯介紹在http://www.eecs.harvard.edu/~margo,博客在 http://mis-misinformation.blogspot.com/

Justin Sheehy (Riak):Justin是Webmachine和Riak的幕后創(chuàng)作公司--芭蕉科技的首席技術(shù)官。在進(jìn)入Basho公司之前,他是MITRE公司的首席科學(xué)家和阿卡邁基礎(chǔ)軟件的高級架構(gòu)師。在這兩家公司里,他都專攻健壯分布系統(tǒng)的多個層面,包括調(diào)度算法、基于語言的形式化模型和彈性理論。

Richard Shimooka (韋諾之戰(zhàn)):Richard是安大略省金斯頓女王大學(xué)國防管理研究計(jì)劃的助理研究員。他也是“韋諾之戰(zhàn)”的副主管兼秘書。Richard已經(jīng)寫了幾部關(guān)于社團(tuán)組織文化研究的作品,涉及面從政府部門到開源項(xiàng)目。

Konstantin V. Shvachko (HDFS):HDFS的資深開發(fā)者,也是億貝的主力Hadoop架構(gòu)師。Konstantin專攻用于大規(guī)模分布式存儲系統(tǒng)的高效數(shù)據(jù)結(jié)構(gòu)和算法。他發(fā)現(xiàn)了一種新型平衡樹--S-樹,用于為非結(jié)構(gòu)化數(shù)據(jù)建立最優(yōu)化索引。他同時也是reiserFS的原型--treeFS(一種基于S-樹的Linux文件系統(tǒng))項(xiàng)目的主程。Konstantin擁有俄羅斯莫斯科國立大學(xué)計(jì)算機(jī)科學(xué)博士學(xué)位。他也是Apache Hadoop項(xiàng)目管理委員會的成員之一。

Claudio Silva (VisTrails):Claudio是猶他州立大學(xué)計(jì)算機(jī)科學(xué)系教授。他的研究興趣包括可視化,計(jì)算幾何,計(jì)算機(jī)圖形學(xué)和科學(xué)數(shù)據(jù)管理。他于1996年在紐約州立大學(xué)石溪分校計(jì)算機(jī)科學(xué)系取得博士學(xué)位。2011年末,他將加盟紐約大學(xué)理工學(xué)院,擔(dān)任計(jì)算機(jī)科學(xué)與工程系的全職教授。

Suresh Srinivas (HDFS): Suresh是雅虎的軟件架構(gòu)師,從事HDFS的開發(fā)工作。在Apache軟件基金會,他是Hadoop項(xiàng)目的參與者和項(xiàng)目管理委員會成員。加盟雅虎之前,他在Sylantro Systems工作,為托管式通信服務(wù)開發(fā)可伸縮的基礎(chǔ)軟件。Suresh擁有印度卡納塔克邦國家科技研究院電子通訊專業(yè)的學(xué)士學(xué)位。

Simon Stewart (Selenium): Simon住在倫敦,是谷歌的軟件測試工程師。他是Selenium項(xiàng)目的核心捐助者,是WebDriver的締造者,開源控。Simon喜歡喝啤酒,也喜歡精益求精的寫軟件,有時也同時做這兩件事。他的個人主頁是 http://www.pubbitch.org/

Audrey Tang (SocialCalc): Audrey住在臺灣,系自學(xué)成才的程序員兼翻譯員。她現(xiàn)在讀寫網(wǎng)工作,職位是“無業(yè)人員”,同時在蘋果公司兼任本地化和發(fā)布工程的外包人員。她之前曾設(shè)計(jì)和主導(dǎo)Pugs項(xiàng)目,這是Perl 6的第一個實(shí)現(xiàn)版本。她也曾效力于Haskell、Perl 5、Perl 6的語言設(shè)計(jì)委員會,并對CPAN(Perl綜合檔案網(wǎng))和Hackage做出了無數(shù)的貢獻(xiàn)。她的博客在 http://pugs.blogs.com/audreyt/

Huy T. Vo (VisTrails): Huy于2011年5月在猶他大學(xué)獲得博士學(xué)位。他的研究興趣包括可視化,數(shù)據(jù)流架構(gòu)和科學(xué)數(shù)據(jù)管理。他是VisTrails公司的高級開發(fā)人員。他還被聘為紐約大學(xué)理工學(xué)院的研究助理教授。

David White (Battle for Wesnoth):David是韋諾之戰(zhàn)的創(chuàng)始人和開發(fā)主管。他與了幾個開源的視頻游戲項(xiàng)目,包括Frogatto,他也是此項(xiàng)目的合伙創(chuàng)始人之一。David在旅游科技領(lǐng)域的領(lǐng)頭羊Sabre Holdings公司任性能工程師。

Greg Wilson (editorial):Greg從事高性能計(jì)算,數(shù)據(jù)可視化和計(jì)算機(jī)安全領(lǐng)域的工作已經(jīng)超過25年了,他或著或編,出了好幾本計(jì)算機(jī)書籍(包括曾獲2008年震撼大獎的《代碼之美》)和兩本少兒讀物。Greg于1993年在愛丁堡大學(xué)取得計(jì)算機(jī)科學(xué)專業(yè)博士學(xué)位。他博客在 http://third-bit.com,還有http://software-carpentry.org。

Tarek Ziadé (Python打包):Tarek生活在法國勃艮第。他是Mozilla的高級軟件工程師,負(fù)責(zé)用Python構(gòu)建服務(wù)器程序。在業(yè)余時間,他努力主導(dǎo)著Python打包項(xiàng)目。

致謝

我們要感謝以下審校人:

| Eric Aderhold | Muhammad Ali | Lillian Angel |
| Robert Beghian | Taavi Burns | Luis Pedro Coelho |
| David Cooper | Mauricio de Simone | Jonathan Deber |
| Patrick Dubroy | Igor Foox | Alecia Fowler |
| Marcus Hanwell | Johan Harjono | Vivek Lakshmanan |
| Greg Lapouchnian | Laurie MacDougall Sookraj | Josh McCarthy |
| Jason Montojo | Colin Morris | Christian Muise |
| Victor Ng | Nikita Pchelin | Andrew Petersen |
| Andrey Petrov | Tom Plaskon | Pascal Rapicault |
| Todd Ritchie | Samar Sabie | Misa Sakamoto |
| David Scannell | Clara Severino | Tim Smith |
| Kyle Spaans | Sana Tapal | Tony Targonski |
| Miles Thibault | David Wright | Tina Yee |

我們也要感謝Jackie Carter,他在早期的編輯階段曾助我們一臂之力。

封面圖片是Peter Dutton拍攝的《自由街48號壁畫》,由Chris Denison繪于緬因州波特蘭市。這幅照片根據(jù)知識共享組織的BY-NC-SA 2.0通用協(xié)議授權(quán)使用。

致:令我們獲益匪淺的Brian Kernighan,
以及全世界困于牢籠的異見人士!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號