架构师学习之旅—1
意识到该学习架构师知识是在工作的第6个年头,这时候老板总会给我安排一下关于架构师的任务,在对职业生涯发展的期待下,开始了探索架构师的学习之旅,架构师应该做什么与普通的程序员的区别在哪里呢?
架构师在团队中的角色很独特,他们不属于项目经理,却决定这项目何时以及如何交付项目。他们不是产品经理却要保证软件能满足业务目标,架构师也写代码,但是不仅仅是编写算法和代码,更多的是架构设计。
本篇博客学习目标:
1:架构师要做什么?
2:如何开始架构师的职业生涯?
1.1架构师要做什么呢?
大部分架构师都是有程序员转型而来,会编程,能设计高效算法,懂测试和部署软件,这些都是架构师必备的技能,程序员要成长为架构师还需要承担以下新的职责。
从工程质量属性定义问题
软件架构设计是一门以人为本的学科,软件所有的利益相关方都有自己对项目的预期,因此架构师要与产品经理,项目经理,一起协作,共同定义软件项目的需求。架构师关注另一种需求----质量属性,架构师要密切关注表现影响架构设计的约束与特性。
分解系统,分配职责
架构师只有把软件系统进行分解,才能制定出满足质量属性和其他系统需求的策略,例如,你可以指定一个组件实现用户注册功能,指定另外一个组件负责识别图片,你可以分配不同的团队开发不同的模块,可以将数据读取部分从写入部分剥离出来。使得软件系统具备更高的可用性,可靠性,和可伸缩性。
分解系统的优势,小对象更容易推演,测试,设计。
关注大局
从全局角度考虑。架构师要处理的不仅仅是技术问题,人员,过程,业务需求以及其他技术和非技术因素都影响最好的软件系统,即便是一个小小的决策也是可能影响深远的,架构师要高瞻远瞩,纵观全局,不能只关注局部的设计细节。
在质量与属性之间做出取舍
假设客户要求软件具备高可用性,能够响应99%的请求,我们可以引入冗余的代码和结构来提升可用性,虽然这样的设计倒是简单,但是有一个问题:必须 采购双倍的硬件,从而成本也翻倍了,这样做的就是更高的成本换取可用性。
架构师要做的是找出备选方案与各方一起协商如何取舍最为合理。
管理技术债务
所有的软件都有技术债务,架构师知道系统是如何分解的,关注大局指导划分出各种模块协同工作,还要讲业务需求与技术决策放在一起考虑,只有这样架构师才能游刃有余的管理技术债务。
提升团队的架构技能
架构师是整个团队的导师,设计出高大上的架构却无人理解,难以落地的架构是毫无意义的,作为团队的架构师有责任向团队分享知识,适时的传授设计技巧和架构理念,使团队的其他成员能开发顺利的开发出软件。
如何成为架构师
如果你的团队还没有架构师,那么恭喜你,你的机会来了,只要你有心想往架构师方向发展,你随时可以将架构师思维引入团队的设计讨论中,关注有关质量的问题,指明团队何时应该进行取舍,并主动撰写设计策略并开始接受更多架构设计的职责。
大部分架构师都是从程序员做起的。从程序员到架构师之前应该参与了3到5个系统,而且承担的技术职责在不断的增加。
为了记录和评估程序员到架构师的转变,可以建一个档案记录自己在每个项目中的角色,简要的描述系统情况以及你在开发过程中学到的知识,回顾对所有技术领导者,尤其是架构师来说说必不可少的。
档案中记录如下问题:
- 利益相关方是谁,主要业务是目标是什么?
- 项目的整体解决方案是什么?
- 最大的风险是什么?你是如何克服的?
- 如果有机会重新做一遍项目,你会如何改进。
- 无论你是想获得职位晋升还是提高专业的水平,都要有耐心,把握一切设计架构的机会。
如果你团队已经存在架构师了,你可以主动帮忙,尽可能与架构师合作,利用每一个机会学习。
记住,架构师不仅仅是团队中的一种角色,更是一种思维方式。就算你是程序员,每天也会做出数10个设计决策,这其中有些决定就具有架构意义。做个有心人,当机会来临时你便可以把握住。
修改记录:
2021年-06月-16日 修改部分错别字。