1、 做人、做事,做架构师 收藏 架构师能力模型解析 文 / 周爱民 引子 究竟是什么让你在同一个位置上例如程序员或技术负责人工作了三 年更久,而仍然得不到任何的发展空间?你觉得自己已成为技术圈中的大牛, 并去拿明天就要颁发的某某大奖,然而却仍然停留在同样的技术职位上,去年 到水甚至填不平物价升幅?于是,你开始对老板不满,对员工不满,对昨天升 职不满你开始计划明天就要跑单,或者准备考虑提出加薪却又心怀忐忑。 如果技术人员有发展的轨迹,那么他要么“看透工具的本质,把关注点转移 到圈子里去”,要么“顺着代码铺就的道路,亦步亦趋地成为良匠大师”。仅 以言,你大概可以做到架构师、总架构师甚至首席架构师;但
2、问题是:你现在 还序员。那要如何才能踏上通往架构师之路呢?本文为你解析一个架构师的能 力你能不能做一个好的架构师? 架构师不是界定一个技术高下的职位名称,而是一个职务。所谓职务,包括 职务工作。前者决定了你具备哪些资源,可以影响到怎样的范围,以及面 向者则简单地是你需要完成的工作列表。 所以我说“架构师”不是指“一个能做架构的人”。前者是把架构师当职能 ,人。能做一份工作列表中的事,并不等于就成为相应职位上的人。在管理体 系个人特性决定了你在哪个位置,而技术技能只是做事实施的必需。架构师这 个要求较高的个人素质和技术能力,因此它的进取之路总结起来就是:做人、 做师。 因此“模型”由“个人特性”
3、和“技术技能”两个方面构成,在第一张图中 ,“个人特性”既包括人际关系的能力,也包括(具体)业务能力;“技术技 能此。所以个人特性主要与“做人”有关,部分地也包含“做事”的要素。 页码, 1/5(W)w2010/9/21图 1 架构师能力模型 “有效沟通”以及“学会谈判”与做具体的事无关,是个人能力特性的公共 方过程,后者是知道如何定目标与求结果。而“风险与防备”是做事过程控制 的面两项正好构成了一个做事基本能力的完整体系。基本上,这三项个人特性 都通程序员”所不具备的,甚至在大多数情况下,普通程序员并不愿意去具备 这性,因为在许多陷于技术泥淖的开发人员看来:沟通总是会使事情变得更加 麻徒耗时
4、间而无济于事。然而事实上,在整个的架构决策过程中,架构师需要 不谈判。将“架构”变成“决策”的过程,其实就是对各个技术角色(及其思 想的过程,你需要不断地协调需求、实现之间的各种问题,也需要面对各种投 资资金、人才等方面的决策者)进行谈判,以确定项目的规模没有规模也 就没有范围如何展开设计呢? 一部分开发人员会认为上述过程是“项目经理”的事情,但真的如此吗?当 你高级别的架构师,以至于要影响到多个项目的决策时,你就全然不会有这种 感这种情况下,你的决策将先于项目的启动,或者说你已经不单单是一个技术 角设计是架构能力的一部分,但架构师不是设计师看清楚二者之间的不同出了架构师职业生涯的第一步。 抽
5、象是思维能力、模型化是表达能力 个人特性中另一个非常重要的方面是“抽象思维”,而这是与架构师角色直 接能力。这种能力既有职业技能特征,又是普遍性的能力。 页码, 2/5(W)w2010/9/21图 2 能力模型中的个人特性 所谓普遍性的能力,是指“抽象”在我们作为人这种个体的生活中 无如我们说花、草,说桌、椅我们用语言去指称任何一个既已存在的(可 以言而自然存在的)事物时,就用到了抽象。说“桌子”的时候,既没有描述 桌式,也没有说明它的规格,但我们用这个名词时,所有人都知道“桌子是什 么名词概念是整个抽象逻辑系统中的主体。如果失去了这些名词定义,我们基 本话,也不能描述任何东西那便到了“只可意
6、会不可言传”的境地。 用现有的成熟语汇去描述你的系统时,大多数人会理解你所表达的含义,例 如个系统设计为一个三层结构”。然而架构师面临的系统在许多细节上并不见 得的语汇去描述,因此必须自已构建一个抽象系统,这就需要概念抽象能力、 概和基于概念的逻辑表达能力。 概念抽象能力是一种思维能力。简单地说,就是“把目标分解或概括清楚” :言之“它是什么”,要么详细地说明“它包括什么”。必须使用大量的语汇 来“什么”,这不单单是表达为文字,也表达为你在思想过程中的一个完整系 统方法是“映射系统”。例如你可以用数学中的“数轴”来映射“实数域”。 将式化为一个概念化的、可讨论的结构系统后,你的抽象过程就基本结
7、束了。 然而这个“抽象系统”可能只构建在你的思维意识里,还必须把它描绘出来。页码, 3/5(W)w2010/9/21是你自己思考清楚,系统就能设计完成。这个“描绘”就依赖于后面两种表 达是 描绘概念实体,一种是描绘实体上的 逻辑有趣的是,这似乎又回到 了算法”。 现在大家回过头来看看 UML,或 者更多种类的 ML(建模语言),他们 就用 于方面的东西:要么 是概念实体(例如用一个框表明系统 边界),要么是实 体如用 箭头表明逻辑时序)。 所以大家应该清楚,我们再如何 称赞 UML,它也只是一种对模型化系 统的 “你只能把它当一种 辅助表达的工具去使用,它本身既不 能帮助思考,也不 见过 程中
8、的或抽象思维环境中的参考。 任何一个优秀的架构师都有自己独特的思考方式,这决定了他如何抽象系统 ,“创造性地”设计与构画这个系统。这种“独特的思考方式”贯彻他从孩童 开长过程,直至他形成独立的社会观、人生观与世界观。他认识世界的方式和 接力决定于他如何思考,也反映了他这种思考方式的“独特性”。但这并不表 明行的行为特性(我们这里只说他的思考方式),我们不应介意他是否用某种 语L 或者形式化编程语言)来表达他的思考结果。 推动:设计做大,实施做小 架构师首先是把问题的真正目标确定下来,然后变成系统设计、平台设计或 架在此之后设计输出将会有两个方向的发展,一是被忠实地贯彻下来,二是被 变去。两个方
9、向都存在致命的危险:架构最终能否被完整实现。对前者来说, 可计过度,或设计本身出现了错误;后者则是对架构直接的伤害。 所以架构师必须参与实施的全程尤其是在架构被映射为目标系统的前期。中,架构师的任务就是推动架构实施,以保证在项目全程的设计架构体 系除了直接跟设计师或设计团队沟通,以保证他们的设计在你可以控制的范围 之构师还必须有阶段化设计的能力。这种能力用于将一个原本规模宏大的架构 设小的、易于实施的、对开发团队来说可控的关键点。例如在体系层次的规划 上是独立、异质的、可迁移的存储框架来实现数据层,但在(前期的)实施上 ,表达为本地数据库,并要求前端开发人员必须通过一个清晰的数据交互层来 访一
10、组数据存取接口,或一个独立数据服务组件。开发人员可能在这里遇到障 碍过这些中间层来访问本地数据库,纯粹是多余的。然而,正是这“多余的工 作统弹性,为并行团队开发公共存储服务争取了周期,也为将来的灵活部署与 数了可能。 这里的关键就在于,无论原始系统设定有多大,实施时总是在“做小”。每 一施块都是可控的,并为它在整个体系空间中留下了位置和接口,这样才可能 由分”做大。一个大系统的架构师可能同时在考虑许多个项目中的、不同位置 的清楚这些项目最终的总体规模。而这,就是平台架构师和体系架构师所涉的 领架构真的是“好不好”的问题吗?如同我对工程的理解一样,架构问题的根 本于它是否完美或漂亮,而是在于是否
11、合用。因此架构师必须对实施架构的团 队页码, 4/5(W)w2010/9/21程有充分了解,知道他们的能力缺陷,知道实现过程要消耗的资源,清楚每 个故障以及先兆。只有这样,架构师才能设计一个让这个团队能实现,而且在 实受控的架构。 要知道,你作为架构师被请来,不是画几张图纸交给项目经理,说:你们去 做来是你们不会做。即使你可以身体力行,在这个团队中教大家、培养大家, 那销呢?风险呢?这些东西难道就不考虑了?项目的周期因为实现的复杂程度 而时,项目就死掉了。那么,追根究底来说,是不是架构师的问题?是啊,你 为一份“不合用”的架构呢?你都不知道项目如何开发、由谁实施、如何 管如何能面对这些实际环境去设计架构呢? 所以这一部分能力,是要在你的开发经验、团队经验以及用人识人的经验中 去模型图的“实现能力”下的“设计能力了解你的主要沟通对象”和“架构 推支,对你或有一些可用的提示。 作者简介: 周爱民( aimingoo),具有十余年的软件开发、项目管理和团 队现担任盛大网络的平台架构师,著有大道至简、 Delphi 源代码分析(本文全文刊载于 2008年 4月程序员杂志中) 页码, 5/5(W)w2010/9/21