架构之美(架构之美)

《架构之美》是机械工业出版社2009年11月出版的图书,作者是Till Adam。本书围绕5个主题领域来组织本书的内容:概述、企业应用、系统、最终用户应用和编程语言。

内容简介

本书让最优秀的设计师和架构师来描述他们选择的软件架构,剥开架构的各层,展示他们如何让软件做到实现功能、可靠、易用、高效率、可维护、可移植和优雅。

作者简介

Till Adam在年轻时学习了哲学、比较文学、美国研究和音乐学,职业是音乐人。由于没有发财和出名,他转而攻读科学硕士,学习了数学、计算机科学和商业。多年对自由软件的贡献(特别是对KDE的贡献)教会了他编程,也为他带来了在Klarälvdalens Datakonsult AB工作的机会,他在该公司负责协调KDE的开发和其他与自由软件相关的活动。他和他的妻子、女儿住在德国柏林。

Jim Blandy在1990年至1993年间为自由软件基金会维护GNU Emacs,和Richard Stallman一起发布了Emacs的第19个版本。他是Subversion版本控制系统的最初设计者之一。他也是CVS版本控制系统、GNU调试器(GDB)、Guile扩展语言库和一个编辑基因序列的Emacs程序的贡献者。他为Mozilla公司工作,工作内容是SpiderMonkey,即Mozilla的Javascript编程语言的实现。Jim和他的妻子、两个女儿住在俄勒岗的波特兰。

Mirko Boehm从1997开始就是KDE的开发者,在1996年至2006年间是KDE e.V.委员会的成员。他毕业于德国汉堡Helmut Schmidt大学的商业专业。在他的私人生活中,他阅读纸版书籍、与家人在一起,试图远离计算机。他在德国柏林为Klarälvdalens Datakonsult AB工作,负责跨平台软件和嵌入式软件开发。

Christopher Dennis自2005年JCP项目开始时,就是项目的主开发者。Chris在牛津大学读博士时开始采用Java。此前,他使用过各种编程语言,从16进制小键盘上编写的Z80机器码到PHP和JavaScript。他对特殊情况、编码技巧和偶尔有点丑陋的临时编码很有兴趣,喜欢用各种语言编写紧凑的、优雅的代码。

Dave Fetterman是Facebook的工程经理,他在那里创建了Facebook平台项目。在2006年加入Facebook之前,他是一名软件工程师,参加Microsoft开发者部门的项目,包括.NET的通用语言运行环境(CLR)。他喜欢为其他开发者创建软件,也喜欢对愿意听的人发表长篇大论。他拥有应用数学的学士学位,并在2003年获得了哈佛大学的计算机科学硕士学位。

Keir Fraser是XenSource的创始人之一,XenSource是Citrix Systems公司的一部分。他也是Xen系统管理程序的首席架构师。Keir在2002实现了Xen的第一个版本,作为他在剑桥计算机实验室攻读博士学位时的一项娱乐。在该项目成为大规模的社群合作的过程中,他继续作为主要的开发者。他因在无锁并发控制方面的工作,于2004年获得了博士学位,并在同年成为一名教师。

Peter Goodliffe是一名程序员、专栏作家、演说家和作家,从来不在同一软件领域做过多的停留。Pete的热门书籍“Code Craft (No Starch Press)”是对整个编程追求的实际而有趣的调查——大约600页,真是了不起!他对制革很有热情,而且不穿鞋。

Georgios Gousios是一名职业研究者,接受的教育和软件工程有关,热衷于软件开发。他正在希腊的雅典经济学与商业大学完成他的博士论文。他的研究兴趣包括软件工程、软件品质、虚拟机和操作系统,他拥有英国曼彻斯特大学的科学硕士学位。Gousios为多个开源软件项目贡献过代码,并参与了各种学术项目和商业项目的研究与开发。他是SQO-OSS项目的项目经理、设计权威和主要开发成员,为评估软件品质探索一些创新的方法。在他的学术生涯中,Gousios在会议和杂志上发表了10篇技术论文。Gousios是ACM、IEEE、Usenix Association和Technical Chamber of Greece的成员。

Dave Grove是IBM的T.J. Watson研究中心动态优化组的一名研究员。他的主要研究兴趣包括分析和优化面向对象语言、虚拟机设计和实现、JIT编译、在线反馈导向的优化和垃圾收集。他在1998年参加了Jalapeño项目,是这个优化编译器和适应式优化系统首个实现的主要贡献者。自Jalapeño在2001年作为Jikes RVM开放源码以来,他一直是Jikes RVM核心团队和指导委员会的活跃成员。

John Klein是软件工程研究所(SEI)的高级技术人员,他的研究方向是“众系统之系统”的架构方法,并帮助个人、团队和组织机构改进他们的软件架构能力。在加入SEI之前,John是Avaya公司的首席架构师。在Avaya,他负责开发多模式的代理、通信分析的架构,以及为各种客户交互产品创建并改进架构。在此之前,John是Quintus的一名软件架构师,在那里他设计了第一款获得商业成功的多渠道集成联系中心产品,并导致了Quintus兼并了另外两家公司,实现了产品组合的技术集成。在加入Quintus之前,John曾为多家视频会议和视频网络业的公司服务。他的职业生涯开始于Raytheon,在那里他为雷达信号处理、多光谱图像处理、并行处理架构和算法提供硬件和软件解决方案。John拥有Stevens技术学院的学士学位和Northeastern大学的硕士学位。他是ACM和IEEE计算机学会的成员。

Greg Lehey的漫长职业生涯在德国和澳大利业度过,他曾为德国空间研究所工作,也曾为Univac、Tandem、Siemens-Nixdorf和IBM等计算机制造商工作,也曾作为一些没名气的软件公司的大客户,还曾做过独立的咨询顾问。他的活动范围很广,包括从内核开发到产品管理,从系统编程到系统管理,从处理卫星数据到为油泵编程,从生产CD-ROM到把自由软件移植到DSP指令集上。他是FreeBSD核心团队的成员,也是澳大利业Unix用户协会的主席。他是FreeBSD和NetBSD项目的开发者,也是“Porting Unix Software and The Complete FreeBSD, Fourth Edition (both O’Reilly)”一书的作者。他还以编写商业应用软件而闻名。Greg在2007年退休,将多出来的时间用于寻找生活。他的休闲活动占据了他的大多数时间,但这还不够,他还听古典木纹唱片、烹饪、酿啤酒(他开发了一个计算机控制的发酵系统)、做园艺、骑马和摄影。他也对一些历史题材感兴趣,包括古代的难解的欧洲语言。

Panagiotis Louridas在上世纪八十年代通过一台 Sinclair ZX Spectrum开始涉足计算机。从那时起,他就开始用机器语言进行编程,而且非常喜欢。他在雅典大学信息系获得了计算机科学学士学位,在曼彻斯特大学获得了计算机硕士和博士学位。这些年来,他一直为私人部门开发软件,他在希腊研究和教育网络(GRNET)工作。他也是雅典经济学和商业大学(AUEB)软件工程和安全(SENSE)研究组的成员。他发表的文章范围很广,从人类学到加密,从仪表展示到软件工程。他特别喜欢寻找计算机世界和其他领域的联系。

Stephen J. Mellor在为软件开发创建有效的工程方法方面,是国际公认的先行者。在1985年,他出版了广为阅读的Ward-Mellor三卷本“Structured Development for Real-Time Systems (Prentice Hall)”;在1998年,他的书首次定义了面向对象分析。Stephen还在2002年出版了“Executable UML: A Foundation for Model-Driven Architecture (Addison-Wesley Professional) ”。他最近的一本书“MDA Distilled: Principles of Model-Driven Architecture (Addison-Wesley Professional)”在2004年出版。他在对象管理集团(OMG)中活动积极,是为UML添加可执行动作的协会的主席,他完成了可执行UML的标准。他是敏捷宣言的签名者之一。他是OMG架构委员会的两任成员,IEEE软件顾问委员会的主席,他成为了Mentor Graphics的嵌入式软件部门的首席科学家。

Bertrand Meyer是ETH Zurich的软件工程教授,也是Eiffel软件的首席架构师,他领导并设计了EiffelStudio环境和大量的库。他是一些畅销书的作者,其中包括获得Jolt大奖的“Object-Oriented Software Construction (Prentice Hall)”。他也因为在对象技术和Eiffel方面的工作获得了ACM软件系统大奖和Dahl-Nygaard大奖,并获得了St. Petersburg州立技术大学的荣誉博士学位。他的研究兴趣涉及面向对象技术、编程语言、软件验证(包括测试、并发和规范方法)。他也是一名活跃的顾问和讲师。

Mitchell是MIT架构和媒体艺术与科学系的Alexander Dreyfoos教授,他领导着MIT媒体实验室和MIT设计实验室的Smart Cities团队。他以前曾担任MIT架构和计划学院的院长。他最近的新书是“World’s Greatest Architect”和“Imagining MIT”(都由MIT出版社出版)。

Derek Murray是剑桥大学计算机实验室的博士生。他在2006年加入Xen项目,主要工作是通过重新设计控制栈来改进Xen的安全性。他的研究主要是改进大规模分布式系统的容错性,但他还是偶尔会涉及系统核心。Derek在2006年从爱丁堡大学获得了高性能计算专业的硕士学位,2005年获得了Glasgow大学的计算机学士学位。

Rhy Newman在十多年前于牛津大学完成博士学位时,就开始使用Java,那时Java还只有几年历史。在他早期的研究中,他利用纯Java环境展示了高性能实时场景处理的实现方法,即使当时还是使用早期JIT化的JVM。从那时起,他同时在学界和业界工作,一次次证明Java平台实际上有多灵活、多高效、多快。在超过20年的软件工程生涯中,他获得了多个业界杰出技术奖项,他回到了牛津,承担了网格计算领域的突破性研究。JPC是最新研究工作的一部分。

Michael Nygard致力于在全国帮助开发者提高水平和减少痛苦。他和他遇到的每一个人分享他对改进的热情和活力,有时甚至没有得到对方的同意。Michael花了20年中的大部分时间学习对专业程序员有意义的事,他关心艺术、品质和技艺。他总是愿意在那些全职的、真心投入工作的开发者(那些“觉醒的”开发者)身上花时间。在另一方面,他不能容忍缺乏兴趣或浪费潜力。Michael在近20年来一直是专业的程序员和架构师。在这段时间里,他为美国政府、军方、银行、金融业、农业和零售业交付了运营系统。通常,Michael都要面对他自己开发的系统。这种实际运营的经历改变了他对软件架构和开发的看法。他参与了一个Tier 1零售网站的初期开发,并且常常作为其他在线业务的“流动解决问题专家”。这些经验让他对在相当不友好的环境下构建高性能、高可靠性的软件有了独特的看法。Michael编写了“Release It! Design and Deploy Production-Ready Software (Pragmatic Programmers)”,该书获得了2008年的Jolt生产力大奖。

Ian Rogers是曼彻斯特大学高级处理器技术研究组的研究员。他的博士研究工作是关于Dynamite二进制翻译器的,该技术实现了商用,许多二进制翻译器产品的一部分,包括Apple的Rosetta。他最近的学术研究工作一直是编程语言设计、运行时环境和虚拟机环境,特别是如何自动创建它们并有效地使用并行技术。他是Jikes研究虚拟机的主要贡献者,是开发团队的核心成员。

Brian Sletten是自由的、受过艺术教育的软件工程师,关注forward-learning技术。他曾担任过系统架构师、开发者、现场指导者和培训师。他在世界各地的会议上发表演讲,并为一些在线出版物编写关于面向Web技术的文章。他的经验涉及国防、金融和商业领域。他曾设计并建造了网络矩阵式交换控制系统、在线游戏、3D仿真/可视化环境、因特网分布式计算平台、P2P和基于Web的语义系统。他拥有William and Mary大学的计算机科学学士学位,居住在弗吉尼亚的Fairfax。他是Bosatsu咨询公司的总裁,该公司为Web架构、面向资源的计算、语义Web、高级用户界面、可伸缩系统、安全和其他20世纪末21世纪初的技术提供专业的咨询服务。

Diomidis Spinellis是希腊雅典经济学和商业大学管理科学与技术系统的副教授。他的研究兴趣包括软件工程、计算机安全和编程语言。他也编写了两本“开放源码方面”的书,由Addison-Wesley出版:“Code Reading(获得了2004年的软件开发生产力大奖)”和“Code Quality(获得了2007年软件开发生产力大奖)”。他也写了几十篇科学论文。他是IEEE Software编辑委员会的成员,负责定期的“Tools of the Trade”栏目。Diomidis是FreeBSD的提交者,也是UMLGraph和其他天源软件包、库和工具的开发者。他拥有软件工程的硕士学位和计算机科学博士学位,都是在Imperial College London获得的。Diomidis是ACM的高级成员,也是IEEE和Usenix Association的成员。

Jim Waldo是Sun微系统实验室的杰出工程师,负责研究下一代大规模分布式系统。他是Project Darkstar的技术负责人,该系统是针对大规模多人在线游戏和虚拟世界而设计的多线程、分布式基础设施。在此之,他曾是Jini的首席架构师,Jini是基于Java的分布式编程系统。Jim编写了“The Evolution of C++: Language Design in the Marketplace of Ideas(MIT出版社)”,也是“The Jini Specification (Addison-Wesley)”的合著者之一。他曾是美国国家学术委员会的共同主席,编辑并出版了“Engaging Privacy and Information Technology in a Digital Age”一书。Jim也是哈佛大学的辅助教师,在计算机科学系教授分布式计算和策略与技术相关的内容。Jim拥有马萨诸塞大学(Amherst)的哲学博士学位。

David Weiss拥有Union College的计算机科学学士学位,并拥有马里兰大学的计算机科学硕士和博士学位。他是Avaya实验室的软件技术研究部的领导,他关注软件开发效率改进的普遍问题和Avaya软件开发过程改进的特殊问题。在第二个问题上,他领导了Avaya软件技术研究中心。以前,他曾是朗迅技术贝尔实验室软件生产研究部的主任,该部门负责研究如何改进软件开发的效率。在加入贝尔实验室之前,他是软件生产力协会(SPC)复用和度量部门的主任,该协会由14个大型的美国航空公司组成。在加入SPC之前,Weiss博士在技术评估办公室度过了一年的时间,在那里他与同事共同完成了Strategic Defense Initiative的技术评估。在1985-1986学年,他是Wang Institute的访问学者,在许多年里,他一直是华盛顿特区Naval研究实验室(NRL)计算机科学和系统部门的研究员。他也是一名程序员和数学家。Dave的主要研究兴趣是软件工程领域,特别是软件开发过程和方法学、软件设计和软件测量。他最为人知的是发明了软件测量的“目标-问题-测量指标”方法,软件系统模块化结构的工作,以及软件生产线工程的工作。他是Synthesis过程和继承者FAST过程的共同发明人。他与别人共同编著了两本书:“Software Product-Line Engineering”和“Software Fundamentals: Collected Papers of David L. Parnas ”(都由Addison-Wesley出版)

译者简介

王海鹏 1994年毕业于华东师范大学。拥有理学士(物理)和文学士(英国语言文学)学位。独立的咨询顾问、培训讲师、译者和软件开发者。已翻译十余本软件开发书籍,主题涵盖敏捷方法学、需求工程、UML建模和测试。拥有15年软件开发经验,主要的研究领域是软件架构和方法学,致力于提高软件开发的品质和效率。

蔡黄辉 江苏启东人。1999年毕业于上海交通大学,毕业后一直从事软件开发工作,主要使用Java做Web方面的底层开发。现居住在上海。

徐锋 中国系统分析员顾问团(CSAI)软件工程首席顾问,中国软件技术大会杰出贡献专家,资深咨询顾问。主要研究领域为需求工程、系统分析与设计、软件估算,致力于推动软件工程方法论的落地应用。曾在《程序员》等媒体发表了《实战OO》、《项目管理三步曲》、《大话Design》等多个专栏文章,著有《软件需求最佳实践》、《UML面向对象建模基础》等多本书籍,翻译了《UML 2.0实战》、《AOSD中文版》、《Cloud to Code中文版》等多本相关技术书籍。

推荐

推荐序一

如何看到一滴水的美丽

支付宝(中国)公司业务架构师

《大道至简》作者周爱民(aimingoo)

【一】

架构是一个过程,而非一个结果。

【二】

在大多数人的谈论中,架构是一个目标产物,而作为架构师的责任就是去生产它。所以无论如何,架构是可以“做”出来的,而且也应该有一些“做”的方法、技术、技巧。

有人问过我:架构的最主要产出是什么?我的答案是:图。这里面有两层含义:一层含义是如同建筑师描绘的蓝图一样,用于引导实施者;另一层含义是架构师头脑中清晰的目标系统。如果架构师头脑中没有系统清晰的图像,他是没有办法把它画出来的。

【三】

画家画的无非是物我。画物的画家,最终画的还是我见。所以,画家的笔最终描绘的是他自己心里的映像。

【四】

艺术是不可能被“生产”出来的,生产出来的,叫“艺术品”。

【五】

架构这个过程,是架构师洞见系统内在结构、规律、原则和逻辑的过程。真正的架构师是可以将自己放在系统中去的(例如作为系统中的任何一个角色),只有清晰地理解系统,才能简洁地描述它。而当架构师拿出了他所描述的“作品”的时候,架构这一过程就已经结束了。

【六】

一滴水滴落的过程中,有多少个形态的变化?

推荐序二

架构的架构

北京无限讯奇信息技术有限公司产品技术高级总监

黄冬

感谢译者和出版者为我们带来这样一本传奇的架构故事书。

推荐序三

美丽架构之道

《构建高性能Web站点》作者

Web架构实践者

郭欣

我无法给架构下一个简单的定义,因为任何定义都会束缚你对架构的无限想象。不可否认,架构师早已出现在人类几千年前的各项生产活动中,比如建筑、音乐。而在计算机软件及Web领域,架构的设计直接影响着系统的生产,比如开发过程和效率、代码和组件复用性等,同时也影响着系统的可用性、可伸缩性、性能、容量可预测性等。

在本书中,我们更加关注架构之美。美丽的架构同样无法定义,可它却一定是自然的、简单的、可复用的、人文的,甚至是外行人也可以细细品味其思想的。当我看到超市的多个收银台排满长队时,便想到服务器并发处理性能和容量;当我看到十字路口的车辆等待转弯时,便想到它通过缓存思想来提高交通吞吐率。

那么如何设计出美丽的架构呢?从代码逻辑到物理网络,从单机到分布式,无数的技术可供架构师选择,如分层、组件化、服务化、标准化、缓存、分离、队列、复制、冗余、代理等,不过它们仍然只是“术”的范畴,而何时何处如何恰到好处地使用它们才是“道”的范畴,比如顿悟变化的道理,在博弈中寻找平衡,以系统化的角度来分析问题,寻找相对与绝对的奥秘、开放的心态……

然而,这个领域实在是太年轻了,我们需要更多的例子和经验,本书将让你大开眼界!

编辑推荐

《架构之美》荣获2009年度引进版优秀图书奖!

健壮、优雅、灵活和易维护的软件架构是怎样炼成的?《架构之美》通过一系列优秀的文章回答了这个问题,这些文章来自于十几位当今一流的软件设计师和架构师。在每篇文章中,作者都向们展示了一个著名的软件架构,并分析了什么让其具有创新性,让其极其符合设计目标。

《架构之美》Facebook的架构如何建立在以数据为中心的应用生态系统之上。Xen的创新架构对操作系统未来的影响。KDE项目的社区过程如何让软件的架构从粗略的草图演进为漂亮的系统。不断滋长的特征如何让GNUEmacs获得从未预料到的功能。JikesRVM自优化、自足执行的运行时环境背后的魔法。

获奖证书(见右图):

媒体推荐

“本书的作者们在介绍软件架构的基本实践和最佳实践方面干得很漂亮,他们也同样漂亮地介绍了各式各样的现代系统。我特别喜欢他们谈及的架构的广泛性,从Emacs到Facebook,从非常正式的系统到非常有灵气的系统。

简而言之,这是一本非常及时的书,对于软件架构的艺术、科学和实践是非常有益的贡献。”

——GradyBooch,IBM院士

作品目录

前言 5

第一部分 论架构

第1章 架构概述  13

1.1 简介  13

1.2 创建软件架构  19

1.3 架构结构  23

1.4 好的架构  27

1.5 美丽的架构  28

致谢  30

参考文献  31

第2章 两个系统的故事:现代软件神话  33

2.1 混乱大都市  34

2.2 设计之城  40

2.3 说明什么问题  47

2.4 轮到你了  48

参考文献  48

第二部分 企业级应用架构

第3章 伸缩性架构设计  51

3.1 简介  51

3.2 背景  52

3.3 架构  56

3.4 关于架构的思考  61

第4章 记忆留存  67

4.1 功能和约束  68

4.2 工作流 69

4.3 架构关注点  70

4.4 用户反应  90

4.5 结论  90

参考文献  90

第5章 面向资源的架构:在Web中  91

5.1 简介  91

5.2 传统的Web服务  92

5.3 Web  94

5.4 面向资源的架构  99

5.5 数据驱动的应用  102

5.6 应用面向资源的架构  103

5.7 结论  108

第6章 数据增长:Facebook平台的架构  109

6.1 简介  109

6.2 创建一个社会关系Web服务  114

6.3 创建社会关系数据查询服务  121

6.4 创建一个社会关系Web门户:FBML  129

6.5 系统的支持功能  142

6.6 总结  147

第三部分 系统架构

第7章 Xen和虚拟化之美  151

7.1 简介  151

7.2 Xenoservers  152

7.3 虚拟化的挑战  154

7.4 半虚拟化  155

7.5 Xen的变换形式  158

7.6 改变的硬件,改变的Xen  163

7.7 经验教训  165

7.8 延伸阅读  166

第8章 Guardian:一个容错操作系统环境  169

8.1 Tandem/16,将来所有的计算机都会像这样构建 170

8.2 硬件  170

8.3 物理布局  172

8.4 处理器架构  172

8.5 处理器间总线  178

8.6 输入/输出  178

8.7 进程结构  179

8.8 消息系统  179

8.9 文件系统  183

8.10 轶闻趣事  188

8.11 弊端  189

8.12 后继者  190

8.13 延伸阅读  191

第9章 JPC:一个纯Java的x86 PC模拟程序  193

9.1 简介  193

9.2 概念验证  195

9.3 PC架构  198

9.4 Java性能技巧  199

9.5 把4GB放入4GB:这不起作用  200

9.6 保护模式的危险  203

9.7 从事一项毫无成功希望的斗争  206

9.8 劫持JVM  210

9.9 终极灵活性  220

9.10 终极安全性  222

9.11 第二次做会更好  223

第10章 元循环虚拟机的力量:Jikes RVM  225

10.1 背景  225

10.2 与运行时环境相关的传言  227

10.3 Jikes RVM简史  229

10.4 一个自足执行的运行时自举  230

10.5 运行时组件  234

10.6 经验教训  246

参考文献  247

第四部分 最终用户应用架构

第11章 GNU Emacs:滋长的特性是其优势  251

11.1 使用中的Emacs  252

11.2 Emacs的架构  254

11.3 滋长的特性  260

11.4 另外两个架构  262

第12章 当集市开始构建教堂  267

12.1 简介  267

12.2 KDE项目的历史和组织结构  269

12.3 Akonadi  274

12.4 ThreadWeaver  289

第五部分 语言与架构

第13章 软件架构:面向对象与面向函数  299

13.1 概述  299

13.2 函数式示例  302

13.3 函数式解决方案的模块性评价  305

13.4 面向对象视图  313

13.5 面向对象模块性的评价和改进  319

13.6 代理:将操作封装到对象中  323

致谢 328

参考文献 328

第14章 重读经典  331

14.1 所有东西都是对象  335

14.2 类型是隐式定义的  342

14.3 问题  348

14.4 砖块和灰浆建筑架构  352

参考资料  359

跋 漂亮地构建 363

序言

从编辑手里拿到厚厚的《架构之美》译稿时,恰巧是我刚刚讲完一场消息系统架构的讲座之后。而正是在昨天,一位想要创业的朋友跟我说要寻找一位懂得“架构”的高人与他一起创业。要知道与代码不同的是,“虚幻”的架构常常让人认为其有很多玄妙之处,只因它大多难以落在纸上。特别是与很多大师谈及架构时,经常落入他们的一些“陷阱”,并往往为自己达不到大师的精明与技巧而叹息。殊不知,被我们所津津乐道的这些架构,是他们在日常工作里经历了大量的错误、重复的尝试、无数的代码、长久的考验所积淀下来的只言片语。本书将数十人的经历与只言片语,经过深思熟虑后抽象出规律,使之可以不断复用。而另一方面,又将架构的过程娓娓道来,尝试让读者思考架构的过程与思路。在这里,更多的过程与思考被展现出来,更多的原因与为什么让我们了解。这本书里展现了很多绚丽的故事,犹如士兵阅读将军的传记一样,阅读本书将会让你更鼓起勇气追寻大师们的脚步,但永远要记住,每一滴汗水才真正是你成长路上的每一个记号,要在自己的工作里更深地去理解每一处不同,架构出属于自己的系统。感谢译者和出版者为我们带来这样一本传奇的架构故事书。

赞(0)
免责声明:本文部分文字与图片资源来自于网络,用户转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即在本文留言评论通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意。