架构漫谈博客读后感之软件架构师如何工作
架构漫谈(资深架构师王概凯执笔的系列专栏)博客读后感。
其实谈起架构,首先要知道架构的真正含义为何?正如架构漫谈中所提到的,架构是处理和计划、设计、构造建筑和其他物理上的结构的产物,这段定义虽然是以建筑为主体的,但软件行业的架构也与之相符:根据要解决的问题,对目标系统的边界进行界定(即上下范围图);并对目标系统按照某个原则进行切分(切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,但一般选择并行来减少时间);对切分出来的部分,设立沟通机制;根据沟通机制的展开,使得这些切分出来的部分进行有机的联系,合并组装为一个整体,完成目标系统的所有工作。通过识别、分解、合并所遇到的问题,得到对问题的分析,以及解决问题的方案。
此外,要明白的是架构解决的都是人的问题,但做好架构所首先要必须具备的能力就是能够正确的认识概念,能够发现概念背后所代表的问题,进而才能够认识目标领域所需要解决的问题,这样才能为做好架构打好基础。正如今天开学第一天的小测试,老师告诉我们要回答一个有关“你对xxx的认识”的问题时,首先要知道xxx是什么概念,然后需要将如何实现xxx进行告知,这样才能达到问题的关键。所以说,正确认识概念在我们迅速进入一个新的领域以便解决问题具有巨大的作用。
做好一个架构师首先需要做的是识别出需要解决的问题。但我们往往由于过于关注解决问题,急于完成自己的工作,而不关心“真正的问题是什么”而造成的。当我们去解决一个问题的时候,一定要先把问题搞清楚,即为识别问题。而识别问题的一个最大的前提就是要搞清楚是谁的问题,紧随之后问题的边界也就跟着确定了,再去讨论问题才会有意义。找出问题的主体,才是是做架构的首要问题,当明白了问题的主体,我们才可能真正的认识问题是什么。因为问题的主体是问题的隐含边界,边界不确定下来,问题就是不确定的。一旦确定了主体,剩下的就是去搞明白主体有哪些问题。这个就比较直接了,常用的方式就是直接面对主体进行访谈,深入到主体的工作生活当中,体验并感受这些问题,甚至通过数据的反馈来定位问题。(当无法定位是谁的问题的时候,最好的解决办法就是去降低问题发生所带来的成本,尽量隔离问题影响的范围,以便留出更多的时间和空间来静心地识别真正的问题)。
当然,识别出需要解决的问题后,有时候会需要作调整,必须有所动作才能更好的解决所识别出的问题,即为架构的切分,此部分也是一个软件架构师所需要真正精通的一个内容。切分就是利益的调整,每个人都希望把自己的利益最大化,但每个人的能力和时间都非常有限,所以需要对自己不擅长的东西进行舍弃,用自己擅长的东西换取别人擅长的东西。架构师所需要掌握的切分的原则是:必须在连续时间内发生的一个活动,不能切分;切分出来的部分的负责人,对这个部分的权力和义务必须是对等的;切分出来的部分,不应该超出一个自然人的负载;切分是内部活动,内部无论怎么切,对整个系统的外部应该是透明的。
做好一个架构师,首先需要明确两个问题的答案(如果问题不解决,究竟谁会有利益的损失? 如果问题解决了,究竟谁会有收益,谁的收益最大? ),回答了这两个问题就找到了问题的主体,才能识别真正的问题,并把这个行为变成自己面对问题的第一反应。之后给出解决方案,有关于架构的分拆、合并方案,只有让问题的主体的权责对等,才能够真正的解决别人的问题。同时,软件架构师还需要不断地对技术和语言进行学习,做到随时信手拈来,在解决问题时做到某个技术或语言所解决的问题的主体,以及所解决的问题,和自己所面对的问题的主体和这个主体要解决的问题,这两者是匹配的,那么这个方案的成本是最低的,所采用的技术或者语言就是靠谱的!除此之外,架构师还应该承担起解决业务问题的这个角色来,专注于Business Domain和软件本身的架构,让技术人员致力于为业务在计算机中跑起来而努力。只有把这两者很好的结合起来,才能更好地完成业务的目标,才会让软件更好地服务于大家。并且还可以在一切业务的目标完成过程中尽可能的降低了成本!
软件架构师的工作是漫长而艰辛的,所以目前自己唯一可以努力的是技术和语言的提高,不断地学习实践,才能在日后更好地发展完善!