“架构”并不是一个新颖的概念,它起源于建筑领域。而按实际来讲,架构其实自人类起源以来,就随之相应出现。个人的精力是有限的,但是为了完成日常必须工作,出现了分工,每个人完成自己熟悉的事情,将成果交易,就达到日常需求了。这也就是“架构”。渐渐地,人们开始造房子,开始生火,开始在室内有了越来越多的需求,为了满足这些,将房子按功能划分为不同的房间,就成了建筑架构师的工作。同样,各行各业都需要架构使得整个系统更规律,更容易对问题进行分析并提出解决方案。
架构无处不在,也就意味着架构实际上就是为了解决人的问题。架构师的任务就是理解客户的问题,交流也就极为重要,但是,交流通常并不是那么简单。例如,通常一些显而易见的事情就很难用言语描绘出来,同样,每个人和每个人的认知也是不同的,这些种种问题都会影响我们的交流,是我们得不到有用甚至是错误的信息,进而影响最终的成果。所以,作为一个架构师,要首先做到的就是,能够正确的认识概念,发现概念背后所隐藏的问题,这样才能认识目标领域要解决的问题,为做出架构打好基础。
架构师最主要的职责,就是识别出要解决的问题。由于人之间的交流常常会出现问题,常常会对架构师的判断出现影响。架构师要做的,就是要透过现象看本质,发现问题的真正所在,不要受到客户的言语影响。发现问题的主体,确定问题的约束,这样才能真正确定问题。
通过沟通识别出真正的问题后,大部分问题会迎刃而解。对于那些尚未解决的真正问题,就需要做出调整——架构的切分。每个人都会关心自己的利益,这就是架构切分的依赖。基本要遵守着几个原则:连续活动不可切分;负责人的权利和义务对等;符合每个人的负载;对外透明。最终架构的切分导致组织架构的出现,并且是呈现树状的,也即是分层。要注意的是,分层越少,各层的沟通效率越好,才能让整个系统的效率最大化。
自冯诺依曼结构出现开始,计算机的发展就向着模拟人脑的方向发展。软件是基于在计算机硬件上的编程,用来控制电脑行为的程序。随着科技的发展,计算机的硬件逐渐廉价,高级语言的出现,使得编写电脑程序越来越简单,越来越多的软件工程师出现,为了简化人的活动,越来越多的软件随之出现。软件工程师的培养其实是一个艰难的过程,需要在过程中学习许多方面的知识,于是也出现了分工:架构师对系统进行设计,将代码任务交给工程师,工程师写好代码交付给测试人员,多个人的配合工作,极大地降低了难度,同时演化出了软件公司。软件架构出现也同样如此,这样,就是的软件的开发更有效率,利益同时也能最大化。
当开始对系统进行架构的时候,任务量其实是非常大的,因为要考虑的问题很多,成本、目的、方法、人员等等,都值得深思熟虑。架构师也不是轻易就能成长成的,我们需要经历多方面的考验:跳出自己的小圈子,从整体来观察问题;也要树立自信心。最关键的还是要从实际出发,最开始去硬着头皮去克服对时间的恐惧和压力,舍得投入去做,只要成功一次,自信满满就会建立起来,就离我们的成功近了一步。成功架构的秘诀就在于发现他人的真正问题,找出他的利益相关:解决了问题,谁会获益,没解决,谁又会损失。通过这样的分析,基本就能确定最关键的“谁的问题”,这就与问题的解决不远了。之后,分析业务逻辑,对业务进行拆分,每一个小部分独立成为一个组件(功能),充分分析理解,就能完成系统的架构。
我们要认清业务,技术以及架构之间的关系。由此可以引发以下几个观点:第一,技术并不代表着架构能力,技术掌握的越多,并不代表着你的能力就一定很强,这是对自己很不负责任的态度;技术的存在是为了解决业务,随着业务的上升,技术也会有一个优劣选择的过程;架构师应该结合业务和技术两方面;为了满足需求,要学会造轮子,同时也要注意不要为了造轮子而造轮子,这会徒增成本减少利益,也要考虑长期的成本与效益,这才称得上是一个合格的架构师。