论软件架构师的基本素养: 三要和三不要

 (仅为个人观点,不代表作者所服务公司)

在过去十几年工作里,参与过一些国内或跨国的软件项目,从而有幸接触过很多软件架构师,也看到一些优秀工程师成长为架构师。坦率地讲,要完整总结这些优秀架构师的特质很难。因此,本文只能从几个离散的观察角度,谈一下感受。
 

一要: 熟悉新工具新框架,了解技术新趋势

软件架构师做架构设计就如同建筑师设计建筑一样,一定要熟悉各种组件,即所谓的building blocks。比如,前端流行几种框架是什么,后台数据设计通常有几种,各自优劣是什么,适应场合是什么,这些都需要想像小孩子玩积木一样整天拨弄,烂熟于心。另外,对新技术保持好奇心,不断丰富自己的组件库。比如,容器技术这两年很火,就需要去了解主流的编排框架,Docker Swarm,Kurbenetes,Mesos各自的特点等等,并跟踪这些框架的发展演进。这样,就有丰富的,而且也是最新的工具去构建生命力长久的架构。


二要: 精通一门技术,熟悉一个行业

软件的复杂度越来越高,对于企业级软件系统尤其如此,期望一个软件架构师精通全部前端,后端,数据库等等是不现实的。务实的方法是,精通某个技术领域,对该技术领略方方面面都了如指掌,但也不失对整个软件系统有个通盘的理解和认识,这种以点带面的方法可以使架构师快速成为"T"型人才,而避免迷失在各种技术中。除了技术,从业务角度看,最好也要熟悉一个行业。业务场景是技术的生存环境。技术和业务场景的匹配磨合也是架构师培养方法论的重要环节。一旦从熟悉的行业培养出自己的方法论,就可以迅速扩展到新的业务领域。

 

三要: 懂得断舍离 -- 扬弃的极简主义

随着苹果产品的风行和互联网再次袭起的热浪,极致体验成为大家的思考,这里面就有极简主义--断舍离。断:不买,不收取不必要的东西;舍:处理,放弃不需要的东西;离:舍弃对物质的迷恋。这种极简主义的人生态度也被优秀的架构师应用在设计上。很多架构师熟悉了各种building blocks后,会把应用系统的构建简化成一些现成产品/框架的堆砌。这些组件满足了需要,让架构图变得美观,但也许附带了很多不必要功能和集成复杂度。构架设计一个重要原则是能力(capability)集成,而不是产品拼接,需要断和舍。另外,大而全往往误导架构师去迷恋添加更多功能,事实是,大部分应用和系统都遵循二八原则,即80%用户只用20%最常用的功能。远离对功能的迷恋,能让架构师更专注客户需求的实质,这就是离。断舍离,对架构师而言,就是以用户为核心,以本质需求为核心。

 

一不要: 重复发明轮子

不要重复发明轮子(Don't reinvent the wheel)应该是架构师的基本工作准则了,就是说架构师在构建新的应用或系统时,首先要考虑已有的成熟组件,再延伸一下,对于别人(包括自己)已有的经验,拿来主义是第一位的。成熟的组件,都是经过无数次试错,修正,最终磨练成功。尽可能地利用它们,从经济性和效率来讲,这是正确的。

 

二不要: 重复自己 -- 不要落入思维惯性的陷阱

不要重复自己(Don't repeat yourself: DRY),意思是说,要创新,不要因为自己(或者别人)过去的成功,就原样照搬。这点和上面那种思考模式貌似有些矛盾,到底要不要照搬呢?个人觉得,这是一体两面,或者一件事不同的阶段的思考方法。在刚开始构架时,要DRY,要天马行空地想各种方案(think out of box),而不要直接直接跳入可行性层面,随着架构雏形慢慢清晰,可行性就变得必须了,那考虑的问题就是先看看工具箱里有什么现成可用的组件,所谓不要重复发明轮子。当然,这两种思维是在应用或系统构架过程中不停迭代的,也在应用里各种粒度的模块里不停迭代。

成为架构师,需要积累很多知识和经验,长久经验和知识积累却也往往会成为架构师工作负担,使其容易陷于经验主义和思维惯性。常见表现是,出现一个新事物时,我们往往会拿过去的经验和概念去匹配和投射。这可能也是人类面对陌生事物自我保护的本能。不要重复自己,就是针对这种情况,如何从内突破自己的框框和已有经验。也就是说,架构师对外应该永远保持一颗好奇心,能放空自己,去学习,接纳新的技术,不管是否成熟,或者是否有缺陷,要去了解,尝试。有了这样开放的心态,才可能不重复自己。

 

三不要: 忘记用户

自互联网的飓风刮起后,用户思维好像已成common sense,但从实际使用的很多产品和应用看,感觉还有不断提高的余地。在用户思维上,架构师与设计师略有不同。架构师构建系统或应用的工作,可以认为是一个解决问题的过程,而这个问题就是架构师的用户。通常架构师都从优秀工程师历练而成,有非常扎实的技术功底,追求卓越技术和完美结果,但在这个追求过程中,有时反而忽视了要解决的问题本身。有个关于空肥皂盒的故事很好地说明了这点。

某跨国日用消费品企业引进了一条香皂包装生产线,结果发现这条生产线有个缺陷:常常会有盒子里没装入香皂。总不能把空盒子卖给顾客啊,他们只得请了一个学自动化的博士设计一个方案来分拣空的香皂盒。博士拉起了一个十几人的科研攻关小组,综合采用了机械、微电子、自动化、X射线探测等技术,花了几十万,成功解决了问题。每当生产线上有空香皂盒通过,两旁的探测器会检测到,并且驱动一只机械手把空皂盒推走。

南方有个乡镇企业也买了同样的生产线,老板发现这个问题后大为发火,找了个小工来说:你他妈给老子把这个搞定,不然你给老子爬出去。小工很快想出了办法:他在生产线旁边放了台风扇猛吹,空皂盒自然会被吹走。

这个故事说明,我们要多专注问题本身,而不是考虑实现的技术要多完美。这就是架构师的用户思维,所谓,不忘初心。

 

题外记

前面讨论了六种考虑问题的习惯,不仅对架构师而言要如此,要成为好的软件工程师,设计师,也需要培养类似的良好思维习惯,这样才能不断地突破自己,提升自己。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值