大家什么时候成为架构师的?
相信要么企业内部晋升、要么跳槽新公司。
那是架构师了,公司和招聘要求定义的职责到底该怎么才能做好?
如何开始架构师的职业生涯?
如何平衡专业技术追求和企业赚钱第一位的追求?
架构师要做什么
对于合格架构师的职责如下:
- 设计软件系统架构;
- 系统分解成为多个可实现的模块;
- 兼顾大局、确保系统整体稳定有效;
- 权衡质量属性(非功能性需求);
- 管控不可避免的技术债务;
- 锻炼和提升整个团队的架构设计能力。
简而言之就是在统筹系统全局、规避系统风险、抽象等的知识下,做设计、分解系统,分配任务,保障系统顺利开发和上线,并利用这些知识来提升团队能力。
何为软件架构
软件架构是关于如何组织软件的一系统重大设计决策和意图的集合,旨在实现期望的质量属性和其他目标。
以上的定义有点抽象,以下引用卡内基梅隆大学软件工程研究院(SEI)的定义:
计算机系统的软件架构是解释系统所需的结构体的集合,其中包括:软件元素、元素之间的相互关系,以及二者各自的属性。
该定义说明了组成软件架构至关重要的要素:元素、关系及属性。
即:元素(属性) + 关系 (属性)= 架构。简单来说就是将多个有某些属性的元素以有某些属性的关系连接在一起,就组成了架构。你可以把元素和关系想象成建筑工地的砖块和水泥,砖块和水泥有很多种类和属性。元素是软件的基本组成(类、包、层、数据库表等),关系则描述了元素如何协作完成任务(调用、依赖、运行于等)。
然而,并不能简单地认为就是这些结构体组成了架构,而是说架构为了解释系统所需的结构体而整合在一起来说明,因为架构还包含了设计的决策和意图。就像JavaBean的命名规范,包含的意图就是代码的规范化、提升代码的可维护性等。
总结下来,软件架构应该是:
元素(属性) + 关系 (属性)+ 决策 + 意图= 架构
成为团队架构师
大体来说,成为架构师之前应该至少参与过三到五个系统的开发,而且承担的技术职责应该不断增加,但最重要的是要总结经验形成全面的知识体系。
从程序员向架构师转变,首先应该要记录和总结你在开发过程中学到的知识。针对每一个项目,做以下几点记录和总结:
- 记录利益相关方和主要业务目标。
- 记录和总结项目的整体解决方案。
- 记录涉及的技术以及选用的原因。
- 记录最大的风险和克服过程。
- 分析项目存在的不足,总结改进的方法。
无论你希望内部晋升,还是跳槽晋升,都要有耐心来提升专业水平。机会是留给有准备的人的。
记住,架构师不仅仅是团队中的角色,更是一种思维方式。就算你是程序员,每天写代码也会做出很多设计决定的,这其中肯定有些决定是具有架构意义的。不想做将军的士兵都不会是好的士兵,所以无论你的头衔是什么,你都应该运用架构设计的思想做出恰当的决策,让架构向着健全的方向发展,那你实际上就是架构师。
开发出色的软件
开发软件系统要尽量规避风险,佛祖保佑永无bug那种,而架构是软件成功的基础。
优秀的软件架构应该是这样的:
-
架构将问题分而治之。架构精确地解释了如何将系统划分为独立轻巧且易于处理的小模块,同时还能保证整个系统协同工作,让系统的总价值高于各模块的价值之和,即1+1大于2。
-
架构提供了协同工作的指导方针。软件开发不单单是技术,也是以人为本的艺术。软件架构描述了整个系统如何组成和意图。掌握了架构也就清楚了大家该怎么分工合作进行软件开发。
-
架构为复杂设计提供了知识。提供统一的词汇、术语、概念等等知识,都为沟通和理解带来了极大的便利。知识是随时间而积累和提升的,利用知识,重复的问题的发生就能避免。
-
架构是最优决策的成果。架构不单单考虑功能的基本实现,还要考虑成本、约束、进度、风险、团队的交付能力,以及最重要的质量属性。权衡这些进行恰如其分的架构设计,才是最优的决策。
-
架构让你避免犯重大错误。架构设计并非万能,但至少要能规避重大的、常见的风险。预防大于治疗,因此架构是可以帮助我们去预防今后可能出现的风险和问题,而不是佛祖保佑就可以的。
-
架构让系统更灵活。业务是不断地随时间而变化的,相应的系统也应该随之变化,而不是推倒重来。因此架构需要为软件开发提供灵活应变的结构。
总结
头衔和职称并不是架构设计的本质所在,必须专注于架构设计的核心职责,逐步学习和积累相应的架构设计知识,并运用这些知识去开发出色的软件,这就真正成为了架构师。