通过阅读王概凯的架构漫谈和查阅一些其他资料,我大致了解了一下软件架构师的一些相关知识。
什么是架构呢?在架构漫谈中这样说道:把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构。那又应该如何做好架构呢,最重要的有两点。一是识别问题,要正确的认识问题,需要问两个问题:这是谁的问题,有什么问题。二是要架构切分,架构的切分的导火索是人的负载太重。架构的切分实际就是对stakeholder的利益进行切分或合并,使得每个stakeholder的权责是对等的,每个stakeholder可以为自己的利益负责。它的最终结果都会体现在组织架构上,只有这样才能够让架构落地并推进。架构切分的结果一定是一个树状,这也是为什么会产生分层。层数越多沟通越多,效率越低,分层要越少越好。尽可能变成一颗平衡树,才能让整个系统的效率最大化。
所谓架构师,通俗的说就是设计师或结构设计者,这些定义如果用在建筑学上,则是很容易理解的。在软件工程领域中,软件架构师实际上就是软件项目的总体设计师,是软件组织新产品的开发与集成、新技术体系的构建者。软件架构师是软件行业中一种新兴职业,工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划。主导系统全局分析设计与实施、负责软件架构和关键技术决策的人员。软件架构师应能迅速抓住问题要害,并做出合理的关键决定的能力,具备战略性和前瞻性思维能力,善于把握全局,能够在更高抽象级别上进行思考。软件架构师一般都是具备计算机科学或软件工程的知识,由程序员做起,然后再慢慢发展为架构师的。
要成为一名好的软件架构师,首先要解决两个问题,首先是业务问题,具体的现实生活状态下,没有软件的时候,所解决的问题的主体是谁,解决的是什么问题,是如何解决,如何运作的?其次是计算机问题,如何把现实生活用软件来模拟模拟出来的软件,需要哪些硬件设施才能够满足要求? 并且当访问量越来越大的时候,软件能否支持硬件慢慢长大,性能线性扩展?因为硬件是可能会失效的,软件如何在硬件失效的情况下,仍然能够保证可用性,让用户能够不中断的访问软件提供的服务?怎么收集软件产生的数据,为下一阶段的工作提供依据?
那分别是谁的问题呢?一是业务的问题,业务的owner需要提升业务的效率,降低业务的成本,这是动机。二是软件工程师的问题,要解决业务owner把业务虚拟化的问题,并且要解决软件开发和运营的生命周期的问题。
分别有什么问题?业务问题的本质,是业务所服务的对象的利益问题。为了能够让软件很好的跑起来,软件工程师必须理解业务所服务的对象,他们的利益所在,即业务问题。业务面对这些问题是如何分拆解决的? 涉及到了哪些概念? 这些概念分别解决了哪些哪些问题? 我们不能自己按照自己的理解,用自己的一套概念体系来表述。如果这么做的话,会导致两个问题:一个是业务无法和我们交流,因为他们无法明白我们所自己创建的概念,所以他们无法确认我们的理解是否正确。另一个是我们所表述的东西,并没有在实际生活中实践过,我们也不知道这些概念是否能够解决业务的问题。软件工程师还必须要考虑,用什么样的硬件把软件跑起来,怎样跑得好,跑得快,并且可以随着业务的流量逐渐的长大?
好的软件架构师不只是一位受到尊敬的资深技术人员,通常也是策略制定和组织协调的高手,称职的顾问与领导者。这是因为软件架构规划与设计主要是以宏观的角度切入系统架构,一般所谓的设计则是以微观的角度切入。软件工程师和程序员所考虑的是单个构件的功能,而软件架构师必须从全局的角度理解软件项目的业务目的和期望结果,能够定义不同的构件是如何组装在一起的。软件架构师规划系统的角度主要是从自上而下的方式着手,而软件设计师则多半从自下而上的方式着手。这种从宏观/微观的角度进行划分,在其他学科也常看见,如宏观经济学与微观经济学等。这种宏观角度的本质,就是软件架构师专业领域与其他软件开发人员最根本的区别。