在写这篇博文时,我也不知道自己怎么走上软件架构师这条不归路的,记得当初我负责研发的时候,业务同事以及其他领导都说我是研发中最懂产品的,业务提出很多棘手的问题,我都可以帮忙解决。当我负责产品经理角色的时候,研发部门及其他领导说我是产品中最懂技术的,有些技术框架类的问题,我这个产品也得帮忙出技术架构设计方案,就这样我就糊里糊涂成为了架构师。也许这个大家对我抬举,但在我看来,架构师就是一个既懂技术,又理解产品的人,只有懂技术,才能现有资源上设计符合产品要求的架构,又能在业务快速发展的时候,快速相应业务,那么架构师是做什么的?在团队中担任着什么样的角色?他解决了什么问题?今天我们就来聊聊这个话题?
架构师
架构师这个岗位一般情况都是由有几年工作经验的研发人员担任,很少有公司会聘请应届生来担任这个角色,基于这个原因,在这里我默认架构师是必须会编程,而且是可以独立完成某一业务研发,当然架构师还得有职责,不然对不起这个职称啊。
从图一,我们看出架构师是团队的核心角色,肩负着与众不同的职责,他们不是项目经理,却决定着何时如何交付项目,他们不是产品经理,却要确保如何满足产品要求,他们不是软件工程师,也要负责编写核心代码,但做得更多的是架构设计的事。
图一:架构师的角色定位那么我们从工程角度来定义架构师的话,架构师需要具备以下三点要求:
- 最基本的要求:架构师是将软件系统分解成多个可实现的模块,
- 符合公司战略要求:架构师在兼顾公司战略的同时、,要确保系统整体高效工作,在软件质量属性(非功能性需求)进行权衡的同时,并管控着不可避免的技术债务(关于技术债务,可以看看我在2月份写的技术债务衡量指标),
- 提高研发团队的整体研发能力:架构师需要在设计高效运行的系统的同时,需要锻炼和提升整个团队的架构设计能力,因为人人都可应该是架构师,知识是可以共享的。
通过上面介绍的三点要求,想必大家对于架构师有了那么一点点的理解,接下来,我将通过这三个方面详细给大家介绍一下架构师到底要做什么?他在团队中起的作用重不重要?
在介绍这三点之前,我们先来介绍两个问题:优秀的软件设计具备哪些条件?以及什么是软件架构,然后我们再聊说说架构师是如何工作的?
一、什么样的软件是出色的软件
软件系统是尽量最大程度降低出差错,再优秀的软件,都会存在差错的,国内的软件微信、淘宝、百度,国外的谷歌、Facebook、亚马逊等,都会出现大大小小的不,甚至会出现宕机现象,而架构是软件成功的基础,我们可以从以下六个方面来评估如何设计出出色的软件
1、优秀的架构可以将大问题分解成容易处理的小问题
现在软件系统庞大而复杂,有很多灵活的组件,我们都知道目前最流行的微服务SpringCloud就一个组件整合大家族。架构巧妙地解释了如何将系统划分为轻巧、独立的小模块,同时还能确保整个系统高效的协同运行,让整个系统的价值高于每个模块的价值之和。
2、优秀的架构向大家传达如何协同工作
软件研发是一门人际沟通的艺术,架构描述了整个系统如何组成有机的整体,同时也承担着大家如何合作开发软件。系统越复杂,沟通也越显着重要
3、优秀的架构统一团队沟通语言
在团队讨论问题的时候,统一语言是非常重要的,在前段时间,我跟大家讨论一个行业语音架构问题的时候,就出现了大家讨论时,行业语言描述不统一,导致讨论效率降低了很多,这个也错在于我接触这个行业不久。
软件架构为我们的沟通提供了基本概念和词汇,这样统一了我们的沟通语言,可以把时间花费在解决用户实际问题上,而不需要花费在解释新概念及词汇中
4、优秀的架构关注的不仅仅是功能
软件的特性和功能都很重要,但它考虑的不是具体的某个点,不是实现某个项目的具体功能,更多是全面的架构设计,除了功能需求,还要考虑成本、约束、进度、风险、团队的交付能力,以及最重要的质量属性(非功能性需求,如可伸缩性、可用性、性能、可维护性等)。
5、优秀的架构可以让你避免重大错误
我记得几年前读过一本书,作者将软件架构定义为:“架构是关于重要的东西,不管是什么”,我们认为重要的东西是很难改变的,除非是增加了复杂性,国外大佬在这个基础上重新定义了架构:···重要的设计决策。肯定架构在整个系统中起到了决策作用,架构师不是无所不能的,架构师无法考虑到系统运行时全部可能性,但他可以帮助我们发现那些今后可能会带来的麻烦的问题和地方。
6、优秀的架构让系统更加灵活
在产品初期,业务的复杂度一般不会很大,对技术的要求也不会很高,随着公司业务的不断拓展,这时候业务需求越来越复杂,对技术要求会越来越高,如何在前期架构设计不好的情况下,我们需要偿还我们的技术债务,优秀的架构设计,可以为软件提供灵活可拓展的结构设计。
以上就是优秀的架构为软件研发带来的好处,今天有点晚了,实在困得不行,明天我们接着聊聊:什么是软件架构?
网友评论