软件的用户是众多且复杂的,每个人的体验都不可能是相同的,所以我们对软件有着更高的要求,但是软件必须是由人执行的工作,单个人难以完美地完成一个大型复杂系统,而每个人的能力又是有限的,时间也是有限的。所以为了更快、更好地完成一个大型复杂的系统需要很多擅长不同领域的人来完成,所以不可避免地需要分工合作,所有人按照统一的标准和规范去工作。把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构。
架构就是:
1. 根据要解决的问题,对目标系统的边界进行界定。
2. 并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切。
分出来的部分,并行或串行开展工作,一般并行才能减少时间。
3. 并对这些切分出来的部分,设立沟通机制。
4. 根据 3使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。
架构实际上解决的是人的问题,而概念是人认识这个世界的基础,所以概念的认识对于我们如何认识架构就非常的重要了,能够发现概念背后所代表的问题,进而才能够认识目标领域所需要解决的问题,这样才能够为做好架构打好基础。
做好架构首先需要做的就是识别出需要解决的问题。通常我们大家都把大部分的时间花在了讨论解决方案和实现的细节上,基本上都不会花时间去思考“问题是什么”,但是明白问题是什么对于我们做什么至关重要。当前的所有概念基本都有一个很大的问题,那就是缺乏主语,但是我们大家却都心照不宣的忽略了这个主语,在沟通的时候也都想当然地认为大家都懂得对方说的主语是谁,结果其实谁也不清楚主语是谁。最后的结果是什么呢,每个人都做了很多工作,每个人都认为自己做的是对的,因此没有一个人对结果满意。因为真正的问题没有被发现,自然也就没有被解决,那么后续还得收拾残局,还要继续解决问题。事实上自己的工作并没有完成,反而更多了。所以识别问题的一个最大的前提就是要搞清楚:是谁的问题,只有把这个搞清楚了,问题的边界也就跟着确定了,再去讨论问题才有意义。在识别出是谁的问题之后,我们就会发现,大部分情况下的问题都迎刃而解,不需要做额外的动作。
很多时候问题的产生都是因为沟通的误解,或者主观上有很多不必要的利益诉求导致的。但是总还有一部分确实是有问题的,需要做调整,那么就必须要有所动作,做相应的调整。这个调整就是架构的切分,所有的切分调整,都是对相关人的利益的调整。随着社会的发展,分工是必然的,这个背后的动力就是每个人自己的利益。每个人都希望能够把自己的利益最大化,但是每个人都有自己擅长和不擅长的地方,所以分工就是不可避免的了。
最开始的计算机是指令集控制的,基本上没有软件的功能,但是随着时代的发展,科技的进步,硬件性能的提升,逐渐出现了取代指令集的软件。人们也越来越愿意把原来只有人才可以做的事情交给计算机,所以软件的种类就会越来越丰富,能够做的事情也越来越多,成本也越来越低。可以说,人力的节约和成本的低廉正是促进软件业发展的动力。但是随着软件越来越复杂,我们也不可能单打独斗地自己一个人去开发,必须要很多人去合作,所以就出现了软件架构。
软件架构解决的是人的需求的问题:业务需求、计算机现状的问题,等。这就是软件比较复杂的地方,涉及到软件本身的业务体系,和它所产生的虚拟的业务。软件架构师就是要去平衡别人的利益,甚至会调整别人的利益的。软件架构不仅是代码的架构,也是人之间利益的调整和划分。
我们要想开发出合格的软件,不一定是功能最完备的,但一定是对各个方面的协调和划分是最优的,是解决人之间的各种问题的最好方案。