文章目录
第25章 架构能力
人生苦短,学海无涯。
—Geoffrey Chaucer
如果软件架构值得去做,那肯定值得做好。大多数关于架构的文献都集中在技术方面。这并不奇怪,因为它是一门深奥的技术学科。但架构是由在充满真实人类的组织中工作的“架构师”创建的。与这些人打交道绝对是非技术性的工作。怎样做才能帮助架构师,尤其是正在接受培训的架构师,在工作的这一重要方面做得更好?怎样做才能帮助组织更好地鼓励其架构师做出最佳工作成果?
这一章是关于架构师个人的能力以及希望产生高质量架构的组织的。
由于一个组织的架构能力在一定程度上取决于架构师的能力,我们首先要问的是,期望架构师做什么、知道什么以及擅长什么。然后,我们将探讨组织能够而且应该做些什么来帮助其架构师构建更好的架构。个人和组织的能力是相互交织的。只了解其中之一是不行的。
25.1 个人能力:架构师的职责、技能和知识
架构师所从事的活动远不止直接构建架构。这些活动,我们称之为“职责”,构成了个人架构能力的主干。关于架构师的著述也会提及“技能”和“知识”。例如,清晰地传达想法和有效协商的能力,就是通常认为有能力的架构师所具备的技能。此外,架构师需要掌握关于模式、技术、标准、质量属性以及众多其他主题的最新知识。
职责、技能和知识构成了个人架构能力所依赖的一个三元组。这三者之间的关系如图 25.1所示——即技能和知识支持履行所需职责的能力。如果(无论出于何种原因)无限有才华的架构师不能履行该职位所需的职责,那么他们是无用的;我们不会说他们是有能力的。
图25.1 技能和知识支持履行职责。
为了给出这些概念的示例:
- “设计架构” 是一项职责。
- “抽象思考的能力” 是一项技能。
- “模式和策略” 构成知识。
这些示例特意说明了技能和知识对于有效履行职责的能力的支持是重要的(且仅止于此)。再举个例子,“为架构编写文档”是一项职责,“清晰写作的能力”是一项技能,“ISO 标准 42010”是相关知识体系的一部分。当然,一个技能或知识领域可以支持多项职责。
了解架构师的职责、技能和知识(或者更确切地说,是在特定组织环境中架构师所需要的职责、技能和知识)有助于为个体架构师制定衡量和改进策略。如果您想提高个人的架构能力,应该采取以下步骤:
- 积累履行职责的经验。学徒制是获取经验的有效途径。仅仅接受教育是不够的,因为没有在职应用的教育仅仅是增加了知识。
- 提高您的非技术技能。这方面的改进包括参加专业发展课程,例如领导力或时间管理方面的课程。有些人可能永远不会成为真正伟大的领导者或沟通者,但我们都可以在这些技能上有所提高。
- 掌握知识体系。有能力的架构师必须做的最重要的事情之一是掌握知识体系并保持其更新。为了强调跟上该领域最新进展的重要性,想想仅仅在过去几年中出现的架构师所需知识的进步。例如,几年前支持云计算的架构(第 17 章)并不重要。参加课程、获得认证、阅读书籍和期刊、访问网站、阅读博客、参加面向架构的会议、加入专业协会以及与其他架构师会面,都是提高知识水平的有用方法。
职责
本节总结了各种各样的架构师职责。并非每个组织中的每个架构师在每个项目中都会履行所有这些职责。然而,有能力的架构师如果发现自己参与到这里列出的任何活动中,都不应感到惊讶。我们将这些职责分为技术职责(表 25.1)和非技术职责(表 25.2)。您应该立即注意到的一点是,非技术职责的数量众多。对于那些希望成为架构师的人来说,一个明显的含义是,您必须充分关注您的教育和职业活动中的非技术方面。
表25.1 软件架构师的技术职责
一般职责范围 | 具体职责范围 | 职责示例 |
---|---|---|
架构 | 创建架构 | 设计或选择一种架构。创建软件架构设计计划。构建产品线或产品架构。做出设计决策。扩展细节并完善设计以收敛到最终设计。确定模式和策略,并阐明架构的原则和关键机制。对系统进行分区。定义组件如何组合在一起以及如何相互作用。创建原型。 |
评估和分析架构 | 评估一个架构(针对您当前的系统或其他系统),以确定用例和质量属性场景的满足程度。创建原型。参与设计评审。审查初级工程师设计的组件的设计。审查设计是否符合架构。比较软件架构评估技术。为替代方案建模。进行权衡分析。 | |
记录架构 | 准备对利益相关者有用的架构文档和演示文稿。记录或自动记录软件接口的文档。制定文档标准或指南。记录可变性和动态行为。 | |
处理和改进现有系统 | 维护和改进现有系统及其架构。衡量架构债务。将现有系统迁移到新技术和新平台。重构现有架构以降低风险。检查错误、事件报告和其他问题,以确定对现有架构的修订。 | |
履行架构师的其他职责 | 推销愿景。保持愿景的活力。参加产品设计会议。在架构、设计和开发方面提供技术建议。为软件设计活动提供架构指南。领导架构改进活动。参与软件过程的定义和改进。对软件开发活动进行架构监督。 | |
与架构工作之外的生命周期活动相关的职责 | 管理需求 | 分析功能性和质量属性的软件需求。理解业务、组织和客户的需求,并确保这些需求得到满足。倾听并理解项目的范围。了解客户的关键设计需求和期望。就软件设计选择和需求选择之间的权衡提供建议。 |
评估未来的技术 | 分析当前的 IT 环境,并针对不足之处推荐解决方案。与供应商合作,代表组织的需求并影响未来的产品。编写并展示技术白皮书。 | |
选择工具和技术 | 管理新软件解决方案的引入。对新技术和新架构进行技术可行性研究。从架构的角度评估商业工具和软件组件。制定内部技术标准,并为外部技术标准的制定做出贡献。 |
表25.2 软件架构师的非技术职责
一般职责范围 | 具体职责范围 | 职责示例 |
---|---|---|
管理 | 支持项目管理 | 提供关于项目的适当性和难度的反馈。协助预算编制和规划。遵循预算限制。管理资源。进行规模估算和评估。进行迁移规划和风险评估。负责或监督配置控制。制定开发进度表。使用指标衡量结果,并提高个人成果和团队的生产力。确定并安排架构发布。充当技术团队和项目经理之间的“桥梁”。 |
管理架构师团队中的人员 | 建立“值得信赖的顾问”关系。协调。激励。倡导。培训。担任主管。分配职责。 | |
组织和业务相关职责 | 支持组织 | 在组织内培养架构评估能力。审查并为研发工作做出贡献。参与团队的招聘流程。协助产品营销。建立具有成本效益且合适的软件架构设计审查制度。帮助开发知识产权。 |
支持业务 | 理解和评估业务流程。将业务战略转化为技术战略。影响业务战略。理解并传达软件架构的业务价值。帮助组织实现其业务目标。了解客户和市场趋势。 | |
领导力和团队建设 | 提供技术领导力 | 成为思想领袖。制作技术趋势分析或路线图。指导其他架构师。 |
建设团队 | 组建开发团队,并使其与架构愿景保持一致。指导开发人员和初级架构师。对团队进行架构使用方面的培训。促进团队成员的职业发展。指导软件设计工程师团队进行规划、跟踪,并在商定的计划内完成工作。指导和培训员工使用软件技术。保持架构组内外的士气。监控和管理团队动态。 |
架构师通常还会履行许多其他职责,例如领导代码审查或参与测试规划。在许多项目中,架构师会在关键领域协助实际的实现和测试。虽然这些很重要,但严格来说,它们并非架构师的职责。
技能
鉴于上一节中列举的广泛职责,架构师需要具备哪些技能?关于架构师在项目中的特殊领导角色,已经有很多论述;理想的架构师是有效的沟通者、管理者、团队建设者、有远见者和导师。一些证书或认证项目强调非技术技能。这些认证项目的常见评估领域包括领导力、组织动态和沟通。
表 25.3 列举了对架构师最有用的一组技能。
表25.3 软件架构师的技能
一般技能领域 | 特定技能领域 | 示例技能 |
---|---|---|
沟通技巧 | 对外沟通(团队之外) | 具备口头和书面沟通及展示的能力。具备向不同受众展示和解释技术信息的能力。具备知识传递的能力。具备说服的能力。具备从多个观点看问题和推销的能力。 |
对内沟通(团队内部) | 倾听、访谈、咨询和协商的能力。理解和表达复杂主题的能力。 | |
人际交往能力 | 团队关系 | 作为团队成员的能力。与上级、下级、同事和客户有效合作的能力。保持建设性工作关系的能力。在多元化团队环境中工作的能力。激发创造性协作的能力。建立共识的能力。具备外交手腕和尊重他人的能力。指导他人的能力。处理和解决冲突的能力。 |
工作技能 | 领导力 | 做出决策的能力。采取主动和创新的能力。展现独立判断、具有影响力和令人尊敬的能力。 |
工作负载管理 | 在压力下良好工作、规划、管理时间和进行估算的能力。支持广泛的问题并同时处理多个复杂任务的能力。在高压环境中有效确定任务优先级并执行任务的能力。 | |
在企业环境中出类拔萃的技能 | 具备战略思考的能力。能够在一般监督和限制条件下工作的能力。组织工作流程的能力。能够察觉组织中权力所在以及权力如何流动的能力。想尽办法完成工作的能力。具备创业精神、自信而不具攻击性以及接受建设性批评的能力。 | |
处理信息的技能 | 能够注重细节,同时保持整体视野和重点。能够纵览全局。 | |
处理意外情况的技能 | 容忍模糊性的能力。承担和管理风险的能力。解决问题的能力。具有适应能力、灵活性、开放性思维和韧性的能力。 | |
抽象思考的能力 | 能够观察不同的事物,并找到一种方法来发现它们实际上只是同一件事的不同实例。这可能是架构师所拥有的最重要的技能之一。 |
知识
一位称职的架构师对架构知识体系有着深入的了解。表 25.4 给出了架构师的一系列知识领域。
表25.4 软件架构师的知识领域
一般知识领域 | 特定知识领域 | 特定知识示例 |
---|---|---|
计算机科学知识 | 架构概念的知识 | 对架构框架、架构模式、策略、结构和视图、参考架构、与系统和企业架构的关系、新兴技术、架构评估模型和方法以及质量属性的了解。 |
软件工程知识 | 对软件开发知识领域的了解,包括需求、设计、构建、维护、配置管理、工程管理和软件工程过程。对系统工程的了解。 | |
计算机科学知识 | 设计知识 | 对工具以及设计和分析技术的了解。对如何设计复杂的多产品系统的了解。对面向对象的分析和设计以及 UML 和 SysML 图表的了解。 |
编程知识 | 对编程语言和编程语言模型的了解。对安全、实时、安全等方面的专门编程技术的了解。 | |
对技术和平台的了解 | 特定的技术和平台 | 对硬件/软件接口、基于网络的应用程序和互联网技术的了解。对特定软件/操作系统的了解。 |
技术和平台的一般知识 | 了解 IT 行业的未来发展方向以及基础设施对应用程序的影响方式。 | |
关于组织的背景和管理的知识 | 领域知识 | 对最相关领域和特定领域技术的了解 |
行业知识 | 对行业最佳实践和行业标准的了解。了解如何在在岸/离岸团队环境中工作。 | |
业务知识 | 对公司的业务实践、其竞争对手的产品、策略和流程的了解。对商业和技术战略以及业务流程再造原则和流程的了解。对战略规划、财务模型和预算编制的了解。 | |
领导和管理技术 | 如何指导、辅导和培训软件团队成员的知识。项目管理的知识。项目工程的知识。 |
那经验方面呢?
阿尔伯特·爱因斯坦说过:“知识的唯一来源是经验。” 几乎每个人都说经验是最好的老师。我们同意。然而,经验并非唯一的老师——你也可以从真正的老师那里获取知识。我们多么幸运,不必都通过烫伤自己来获得“触摸热炉子不是个好主意”这一知识。
我们将经验视为能增加架构师知识储备的东西,这就是为什么我们不单独对待它。随着您职业生涯的发展,您将积累自己丰富的经验,并将其作为知识存储起来。
正如那个老笑话所说,在纽约,一位行人拦住一位路人问道:“不好意思。您能告诉我怎么去卡内基音乐厅吗?”碰巧是音乐家的这位路人长叹一口气回答道:“练习,练习,练习。”
的确如此。
25.2 软件架构组织的能力
组织通过其实践和结构,推动或者是阻碍架构师履行职责。例如,如果一个组织为架构师设有职业发展路径,这将激励员工成为架构师。如果一个组织设有常设的架构审查委员会,那么项目架构师将知道如何以及与谁安排审查。如果没有这些实践和结构,这意味着架构师必须与组织斗争,或者在没有内部指导的情况下确定如何进行审查。因此,询问特定组织在架构方面是否有能力,并开发旨在衡量组织架构能力的工具是有意义的。组织的架构能力是本节的主题。以下是我们的定义:
一个组织的架构能力是指该组织在个人、团队和组织层面上培养、运用和维持有效开展以架构为中心的实践所需的技能和知识的能力,以产生成本可接受的架构,从而形成与组织业务目标相一致的系统。
组织对于架构有职责、技能和知识,就像个体架构师一样。例如,为架构工作提供充足的资金是一项组织职责,有效地利用现有的架构人力(通过适当的团队组建和其他方式)也是如此。这些是组织职责,因为它们不受个体架构师的控制。组织层面的技能可能是应用于架构师的有效的知识管理或人力资源管理。组织的知识的一个例子是软件项目可能采用的基于架构的生命周期模型的构成。
以下是组织为帮助提高其架构工作的成功率可以履行的一些事项(职责):
- 人员相关:
- 流程相关:
- 技术相关:
如果您正在一个组织中面试架构师的职位,您可能会有一系列问题来决定是否愿意在那里工作。对于那个问题清单,您可以添加从前面的列表中提取的问题,以帮助您确定该组织的架构能力水平。
25.3 成为更优秀的架构师
架构师如何成为优秀的架构师,优秀的架构师又如何成为杰出的架构师?在本章的结尾,我们提出一个建议,那就是:接受指导,并指导他人。
接受指导
虽然经验可能是最好的老师,但在一生中,我们大多数人都没有足够的幸运能够亲自获得使我们成为杰出建筑师所需的所有经验。但我们可以间接获取经验。找一位您尊敬的熟练建筑师,并与他/她建立联系。了解您所在的组织是否有您可以参加的指导计划。或者建立一种非正式的指导关系——找借口互动、提问或主动提供帮助(例如,主动提出担任评审员)。
您的导师不一定非得是同事。您还可以加入专业社团,在那里您可以与其他成员建立导师关系。有聚会。有专业的社交网络。不要把自己局限于所在的组织。
指导他人
你也应该愿意指导他人,以此作为回报或传递那些丰富了你职业生涯的善意的一种方式。但指导他人也有一个自私的原因:我们发现,教授一个概念是检验我们是否深刻理解该概念的试金石。如果我们无法教授它,很可能我们并没有真正理解它——所以这可以成为你在该行业中教导和指导他人的目标的一部分。优秀的教师几乎总是会表示他们很高兴能从学生身上学到很多,以及学生的探索性问题和令人惊讶的见解如何加深了教师对该学科的更深入理解。
25.4 小结
当我们想到软件架构师时,通常首先想到的是他们所产出的技术工作。但是,正如架构远不止是系统的技术“蓝图”一样,架构师也远不止是架构的设计者。这促使我们以更全面的方式去理解,架构师和以架构为中心的组织要想成功必须做些什么。架构师必须履行职责、磨炼技能,并持续获取成功所需的知识。
成为一名优秀乃至更出色的架构师的关键在于持续学习、指导他人以及接受他人的指导。
25.5 扩展阅读
探究一个组织能力的问题可以在技术说明“评估和提高架构能力的模型”中找到,sei.cmu.edu/library/abstracts/reports/08tr006.cfm 。
开放组织有一个针对信息技术、业务和企业架构师的技能、知识和经验进行资格认证的项目,这与衡量和认证个体架构师的能力有关。
信息技术架构知识体系(ITABoK)是一个“免费的公共知识库,包含了从全球最大的信息技术架构专业组织 Iasa 的个人和企业成员的经验中发展而来的信息技术架构最佳实践、技能和知识”(https://itabok.iasaglobal.org/itabok/)。
Bredemeyer 咨询公司(bredemeyer.com)提供了大量关于信息技术、软件和企业架构师及其角色的资料。
约瑟夫·因杰诺(Joseph Ingeno)在《软件架构师手册》中专门用了一章来论述“软件架构师的软技能”,还用了另一章来论述“成为更优秀的软件架构师” [Ingeno 18] 。
25.6 问题讨论
1. 在本章所讨论的技能和知识中,你认为自己可能最缺乏哪些?您将如何减少这些不足?
2. 你认为对于个体架构师而言,改进哪些职责、技能或知识是最重要或最具成本效益的?请说明您的理由。
3. 增加三项我们的列表中没有的职责、三项技能和三个知识领域。
4. 你将如何衡量项目中特定架构职责的价值?你将如何区分这些职责所增加的价值与诸如质量保证或配置管理等其他活动所增加的价值?
5. 你将如何衡量某人的沟通技能?
6. 本章列出了一个具备架构能力的组织的许多实践。根据预期收益超过预期成本的情况对该列表进行优先级排序。
7. 假设你负责为公司的一个重要系统招聘一名架构师。你将如何进行?在面试中您会问候选人什么问题?你会要求他们提供任何东西吗?如果是,是什么?你会让他们参加某种测试吗?如果是,是什么?你公司里会让谁来面试他们?为什么?
8. 假设你是被招聘的架构师。关于你正在面试的公司,你会问哪些与 第 25.2 节 中列出的领域相关的问题?尝试从职业生涯早期的架构师的角度回答这个问题,然后再从具有多年经验的高技能架构师的角度回答。
9. 搜索架构师的认证项目。对于每个项目,尝试描述它分别在职责、技能和知识方面的涉及程度。