架构师必备的37项技能清单

几年前,我被问到“你是如何变成一名架构师的?” 。基于这个话题 , 我们讨论了很多,比如必要的技术、经验以及所需要的知识储备等 。这一次讨论促使我开始思考要成为一名架构师应该具备和学习的东西有哪些,成为一个优秀的架构师应该具备哪些能力和做哪些事情 。为此我查阅资料,走访各位大佬,当然也结合自己的经历,最终我输出了今天这样一篇文章,希望通过阅读此文,你可以从此知道自己的架构师之路该怎么走 。
什么是架构师?
在开始具体的细节之前,我们先来理清两个定义 。

A software architect is a software expert who makes high-level design choices and dictates technical standards, including software coding standards, tools, and platforms. The leading expert is referred to as the chief architect.
软件架构师是一个软件专家,他(她)负责做出高阶设计选择和输出技术标准 , 包括软件编码标准、工具和平台(框架) 。首席专家(leading expert)也被称为首席架构师(chief architect) 。
(来源: Wikipedia: Software Architect)
Software architecture is the fundamental organization of a system, represented by its components, their relationships to each other and to the environment, and the principles that determine the design and evolution of the system.
软件架构是一个系统的基本(基?。┳橹?。包含组件 , 他们之间的关系以及与周边的关系,设计原则,以及系统演进 。
(来源: Handbook of Software Architecture)
架构的级别
架构可以被抽象为几个级别(level) 。级别决定了要选择哪些对应的技术 。市面上有多种分类方式,我个人喜欢把它分为三个级别:
  • 应用级别(Application Level): 架构最下层级别(lowest level) 。只关注一个单一的应用 。非常的关注细节,关注底层设计( Very detAIled, low level design) 。沟通往往只限于开发团队内部 。
  • 解决方案级别(Solution Level): 架构的中间级别(mid-level) 。关注的是一个或多个应用,从而满足某个业务需求 (业务解决方案) 。有点高,但主要还是low-level设计 。沟通跨多个开发团队 。
  • 企业级别(Enterprise Level): 架构最高级别 。关注多个解决方案(solution) 。高级(High level), 抽象设计(abstract design), 需要总览全局 , 总览多个解决方案和多个应用架构师 。沟通横跨整个组织 。
有时候,架构师是也被戏称为“胶水(粘合剂)”,不同利益相关者之间的胶水,举三个例子:
  • 水平: 业务、开发人员或不同开发团队之间的沟通桥梁 。
  • 垂直: 开发人员和管理人员之间的沟通桥梁 。
  • 技术: 不同技术或项目(产品)之间的集成桥梁 。
软件架构师要做的几个典型活动
在搞清楚要使用的技术之前 , 我们先要明白软件架构师要做的几个典型的活动 。以下是我梳理的几个典型的活动:
  • 确定和决定要使用的开发技术和平台 。
  • 定义开发标准 。比如,编码标准,工具,代码review流程,测试方法等 。
  • 协助识别和理清业务需求 。
  • 设计系统和基于需求做出决策 。
  • 记录和沟通架构定义、设计和决策(Document and communicate architectural definitions, design and decisions) 。
  • 检查和review架构和代码 。比如 , 检查确定的模式和编码标准的实现是否合理 。
  • 与其他的架构师和利益相关者协作 。
  • 开发人员的教练和顾问 。
  • 细化并把high level的设计具体到low level设计 。
注意:架构是一个持续的活动,尤其是在敏捷开发团队中 。因此,这些活动得一遍一遍的重复迭代,over and over again 。
软件架构师要掌握的重要技能
为了能够支撑上面列出的活动 , 软件架构师需要一些必备的技能 。根据我过往的经历 , 以及翻阅资料以及与大佬们进行讨论,最后得出了如下软件架构师必备的10个重要技能:设计,决策,简化,代码 , 文档,沟通,评估,权衡,顾问,营销 。
接下来我们一个个说 。对于每种技能 , 我都提出了一些行动或见解,你可以根据这些来改进你的工作 。
1、设计
什么是好的设计?这个可能是一个非常重要同时又要挑战性的问题 。分为理论和实践 。就我的经验,二者的结合是最有价值的 。
1)知道基础的设计模式:模式是一个非常重要的工具,是架构师开发可维护系统的重要工具之一 。记住,你要想开发出可维护的系统,请记得适当地运用设计模式 。通过模式你可以重用那些已经被证明可以解决常见问题的设计思路 。去看看GoF(Gang of Four)写的有关设计模式的书吧,尽管这些模式已经20多年了,但依然是现代软件架构的基础 。比如Model-View-Controller (MVC) 模式就可以用于多个领域,甚至是一些更新的模式的基础 , 比如MVVM 。


推荐阅读