系统架构设计师-第0章-学习路线
第0章-学习路线
架构设计师的定义、职责和任务
架构师的定义
架构设计师是系统开发的主体角色,他们通过执行一系列活动来实施架构设计。架构设计通过生成过程形成最终的产品架构,架构设计师的成果是创建架构。从图1可以看出,系统开发中架构设计师是整个系统的核心.
架构设计师是负责系统架构的人、团队或组织。架构设计师是系统或产品线的设计责任人,是一个负责理解和管理并最终确认和 评估非功能性系统需求(如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等), 给出开发规范,搭建系统实现的核心构架,对整个软件架构、关键构件和接口进行总体设计并 澄清关键技术细节的高级技术人员。
架构设计师的职责
架构设计师的职责应该是技术领导,这意味着架构设计师除了拥有专门技能外,还必须拥有领导能力。首先,领导能力既体现在组织中的职位上,也体现在架构设计师展现的品质上。 在组织中的职位方面,架构设计师是项目中的技术领导,应该拥有进行技术决策的权威。项目经理更关注管理资源、进度和成本方面的项目计划,架构设计师和项目经理代表了这个项目的公共角色。在架构设计师展现的品质方面,领导力也可以在与其他团队成员的交流中展现出来, 架构设计师应该为他人树立榜样并在制定方向方面表现出自信。成功的架构设计师是以人为导 向的,都应在指导并培养他们团队的成员上花时间,以保证团队成员能够在后续项目的开发中能够完整地理解架构设计师的设计思路。其次,拥有专门技能主要体现在除了必须非常清楚项目的总体目标和实施方法外,还应是特定的开发平台、语言、工具的大师,对常见应用场景能及时给出最恰当的解决方案,同时要对所属的开发团队有足够的了解,能够评估该开发团队实现特定的功能需求目标的资源代价。架构设计师必须非常关注交付的实际结果,并必须赋予项目在技术方面的驱动力,还必须能够进行决策并确保这些决策被传达、理解并始终被执行。
架构设计师的任务与组成
架构设计师在项目中的主要任务可概述如下。
- 领导与协调整个项目中的技术活动(分析、设计和实施等)。
- 推动主要的技术决策并最终表达为系统架构。
- 确定系统架构,并促使其架构设计的文档化,这里的文档化应包括需求、设计、实施和部署等“视图”。
从技术角度看,架构设计师的职责就是抽象设计、非功能设计和关键技术设计等三大任务。
架构设计师角色可以由一个人或一个团队来履行。在角色和人之间是存在差异的,如一个 人可能会履行多个角色。由于架构设计师需要非常广泛的技能,所以架构设计师角色通常由多个人履行。这种方式允许技能分布于多个人,每个人都能充分运用他自己的经验。特别是在理 解业务领域和掌握各个方面技术所必须的技能上,往往由几个人才能很好地覆盖。
这个团队是拥有共同目标和执行目标,拥有使他们可以相互负责的方法,同时技能相互补 充的一小部分人。
如果架构设计师角色由一个团队履行,拥有一个首席架构设计师角色非常重要,他不仅具有先知先明的能力、还是架构团队的单点协调人。没有这个协调人,架构团队的成员要创造出内聚的架构或做出决策是困难的。
优秀的架构设计师应知道他的优势和弱势。无论架构设计师的角色是否由一个团队来履行, 架构设计师都应有好几个可信顾问的支持,这样架构设计师不仅可以了解其弱点,还可以通过获取必要的技能或与他人一起合作来弥补其知识的缺陷,进而弥补这些弱点。最优秀的架构通常由一个团队而不是个人创建,这仅仅因为当有多人参与进来时,使见识更广和更深。
架构设计师应具备的专业素质
架构设计师作为项目的技术领导,他应熟悉业务领域知识并熟练掌握软件开发知识。一个优秀的架构设计师通常可以做到在软件开发知识和业务领域知识之间的平衡。因此,架构设计师应该具备以下专业知识。
- 掌握业务领域的知识
领域是从事于某一行业的人理解并归纳的一组概念和术语知识或者活动范畴。当架构设计师理解软件开发但不理解业务模型时,可能会开发出一个不能满足用户需求而只能反映该架构设计师所熟悉内容的解决方案,因此,熟悉业务也使得架构设计师能够预见可 能发生的改变。由于架构受其部署环境(包括业务领域)影响很大,对业务领域的正确认识可 使架构设计师能够在可能改变的区域和稳定性方面做出更全面的决策。 - 掌握技术知识
由于架构设计的某些方面明确需要技术知识,所以一个架构设计师应该拥有一定程度的技术水平。然而架构设计师不必是一个技术专家,它必须关注技术的重要因素,而不是细节。架构设计师需要理解像JavaEE或.NET这类平台上的可用关键框架,但是不必理解访问这些平台可用的每个应用程序接口(API)的细节。由于技术的发展相当快速,架构设计师必须跟得上这 些技术的发展。 - 掌握设计技能
设计过程是架构设计的核心内容,架构是关键设计决策的具体化,因此,架构设计师应该拥 有很强的设计技能。关键设计决策指关键结构设计决策、特定模型的选择和指导规格说明书等。为了保证系统的结构完整性,这些元素被代表性的广泛应用并对系统取得成功产生深远的影响。因此,这样的元素应该由拥有相当技能的人识别出来。设计能力不可能在短时间内获得,而是多 年经验积累的结果,因此,一个优秀的架势设计师是要经过多年工作实践才能成为技术领导。 - 具备编程技能
项目中的开发人员是架构设计师必须与之打交道的最重要的团队成员,而项目的最终产品是可执行代码,只有架构设计师承认开发人员的工作价值时,在架构设计师和开发人员之间的沟通才是有效的,尤其是在项目开发后期的缺陷更改时,双方的沟通尤为重要。因此,架构设计师应该具有一定的编程技能,即使他们在项目中不必编写代码,也必须跟上技术的更新。优秀的架构设计师通常会有组织地参与开发并应该编写一定量的代码,如果架构设计师参与代码 实现,开发组织会从架构设计师那儿获得见识,这些见识可以直接有益于架构的专业知识本身。架构设计师还可以通过查看他们决策和设计的第一手结果,对开发流程给出反馈。 - 具备沟通能力
与架构设计师相关的所有软技能中,沟通最重要。架构设计师应该具备有效的口头和书面表达能力。有效的沟通可使开发组织能够充分理解架构设计师的思想,同时开发组织也能够及时将架构设计实现中遇到的问题及时反馈给架构设计师。有效的沟通是项目成功的基础。
架构设计师能够有效地与利益相关方沟通,对于理解他们的需求及与他们就架构达成并保持一致是非常重要的。架构设计师不是简单地将信息传达给团队,还要激励团队,架构设计师负责传达系统愿望,以便这个愿望为大家共享,而不是只有架构设计师理解并相信。 - 具备决策能力
决策是架构设计师必须具备的能力,尤其是在很多不很明确的情况下,而且没有充足的时间研究所有可能性时,架构设计师不能果断决策会延误项目,失去信任。优秀的架构设计师应承认这种情况,即使在决策时咨询其他人并营造共同参与决策的环境,进行适当的决策仍然是架构设计师的职责,而这些决策并不总是正确的,但是架构设计师必须学会纠正这些错误决策。 - 知道组织策略
成功的架构设计师并不仅仅关心技术,他们还应对政治敏感并知道其在组织中的权利,他们利用这些知识与恰当的人进行沟通,并确保项目在适当的周期中获得支持。 - 应是谈判专家
架构设计师需要与许多利益相关者进行交流,其中的一些交流需要谈判技巧。架构设计师应特别关注的一点是在项目中尽可能早地把风险降到最低,这对稳定架构所花费的时间有直接影响。因为风险与需求有关,消除风险的一个途径是通过精炼需求以使这种风险不再出现,因此,必须回退需求以便利益相关者和架构设计师达成一致。这种情形要求架构设计师是一位有效的谈判专家,能够清晰明白地表明各种折中方案的后果。
架构设计师的知识结构
架构设计师综合的知识能力结构主要包括10个方面。
- 战略规划能力。
- 业务流程建模能力。
- 信息数据架构能力。
- 技术架构设计和实现能力。
- 应用系统架构的解决和实现能力。
- 基础IT知识及基础设施、资源调配的能力。
- 信息安全技术支持与管理保障能力。
- IT审计、治理与基本需求的分析和获取能力。
- 面向软件系统可靠性与系统生命周期的质量保障服务能力。
- 对新技术与新概念的理解、掌握和分析能力。
系统架构设计师必须是开发团队的技术引导者。他们应具有很强的系统思维能力,在项目中需要能够从大量互相冲突的系统方法和工具中,判断出哪些是有效的或者是无效的,并在关键时刻能够做出科学的决策。这样,就要求架构设计师应当是一个思维敏捷、经验丰富、技术水平高超、受过良好教育的善于学习与沟通且决策能力强的人。他必须广泛了解各种技术并精通一种特定技术,至少了解计算机通用技术以便确定哪种技术最优,或组织团队开展技术评估。 优秀的架构设计师能考虑并评估所有可用来解决问题的总体技术方案。架构设计师需要拥有良好的书面和口头沟通技巧, 一般通过可视化模型和小组讨论进行沟通并指导团队,从而确保开发人员按照架构建造系统。
因此,系统架构设计师应该是一种综合性特强的人才,其知识维度可以满足多层次、多方 面的能力。多层次是指架构设计师应在技术领域的深度上掌握更多的基础知识,即必须在体系 结构、计算机软硬件与网络基础知识、系统工程、信息系统、嵌入式系统、软件安全与可靠性等知识层面上受过良好教育并拥有自学习能力;还须在架构设计方法、架构模式、开发流程以 及各种模型等方面有丰富的经验,广泛了解各种产品和技术并精通一种特定领域的架构设计方 法。多方面是指架构设计师应在业务领域以及管理、商务、财务和法律等方面具备一定背景知 识并熟悉相关政策,这与系统架构设计师的多角色特点是紧密相关的。
架构设计师学习路线图
计算机系统基础知识
系统架构师首先需要深入理解计算机系统的基本构成和工作原理。这包括硬件、操作系统、网络等方面的知识。此外,对于分布式系统、并行计算等概念也需要有深入的理解。
信息系统基础知识
在深入理解了计算机系统的基础上,系统架构师需要掌握信息系统的基本概念、设计原则和开发方法。这包括对数据库系统、Web技术、应用服务器等技术的了解。
信息安全技术基础知识
随着信息系统的普及,信息安全问题日益突出。系统架构师需要具备信息安全的基本知识,了解常见的安全威胁和防护措施,能够设计出安全可靠的系统架构。
软件工程基础知识
软件工程是系统架构设计的重要基础。系统架构师需要了解软件开发生命周期、软件开发过程模型、软件质量保证等方面的知识,能够运用软件工程的方法和技术进行系统设计和开发。
数据库设计基础知识
数据库是信息系统的核心组成部分,系统架构师需要掌握数据库设计的基本原则和方法,了解关系型数据库和非关系型数据库的区别和联系,能够根据实际需求进行合理的数据库设计。
系统架构设计基础知识
系统架构设计是系统架构师的核心职责。需要掌握各种常见的系统架构设计方法和技术,包括分层架构、事件驱动架构、微服务架构等。此外,还需要了解各种架构风格和模式,能够根据实际需求选择合适的架构方案。
系统质量属性与架构评估
系统质量属性是衡量系统性能的重要指标,系统架构师需要了解常见的系统质量属性和评估方法,能够对设计的系统架构进行全面的评估和优化。
软件架构的演化和维护
随着业务需求和技术环境的变化,软件架构也需要不断地演化和维护。系统架构师需要了解如何进行软件架构的演化和维护,包括架构重构、持续集成和持续交付等方面的知识。
软件可靠性基础知识
软件可靠性是衡量软件质量的重要指标之一。系统架构师需要了解软件可靠性的基本概念和评估方法,能够设计出高可靠性的软件架构。
未来信息综合技术
随着技术的发展,新的信息技术不断涌现。系统架构师需要关注未来的信息技术趋势,了解云计算、人工智能、物联网等新兴技术,能够将这些技术应用到实际的系统架构设计中。
大数据系统架构设计理论与实践
大数据技术的兴起使得数据成为重要的生产要素。系统架构师需要掌握大数据系统架构设计的基本原理和方法,了解大数据处理流程和常见的大数据技术,能够设计出高效、可扩展的大数据系统架构。
安全架构设计理论与实践
安全是信息系统的重要保障。系统架构师需要深入理解安全架构设计的基本原理和方法,了解常见的安全威胁和防护措施,能够设计出安全可靠的系统架构。同时,还需要了解如何进行安全测试和风险评估,确保系统的安全性。
通信系统架构设计理论与实践
通信是信息系统的重要基础。系统架构师需要了解通信系统架构设计的基本原理和方法,了解各种通信协议和技术,能够设计出高效、可靠的通信系统架构。
嵌入式系统架构设计理论与实践
嵌入式系统是现代智能设备的重要组成部分。系统架构师需要掌握嵌入式系统架构设计的基本原理和方法,了解常见的嵌入式系统技术和开发流程,能够设计出高效、可靠的嵌入式系统架构。