新書推薦:

《
分肥游戏:古代中国权力分配规则
》
售價:HK$
70.6

《
结构 Structures(埃隆马斯克推荐读物之一,经典又实用的结构力学普及读物)
》
售價:HK$
93.2

《
影响世界的十八个定律:破解万物运行规律人类,如何用公式定义世界?
》
售價:HK$
65.8

《
道教大辞典·道教百科全书(通识版本+飞机盒): 附赠32张海报:神仙谱系大全x1、道教宗派与法术全鉴x1、时间线上的道教史x1
》
售價:HK$
327.8

《
伦理学与生活(第11版)
》
售價:HK$
118.8

《
巴格达新版 和平之城 血腥之城 汗青堂丛书055
》
售價:HK$
118.8

《
水之契约
》
售價:HK$
79.2

《
ABB工业机器人离线编程与仿真
》
售價:HK$
130.9
|
編輯推薦: |
深入解析软件架构核心范式,提供将软件架构技能和知识应用于更为庞大、复杂的产品开发流程之中的方法论 解构架构实践关键要素,融合前沿技术与实战策略,赋能架构师团队高效协同 这是一本必不可少的实践手册,它将软件架构作为产品开发组织和流程中的有效实践,同时使得整个软件团队达成共识、步调一致。架构师界的前辈奥利弗·戈德曼(Oliver Goldman)以全面的视角阐述了完成这项工作所需的一系列实际技能:可预测、可重复的设计流程;迅速有效地做出决策的能力;全面一致的沟通策略;提升效率的工具;一个整体大于部分之和的团队。戈德曼以引人入胜的文字诠释了软件架构对于构建优秀软件产品的重要性。本书的目标不是专注于特定的架构风格或技术,而是让软件架构师更好地管理变更、设计、决策以及团队沟通,同时帮助软件产品经理、项目经理、用户体验设计师和其他团队成员理解架构在软件开发过程中的作用。本书所呈现的内容对于帮助整个团队取得成功至关重要。 通过本书,你将: 理解软件架构及其在产品开发中的作用。 学习如何在架构实践中有效地沟通。 采用有效的架构策略以获得一致、可靠的设计成果。 使架构成为产品开发不可或缺的一个组成部分。
|
內容簡介: |
本书旨在阐释如何将软件架构技能和知识应用于更为庞大、复杂的产品开发流程中。书中对软件架构进行了定义,明确了软件架构在产品开发团队众多专业领域中的定位和作用,以及架构与和它关联的概念、流程、标准等要素的多个连接点,并深入探讨“变更”这一主题,以及架构实践的核心——识别、管理和设计系统的变更。同时,探讨规模较大的项目中至关重要的考量因素——管理和沟通,以及如何选择架构师团队的组织结构,架构师如何与组织内其他专业部门互动。本书适合软件架构师、架构师团队管理者以及产品管理、用户体验、项目管理等领域的读者阅读。
|
關於作者: |
奥利弗·戈德曼(Oliver Goldman)在Autodesk公司领导AEC软件架构的实践工作。他在分布式实时交互、科学计算、金融系统、移动应用程序开发和云计算架构等领域拥有30多年的行业经验,曾在Adobe等公司交付过众多的创新产品。他拥有斯坦福大学计算机科学的两个学位,是50多项美国软件专利的发明人,并曾为Dr. Dobb’sJournal杂志撰稿。
|
目錄:
|
目 录本书赞誉译者序前言致谢关于作者第1章 软件架构1.1 基础架构 ……………………………21.2 系统概述 ……………………………31.3 在组件中的体现 ……………………41.4 组件之间的关系 ……………………61.5 系统与环境的关系 …………………71.6 决定设计的原则 ……………………91.7 架构演进 …………………………111.8 总结 ………………………………13第2章 架构的背景2.1 概念 ………………………………152.2 可靠性 ……………………………172.3 具有重要架构意义的需求 ………182.4 产品家族 …………………………202.4.1 一款产品,多平台发布 …202.4.2 产品线 ……………………222.4.3 产品套件 …………………232.4.4 跨平台的平台 ……………242.5 平台建设 …………………………252.6 标准规范 …………………………272.7 总结 ………………………………29第3章 变更3.1 变更的阶段 ………………………313.2 变更的类型 ………………………323.3 产品驱动型变更 …………………333.4 技术驱动型变更 …………………353.5 简洁性 ……………………………363.6 投资思维 …………………………393.7 增量交付 …………………………423.8 架构演进 …………………………443.9 总结 ………………………………47第4章 流程4.1 编写系统文档 ……………………494.2 奔向愿景 …………………………514.3 撰写变更提案 ……………………524.4 维护待办事项列表 ………………544.5 考虑其他可行方案 ………………554.6 学会说不 …………………………584.7 紧急性与重要性 …………………594.8 重新编写系统文档 ………………594.9 总结 ………………………………60第5章 设计5.1 如何加速架构设计 ………………645.2 设计如何驱动架构演进 …………665.3 分解 ………………………………675.4 组合 ………………………………695.5 组合与平台 ………………………705.6 循序渐进 …………………………715.7 并行处理 …………………………725.8 组织结构 …………………………735.9 在开放环境下工作 ………………745.10 放弃 ………………………………765.11 完成 ………………………………775.12 总结 ………………………………77第6章 决策 ………………………………796.1 更多的信息会有所帮助吗 ………806.2 决策期间发生了什么 ……………816.3 有多少决策正在进行 ……………826.4 不这样做的代价是什么 …………836.5 我能接受这个变更吗 ……………846.6 犯错的代价是什么 ………………866.7 我能有多大把握 …………………876.8 这是我应该做的决策吗 …………886.9 决策是否符合要求 ………………896.10 应该将决策记录下来吗 …………906.11 总结 ………………………………91第7章 实践 ………………………………937.1 待办事项列表 ……………………947.2 目录 ………………………………977.3 模板 ………………………………987.4 评审 ………………………………1007.5 状态 ………………………………1037.6 速度 ………………………………1057.7 思考 ………………………………1077.8 总结 ………………………………108第8章 沟通 ……………………………1108.1 心智模型 …………………………1118.2 写作 ………………………………1138.3 谈话 ………………………………1158.4 信息架构 …………………………1178.5 命名 ………………………………1228.6 词典 ………………………………1248.7 倾听 ………………………………1268.8 总结 ………………………………128第9章 架构团队 ………………………1299.1 专业化 ……………………………1309.2 组织结构 …………………………1319.3 领导力 ……………………………1359.4 责任 ………………………………1379.5 人才 ………………………………1399.6 多样性 ……………………………1409.7 文化 ………………………………1409.8 聚会 ………………………………1429.9 研讨会与峰会 ……………………1439.10 总结 ………………………………144第10章 产品团队 ……………………14510.1 开发方法论 ………………………14610.2 与产品管理部门合作 ……………14810.2.1 提供帮助 ………………15110.2.2 其他成果 ………………15210.2.3 设定边界 ………………15310.3 与用户体验团队合作 ……………15410.4 与项目管理团队合作 ……………15510.5 与工程团队合作 …………………15710.6 与测试团队合作 …………………16110.7 与运营团队合作 …………………16310.8 总结 ………………………………166结论 ………………………………………167参考文献 …………………………………171
|
內容試閱:
|
前 言坦率地说,当我从大学计算机科学专业毕业时,我对打造一款软件的科学原理只具备一个外行人的粗浅理解。我学习过数据库、算法、编译器、图形学、CPU架构、操作系统、并发性等知识,并且在某种程度上,我还拥有一个将这些技术联系起来的框架。由于我经常在课堂之外编写软件(主要是暑期工作),因此我深知将学术知识用于实际产品开发面临多重挑战。选择和实现合适的算法通常只是其中相对容易的部分,真正的困难之处在于如何处理庞大的代码库,如何创建实用的用户体验,如何进行质量和性能测试,以及如何与团队成员协同开发同一个产品。毕业后,我从事过一系列软件产品的开发工作。尽管大多数项目并未取得成功,但我始终秉持着从经验中学习的态度。如果说“从失败中学习”这一老生常谈的观点是正确的,那么在那段时间里,我确实收获颇丰。在参与多个不同项目的过程中,我发现与大多数同行相比,自己往往对产品有更系统性的理解,能够更清晰地认识到产品的内部组件及其相互之间的关系。尽管我当时并未完全意识到,但这种洞察全局并进行推理的能力实属一种难得且相当有用的技能。软件架构的实践旨在全面理解软件系统的所有组件及其相互之间的关系。“架构”一词并非软件行业独创,它实际上来源于建筑行业,并适用于各种类型的产品。例如房屋、汽车、电视、火箭,都有各自的架构。如果我是一名火箭科学家,我可能更关注火箭的各部分如何协同工作,而非特定阀门或喷嘴的设计。当然,这只是假设,毕竟我现在从事的是软件领域的工作。回顾我几十年的行业生涯,软件产品的复杂性发生了翻天覆地的变化。在我职业生涯的初期,一个可行的软件产品指的就是能够盈利的产品,仅需要一张软盘的容量,一次只能在一台计算机上运行,而且无法连接互联网。如今,一个在“云端”运行的软件产品可能包含数百个相互协调的程序,这些程序运行在多个地理位置分散的节点上,每天更新数次,并被期望能够永远不间断地运行(尽管有时也会出现中断)。在较短的时间内,软件产品的本质已经发生了根本性的变化。软件架构的演进使其比以往任何时候都更加复杂,也更加重要。复杂性体现在需要管理和追踪的组件和关系的数量激增。重要性则体现在如果无法有效管理这些关系,系统的复杂性将不可避免地限制其可靠性和未来开发的速度,最终导致大多数产品的终结。我个人也曾目睹过这种情况的发生。软件架构的意义远不止于管理复杂性,但如果要评选架构作为一门学科最有价值的成果,那么非它莫属。复杂性会对软件的功能造成全方位的损害:它会导致软件行为难以预测,进而损害用户信任;它会导致缺陷,降低软件的可靠性;它会传播故障,将不起眼的错误演变成大规模的故障;它还会阻碍人们对于软件的理解,最终导致任何简化软件状态或结构的尝试都以失败告终。总而言之,复杂性是软件的大敌,而规范的架构实践则是对抗它的最佳武器。在我职业生涯的后期,我有幸带领团队负责多个大型复杂软件产品的架构设计。这些产品均已问世十多年,并非全新的产品。我的工作内容与其他架构师别无二致,首先要完成以下任务:了解系统当前的架构,评估其是否满足当前和预期的需求,并提出和评估改进方案。我将在本书后面的章节中详细讨论如何完成这些工作。虽然上述活动必不可少,但将它们与软件架构等同,就好比上过几节计算机课程便声称自己会写软件。这仅是一个良好的开端,要真正使软件架构成为软件开发中不可或缺且成功的部分,还有很长的路要走。而这也正是本书的意义所在:如何在软件开发组织中进行架构实践。专注力本书并非软件架构指南,不会阐述客户端-服务器、领域驱动设计、感知-计算-控制等架构风格,也不会探讨如何选择数据库技术、进行区域化部署或实施扩展性设计。当然,这些都是重要的话题,已经有众多的书籍、博客和其他资源对此进行了详细介绍,也有很多架构师精通这些领域。但是,仅掌握归并排序算法的实现方法,并不足以编写出一个应用程序;同样,仅熟悉某种特定架构,也远不足以创建出应用该架构的系统。归并排序算法或许可以由一名工程师单独完成,而系统架构的设计则必然涉及更多人员的参与。本书旨在阐释如何将软件架构技能和知识应用于更为庞大、复杂的产品开发流程之中。本书没有局限于特定的架构风格,而是对软件架构进行了定义,明确了它在产品开发团队众多专业领域中的定位和作用,并明确架构与和它关联的概念、流程、标准等要素的多个接触点。我们将深入探讨“变更”这一主题。识别、管理和设计系统的变更是架构实践的核心。架构设计的过程有时如同一个“黑盒子”,对话从一端进入,一个完整的设计方案从另一端产出。实际上,变更的过程是持续进行的,并且由一系列独立的步骤组成。为使这些步骤清晰可见,并引导它们稳步向前,我们所能做的一切努力都将改善整个过程。工程设计就是在进行利弊的权衡,开发和演进系统的过程需要不断地做出设计决策。每个决策都会打开一些路径,同时关闭另一些路径;或者,当我们发现沿一条路径会走到死胡同时,就需要推翻先前的决策。如何做出这些决策本身就是一项关键的技能。项目团队做出的正确决策越多,浪费在重新决策上的时间就越少。而且,越是快速地做出正确决策,项目就越能更快速地推进。在任何规模较大的项目中,管理和沟通都是至关重要的考量因素。我们需要明确哪些决策已经敲定,哪些决策仍在讨论中。同时,我们还需要统一描述系统的词汇,并阐明选择当前架构的原因。总而言之,工具、流程和沟通是项目顺利进行的关键所在。最后,我们将探讨组织环境中的架构团队,包括将软件架构师定义为一个独立角色。我们会考虑架构团队的组织结构的选择,以及架构师如何与组织内其他专业部门互动。此外,还将探讨如何发现、培养和发展架构人才。动机软件系统的复杂程度与日俱增。我们早已习惯能够在各种设备上随时随地获取所需信息和工具的产品,这些产品服务于全球数十亿用户,而创建和运营此类系统所面临的挑战,已远非几十年前简单的独立软件产品所能比拟。软件架构在构建和运行大规模系统中扮演着独特且至关重要的角色。尽管软件架构只是众多协作学科中的一员,但它尤其需要具备“全局观”,即能够理解系统中所有元素如何协同工作,以及如何随着时间的推移而演进系统结构。在过去20多年中,架构师在开发应对这些挑战的技术和方法方面取得了巨大的进步。一个组织在软件架构方面做得越好,就越能按时交付高质量的软件。尽管如此,大多数产品开发组织在软件架构方面的表现仍有许多提升空间。我曾在接手一个全新的项目时对此深有体会。当时我负责领导一个经验丰富的架构师团队。就个人能力而言,这些架构师都能够胜任软件设计工作。然而,他们并未有效地整合自身的技能,从而为团队的目标做出更大的贡献。他们在文档记录、流程梳理和沟通交流方面的投入明显不足。因此,该架构团队表现不佳,难以确定工作的优先级,有时甚至将精力用在错误的问题上。由于缺乏高效的决策流程,他们难以做出决策并贯彻执行。此外,他们在记录工作方面缺乏一致性,导致工作成果有时会被忽略或需要重新获取。该项目复杂且非常重要,需要投入大量的架构资源。然而,尽管该团队的成员拥有大量架构经验,但他们的表现却令人大失所望。当与新团队的成员交流时,我意识到他们能够察觉到问题的存在—知道团队正处于困境—但无法确定问题的根源。就个人而言,他们都具备软件架构设计的能力;但作为团队整体,却不知如何有效地实践软件架构。他们缺乏必要的组织结构,无法将个人的努力凝聚成团队的合力,也无法将软件架构工作有效地融入更大的组织之中。正是那段经历直接促成了本书的创作。这些架构师拥有数十年的工作经验,但如果连他们都不了解如何开展有效的架构实践,那么很可能还有许多同行也处于同样的困境。诚然,软件文献中并非完全忽略了架构团队的管理和运作,但对此也缺乏广泛、深入的探讨。例如,Taylor、Medvidovic和Dashofy于2010年出版的Software Architecture: Foundations, Theory, and Practice一书共有675页,其中仅有3%的篇幅涉及“人员、角色和团队”。我个人收藏了大量软件架构相关的图书,而关于这一主题却仅此一本。因此,我决定补上这一空白。受众本书面向软件架构师、架构师团队的管理者,以及他们在产品管理、用户体验、项目管理等相关领域的同行。软件开发是一个需要多学科协作的领域,所有这些学科都需要协同工作。本书将阐释软件架构作为一个学科的定义,以及它在软件开发中的作用,并介绍架构师和架构团队的运作方式,希望能够使所有相关人员从中受益。本书为架构师提供了与其自身的方法进行比较的指导。无论从业的年限如何,读者都能从中发现新的见解。软件架构领域尚处于发展初期,缺乏被广泛接受的知识体系以及一致或规范的实践方法。本书也适用于所有与软件架构团队合作的人员。随着项目的扩展,团队成员的角色会逐渐分化:产品经理专注于需求,测试团队负责创建测试计划,安全团队则致力于开发威胁模型。每个角色都有其专业领域。然而,所有这些工作最终都必须整合在一起,形成一个有机的整体,这就要求每个人都了解这些功能是如何相互配合的。换言之,他们必须了解系统的架构。本书将帮助所有参与软件项目的相关人员理解软件架构在实现目标方面所起的作用,并提供清晰易懂的关于架构的描述。最后,本书尤其适合负责管理或创建架构团队的管理人员阅读。书中会详细阐释软件架构的工作原理,帮助管理人员深入了解架构功能,从而判断现有架构是否满足实际需求,并在招聘新成员时明确自己的目标。成功高效的软件架构功能能够帮助产品开发组织更快地构建优质软件。软件架构作为一门学科,致力于应对软件开发过程中最为棘手的挑战:组织各个系统,管理变更与复杂性,以及设计兼具效率与可靠性的系统。拥有出色架构的软件系统不仅能够运行良好,还能随着时间的推移保持优良的性能。反之,架构不佳的系统则往往会以令人大跌眼镜的方式走向失败。成功的软件架构实践还能够将这些能力与产品开发过程中更广泛的挑战相结合。架构师具备了整合各方需求的得天独厚的优势,因此能够设计出一个具有凝聚力的整体,而不是彼此割裂的独立部分的简单集合。同时,得益于这种对全局的掌控,他们也能够清晰地向所有人阐释这些部分是如何构成一个有机体的。要想出色地完成这项任务,需要的不仅是计算机科学的学位和相关架构风格的经验,更重要的是需要具备以下能力:创建可预测且可重复的变更流程;快速有效地制定决策;建立一个能够不断进步和提升的团队。简而言之,软件架构对我们开发和交付适用软件的能力的影响与日俱增。我希望本书能为广大读者及组织提供指导,以期开展更加高效的软件架构实践。
|
|