上一篇聊到了软件架构的基本属性,本篇聊聊架构的创建者:架构师。架构师这个角色在任何软件开发项目中都是最有挑战性的。架构师是项目中的技术领导,承担着技术成功或失败的责任。
       作为项目的技术领导,架构师必须拥有更广而不是更深的技能(虽然架构师们在某些特定的领域应该拥有高深的技能)。
1.架构师是技术领导
       首先,架构师是技术领导,这意味着架构师除了拥有专门的技能外,还必须拥有领导才能。领导能力即体现在组织中的职位上,也体现在架构师展示的品质上。
       在组织的职位上,架构师是项目中的技术领导,应该拥有技术决策的权威。另一方面,项目经理更关注于管理在资源、进度和成本方面的项目计划。
       架构师也应该参与到决定如何组建团队中来,因为这种架构意味着需要特定的技能。架构元素之间的依赖会影响任务的先后顺序及这些技术所需要的时间,所以,架构师应积极为编制活动计划出力。由于架构师的成功与团队的素质紧密相关,所以参与团队新成员面试也是架构师必须要做的。
       架构师展示品质方面,领导力也可以在与团队成员的交流中展示出来。特别强调,架构师应该为他人树立榜样并在指定方向方面表示出自信成功的架构师是以人为向导的,所有的架构师都应花时间培训他的团队成员。这种方式有益于团队成员处理问题、有益于项目、最终有益于组织本身,因为某些最有价值的资源(人)变的更有技能。
       另外,架构师必须非常关注交付的实际结果并必须作为项目在技术方面的驱动力。架构师必须能够进行决策并确保这些决策被传达、理解并最终被执行。
2.架构师的角色可能由一个团队来担当
        角色和人是存在差异的。一个人可能担当多个角色,而一个角色也可能有多人担当。由于架构师需要非常广泛的技能,所以,架构师角色通常由多个人担当。这种方式允许技能分布于几个人,每个人都充分运用它们的经验。理解业务领域和各个方面技术所必须的技能,往往有几个人才能很好的覆盖。当然,架构师团队必须平衡。
       如果架构师团队由一个团队担当,那么拥有一个首席架构师就显得很重要,他应具有先见之明,是团队的单点协调人。如果缺乏这个协调人,架构团队成员创造出内聚的架构,或者作出决策是有难度的。
       优秀的架构师们了解自己的优缺点。无论架构师团队是否有一个团队来担当,架构师都有好几个可信的顾问支持。这样的架构师承认他们的弱点,并通过获得必须的技能或通过与其他人一起工作来弥补他们知识的缺陷进而弥补这些弱点。最优秀的架构通常由一个团队来担当而不是个人,因为当有多人参与进来时见识更广更深。
       架构团队存在一个缺陷是,它可能被理解成一个象牙塔,它的产出仅仅是为了显示智力而不是实用。通过确保和所用的利益相关者积极地商议、对架构及其价值进行讨论,以及确保考虑任何有影响的组织政策,这个误解可以从一开始就减到最小。
3.架构师理解软件工程
       大部分的架构师都担任过开发人员,都非常了解定义并认可项目中使用的最佳实践的必要性。最明确的是,架构师应该了解软件工程流程,因为这个流程确保团队能协调工作。
       这种协调性可以通过定义涉及的角色、从事的任务、创建的工作产品、不同角色之间的移交点来获得。在日常工作中架构师会影响许多团队成员,理解团队成员的角色和职责,理解他们正在生产使用的东西。这点对于架构师来说非常重要。实质上,团队成员希望架构师能够指导他们如何完成他们的职责,架构师必须能够和团队遵循的软件工程流程一致的方式作出反应。
4.架构师掌握业务领域的知识
        除了掌握软件开发技术之外,还非常期望架构师理解业务领域,以便他们能够担任利益相关者和用户及开发团队之间的中间人。
       业务领域也使得架构师更好得理解系统的需求,还能确保捕获恰当的需求。此外,一个特定领域通常与能应用到这个解决方案中的特定架构模型组相关,知道这个对照关系可以极大帮助架构师。
       因此,一个优秀的架构师通常需要平衡掌握软件开发知识和业务领域知识。当架构师理解软件开发知识但不理解业务模型时,可能会开发一个不满足需求但反应这种架构师所熟悉内容的解决方案,一般这种解决方案意义不大。
       熟悉业务领域也使得架构师能够预见他们的架构所需要作出的改变。既然架构受其部署环境影响大,对业务领域的正确认识是的架构师能够在可能改变的区域和稳定性作出更全面的决策。
5.架构师掌握技术知识
       架构设计的某些方面明确需要技术知识,所以,一个架构师应该拥有一定程度的技术技能。然而架构师不必是一个技术专家,但他必须关注技术的重要因素,不是细节。架构师需要理解一些技术框架,比如分布式技术、消息控件技术、大数据技术等,可以不深入其细节,但架构师需要了解其基本框架以及能解决的问题,这能帮助架构师作出更好的技术决策。
6.架构师掌握设计技能
       虽然架构设计没有局限于设计,但是很明显设计师架构设计的核心方面。架构使关键设计决策具体化,因此架构师应该拥有很强的设计能力。关键设计决策可以指关键结构设计决策、特定模型的选择、指导规格说明书等。为了保证系统结构的完整性,这些元素被代表性地广泛应用并对系统取得成功产生深远的影响。因此,这样的元素应该由拥有适当技能的人识别出来。
7.架构师具备编程能力
       项目中的开发人员是架构师必须与其打交道的最重要的团队成员。毕竟,他们的工作产品最终交付生产用的可执行软件。只有当架构师承认开发人员的工作价值时,在架构师和开发人员之间的沟通才是有效的。因此,架构师应该具有一定的编程能力,即使他们在项目中不必写代码,也必须跟上技术更新的脚步。
       大部分成功的架构师都是曾经的核心编程人员。在某种程度上,他们就是通过这段经历了解到他们业务的某些情况。甚至当技术发展和引入新的编程语言时,优秀的架构师可以抽象出任何语言中的概念并应用这些知识对新的语言了解到必要的程度。如果没有这些知识及对于实现过程中架构上的重要元素,架构师将不能进行决策,在架构师和开发人员之间的沟通将会存在障碍。
8.架构师是优秀的沟通人员
       在架构师相关的软技能中沟通最重要。有效的沟通设计到各个方面,架构师必须全面精通。尤其是架构师应该拥有有效的口头、书面及表达技巧。同样,沟通应是双向的。架构师应是优秀的聆听者和观察者。
       有效的沟通是项目成功的基础。与利益相关者沟通对于理解他们的需求及与他们就架构达成一致来说非常重要。与项目团队沟通尤其如此,因为架构师不是简单地负责把信息传递给团队,还要激发团队。架构师负责传达系统的愿景,以便这个愿景为大家所共享,而不是只有架构师理解并相信。
9.架构师进行决策
       在许多情况不清楚、没有充足时间探究所有的可能性,以及存在交付压力的环境中不能决策的架构师不太可能工作下去。不幸的是这样的环境还常见而不是例外,成功的架构师承认这个情形而不是设法改变。即使架构师在决策时咨询其他人并营造其他人共同参与决策的一个环境,进行适当决策仍然是架构师的职责,而这个决策不总是正确的,因此架构师必须是厚脸皮的,因为他们可能必须纠正他们的决策并原路返回。
       没有进行决策的能力将慢慢破坏项目,项目团队将会对架构师失去信心,项目经理将会担心,因为这些等待架构师决策的事项没有进展,更有甚者,如果架构师没有制定关于架构的决策及编写成文档,团队成员会制定他们自己的决策,使项目更加不可控。
10.架构师知道组织政策
       成功的架构师不仅仅关心技术,他们还对政治敏感并知道在组织红的权利。他们利用这些知识确保与人恰当沟通,确保在项目的周期中获得支持。忽视组织政策是天真的。
       组织中起作用的许多强制约束位于项目交付的系统之外,而这些约束必须考虑。
11.架构师是谈判专家
       对于架构设计的许多方面,架构师需要与许多利益相关者进行沟通交流。其中一些交流需要谈判技巧。架构师特别关注的一点是在项目中尽可能早地把风险减到最小,因为把风险减到最小对稳定架构所花的时间有直接的影响。因为风险与需求有关,消除风险的一个途径是精炼需求以便这种需求不再出现,因此必须回退需求以便利益相关者和架构师达成。这种情形要求架构师是一位有效的谈判专家,能够清晰明白地表名不同折中的结果。
总结
       以上就是作为一位架构师应具有的能力及素质,聪明的您可以逐一对照一下,哪些是缺失的哪些是需要加强的。好的,本次架构分享就到这里,感谢关注。