做人、做事,做架构师

引子

究竟是什么让你在同一个位置上——例如程序员或技术负责人——工作了三年、五年或者更久,而仍然得不到任何发展空间?你觉得自己已成为技术圈中大牛,并信心满满地去拿明天就要颁发某某大奖,然而却仍然停留在同样技术职位上,去年到今年涨薪水甚至填不平物价升幅?于是,你开始对老板不满,对员工不满,对昨天升职那个同事不满……你开始计划明天就要跑单,或者准备考虑提出加薪却又心怀忐忑。

如果技术人员有发展轨迹,那么他要么“看透工具本质,把关注点转移到‘团队’圈子里去”,要么“顺着代码铺就道路,亦步亦趋地成为良匠大师”。仅以技术方向而言,你大概可以做到架构师、总架构师甚至首席架构师;但问题是:你现在还只是一个程序员。那要如何才能踏上通往架构师之路呢?本文为你解析一个架构师能力模型。

你能不能做一个好架构师?

架构师不是界定一个技术高下职位名称,而是一个职务。所谓职务,包括职——职位,务——工作。前者决定了你具备哪些资源,可以影响到怎样范围,以及面向机构,后者则简单地是你需要完成工作列表。

所以我说“架构师”不是指“一个能做架构人”。前者是把架构师当职能,后者是当工人。能做一份工作列表中事,并不等于就成为相应职位上人。在管理体系里面,你个人特性决定了你在哪个位置,而技术技能只是做事实施必需。架构师这个职务,同时要求较高个人素质和技术能力,因此它进取之路总结起来就是:做人、做事,做架构师。

因此“模型”由“个人特性”和“技术技能”两个方面构成,在第一张图中,我特别说明“个人特性”既包括人际关系能力,也包括(具体)业务能力;“技术技能”也是如此。所以个人特性主要与“做人”有关,部分地也包含“做事”要素。

 

 

“有效沟通”以及“学会谈判”与做具体事无关,是个人能力特性公共方面。前者是过程,后者是知道如何定目标与求结果。而“风险与防备”是做事过程控制关键,与前面两项正好构成了一个做事基本能力完整体系。基本上,这三项个人特性都是一个“普通程序员”所不具备,甚至在大多数情况下,普通程序员并不愿意去具备这样个人特性,因为在许多陷于技术泥淖开发人员看来:沟通总是会使事情变得更加麻烦,谈判则徒耗时间而无济于事。然而事实上,在整个架构决策过程中,架构师需要不停地沟通与谈判。将“架构”变成“决策”过程,其实就是对各个技术角色(及其思想)兼容并包过程,你需要不断地协调需求、实现之间各种问题,也需要面对各种投资者(时间、资金、人才等方面决策者)进行谈判,以确定项目规模——没有规模也就没有范围,没有范围如何展开设计呢?

一部分开发人员会认为上述过程是“项目经理”事情,但真如此吗?当你作为一个更高级别架构师,以至于要影响到多个项目决策时,你就全然不会有这种感受了。因为这种情况下,你决策将先于项目启动,或者说你已经不单单是一个技术角色了。

设计是架构能力一部分,但架构师不是设计师——看清楚二者之间不同,你才真正迈出了架构师职业生涯第一步。

抽象是思维能力、模型化是表达能力

个人特性中另一个非常重要方面是“抽象思维”,而这是与架构师角色直接相关一种能力。这种能力既有职业技能特征,又是普遍性能力。

所谓普遍性能力,是指“抽象”在我们——作为人这种个体——生活中无处不在。例如我们说花、草,说桌、椅……我们用语言去指称任何一个既已存在(可以脱离我们语言而自然存在)事物时,就用到了抽象。说“桌子”时候,既没有描述桌子具体形式,也没有说明它规格,但我们用这个名词时,所有人都知道“桌子是什么”。所以,名词概念是整个抽象逻辑系统中主体。如果失去了这些名词定义,我们基本上不能说话,也不能描述任何东西——那便到了“只可意会不可言传”境地。

用现有成熟语汇去描述你系统时,大多数人会理解你所表达含义,例如我们说“这个系统设计为一个三层结构”。然而架构师面临系统在许多细节上并不见得能够用成熟语汇去描述,因此必须自已构建一个抽象系统,这就需要概念抽象能力、概念表达能力和基于概念逻辑表达能力。

概念抽象能力是一种思维能力。简单地说,就是“把目标分解或概括清楚”:你要么概而言之“它是什么”,要么详细地说明“它包括什么”。必须使用大量语汇来陈述这个“什么”,这不单单是表达为文字,也表达为你在思想过程中一个完整系统。通常用方法是“映射系统”。例如你可以用数学中“数轴”来映射“实数域”。将目标系统形式化为一个概念化、可讨论结构系统后,你抽象过程就基本结束了。

做人、做事,做架构师

 

图2 能力模型中个人特性

然而这个“抽象系统”可能只构建在你思维意识里,还必须把它描绘出来。因为不能只是你自己思考清楚,系统就能设计完成。这个“描绘”就依赖于后面两种表达能力,一种是描绘概念实体,一种是描绘实体上逻辑——有趣是,这似乎又回到了“程序=结构+算法”。

现在大家回过头来看看UML,或者更多种类ML(建模语言),他们就用于表达这两个方面东西:要么是概念实体(例如用一个框表明系统边界),要么是实体上逻辑(例如用箭头表明逻辑时序)。

所以大家应该清楚,我们再如何称赞UML,它也只是一种对模型化系统“表达能力”,你只能把它当一种辅助表达工具去使用,它本身既不能帮助思考,也不见得能作为抽象过程中或抽象思维环境中参考。

任何一个优秀架构师都有自己独特思考方式,这决定了他如何抽象系统,以及如何“创造性地”设计与构画这个系统。这种“独特思考方式”贯彻他从孩童开始整个成长过程,直至他形成独立社会观、人生观与世界观。他认识世界方式和接受世界能力决定于他如何思考,也反映了他这种思考方式“独特性”。但这并不表明他有特立独行行为特性(我们这里只说他思考方式),我们不应介意他是否用某种语言(例如UML或者形式化编程语言)来表达他思考结果。

推动:设计做大,实施做小

架构师首先是把问题真正目标确定下来,然后变成系统设计、平台设计或架构设计。而在此之后设计输出将会有两个方向发展,一是被忠实地贯彻下来,二是被变形地发展下去。两个方向都存在致命危险:架构最终能否被完整实现。对前者来说,可能是架构设计过度,或设计本身出现了错误;后者则是对架构直接伤害。

所以架构师必须参与实施全程——尤其是在架构被映射为目标系统前期。在这个阶段中,架构师任务就是推动架构实施,以保证在项目全程设计/架构/体系一致性。除了直接跟设计师或设计团队沟通,以保证他们设计在你可以控制范围之内以外,架构师还必须有阶段化设计能力。这种能力用于将一个原本规模宏大架构设计,变成较小、易于实施、对开发团队来说可控关键点。例如在体系层次规划上,设计可能是独立、异质、可迁移存储框架来实现数据层,但在(前期)实施上,这里可能被表达为本地数据库,并要求前端开发人员必须通过一个清晰数据交互层来访问——例如一组数据存取接口,或一个独立数据服务组件。开发人员可能在这里遇到障碍:因为要通过这些中间层来访问本地数据库,纯粹是多余。然而,正是这“多余工作”提供了系统弹性,为并行团队开发公共存储服务争取了周期,也为将来灵活部署与数据迁移提供了可能。

这里关键就在于,无论原始系统设定有多大,实施时总是在“做小”。每一个局部实施块都是可控,并为它在整个体系空间中留下了位置和接口,这样才可能由“小部分”做大。一个大系统架构师可能同时在考虑许多个项目中、不同位置架构,并且清楚这些项目最终总体规模。而这,就是平台架构师和体系架构师所涉领域。

做人、做事,做架构师

 

图3 架构师模型图中“实现能力”

架构真是“好不好”问题吗?如同我对工程理解一样,架构问题根本,也并不在于它是否完美或漂亮,而是在于是否合用。因此架构师必须对实施架构团队以及实施过程有充分了解,知道他们能力缺陷,知道实现过程要消耗资源,清楚每个环节可能故障以及先兆。只有这样,架构师才能设计一个让这个团队能实现,而且在实现过程中能受控架构。

要知道,你作为架构师被请来,不是画几张图纸交给项目经理,说:你们去做吧,做不出来是你们不会做。即使你可以身体力行,在这个团队中教大家、培养大家,那么公司开销呢?风险呢?这些东西难道就不考虑了?项目周期因为实现复杂程度而无法控制时,项目就死掉了。那么,追根究底来说,是不是架构师问题?是啊,你为什么会做了一份“不合用”架构呢?——你都不知道项目如何开发、由谁实施、如何管理等等,又如何能面对这些实际环境去设计架构呢?

所以这一部分能力,是要在你开发经验、团队经验以及用人识人经验中去找。参考模型图“实现能力”下“设计能力→了解你主要沟通对象”和“架构推行”等分支,对你或有一些可用提示。

局部与全局

架构是一个从全局到局部过程,而实施正好反过来,是从局部到全局。这也正是“设计做大,实施做小”另一个层面含义。设计大才可以见到全局,才知道此全局对彼全局影响;实施小才可能关注细节,才谈得上品质与控制。

事实上,大多数情况下架构是在为“当前项目之外”去考虑,这可以看成全局关注一个组成部分。因此我们需要界定所谓“全局”范围:超出公司或整个产品系列、产品线或规划范围才是多余

所以当架构决策谈及“全局”时,其目标并不见得是“保障当前项目”,而又必须由当前项目去完成。

一个经常被用到例子是:如果仅为当前项目考虑,那么只需要做成DLL模块;如果为产品线考虑,可能会是“管道+插件”结构形式。而“管道+插件”形式显然比做成DLL模块更费时,这个时间成本(以及其它成本)就变成了当前项目无谓开销。

这种全局策略对局部计划影响是大多数公司不能忍受,也被很多团队所垢病。然而这却是架构师角色对体系“近乎必然”影响——如果你试图在体系中引用架构师这个角色话。一些情况下,体系能够容纳这种影响,例如“技术架构师”试图推动某种插件框架,而正好开发人员对这项技术感兴趣,那就顺其自然地花点工夫去实现了。但如果不是这样,实施者或实施团队看不到“多余部分”对他们价值时,来自局部抵触就产生了。

这种情况下,平衡这些抵触就成了架构推行实务之一。在我看来,“平衡”是全局艺术和局部技术。也就是说,一方面架构师要学会游说,另一方面也要寻求更为简洁、成本更小实现技术。只有当整个体系都意识到(你所推行)架构重要性,而且实施成本在他们可以接受范围之内时,他们才会积极行动起来。

所以所谓平衡,其实也是折衷过程。构架师只有眼中见大,才知道哪些折衷可以做,而哪些不能。所谓设计评估(模型图中实现能力->设计能力->设计评估分支)并不是去分析一个设计结果好或不好,而是从中看到原始需求,看到体系全局意图,然后知道在将设计变得更为“适当”时可以做哪些折衷。同样原因,架构师也必须知道自己决策会产生影响,才能控制它们,以防它们变成团队灾难。有些时候,架构师甚至需要抛弃一些特性,以使得项目能够持续下去。因为产品阶段性产出只是整个战略中一个环节,而不是全部。

其它

“怎么做一个架构师”这个问题得分成两个部分来看,一个是“做到”,一个是“做好”。由于架构师本身不过是一个技术职位,所以时机成熟了自然会做得到。但问题是,真有一天你被放在这个位置上了,你能做得好吗?

我浏览过几套所谓培训机构有关架构师教程,也翻阅过一些讲架构书。我发现他们普遍地是将架构作为一种“职业技术”来讲,就像培养程序员或者缝纫工一样来教育。但就我经验来说,架构并不是一件纯粹表现技术能力工作,所以并不是翻几本书学几种方法就可以投入“实战”。更深层问题是,架构师其实不是“战”出来。昨天跟同事讨论这个话题,他把我们这几年来一些思考用了三句话来概括,非常精彩:从无到有,是架构;从表到里,是抽象;从粗到细,是设计。

那么到底什么是架构呢?从上面概括中你是看不到答案。到底如何做架构呢?从本文中你也是看不到答案。然而我说,“你看不到答案”根源其实是在于你眼光与心性——后面这个词换成现代白话,就是“思想”。真正阻碍了你成为优秀架构师,也许正是你既有知识与思想方法,扔掉它们,接受一些全然有别信息,也许正是良好开端。

或许你现在正愤愤然:这篇文章怎么空洞无物?——我甚至能想象到一些读者表情。然而请在问题面前停下来,不要急于给出答案。正如你将“?”稍微变下形,它就成为了“!”一样,问题本身,就是答案。

 

[摘自]:http://cache.baidu.com/c?m=9d78d513d9d430a54f9ae2697d67c0126e4381132ba7a10209a5843898732b4a506793ac56510777d7d27d1716df4a4b9cfa2104351457c78cc9f85dabbf855b5c9f5733676d845613a30edfcc5154c734d71ab7a043a1fcb22592ddcfce9903029044050dc1abd7091714bd3ead4b26e3d1c814081e0dbaef326fe859012a9d3440c047f9fd316d048afcdb5b48c82ac76166d6f573ef60&p=9357d45d86cc40ab0db7c7710c43&user=baidu

posted on 2010-07-30 13:55  不悔的青春  阅读(325)  评论(0编辑  收藏  举报

导航