zoukankan      html  css  js  c++  java
  • 架构漫谈读后感之软件架构师如何工作

      最近接触到了软件架构师这一职业,那么首先就是要了解软件架构师平常都是做什么的?怎么工作的?应老师的要求去攻读了王概凯写的架构漫谈,总共分为九章,以下位我读完每章之后所了解到的:

      第一章:主要讲的什么是架构以及为什么会产生架构。从架构的概念上来看很模糊,就说明了架构好像是一个过程,不是很清晰。那么为什么会产生架构,从原始社会开始的人们刚开始自顾自己,大部分都难以生存,直到人们发现大家一起合作,每个人站在自己会的熟练的工作上,最后大家共享成果,能够更好的解决生活问题,最大化的发挥生产力的效用。这实际上也就形成了社会的架构。那么怎么定义架构呢?把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构。总结一下,什么是架构,就是:1.根据要解决的问题,对目标系统的边界进行界定。2.并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。3.并对这些切分出来的部分,设立沟通机制。4.根据3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。

      第二章:主要讲的是认识概念是理解架构的基础。在章节中举了“什么是桌子”,以及概念在古代称之为名相,名为人们给事物起的名字,用来标识该事物的作用,相为人们看到的形状以及该事物所代表的的作用。那么为何需要这个作用,主要是还是为了解决人们在最初所发生的问题,如人们需要一个可单手持握,但是希望避免直接接触所盛物体,于是生产了杯子是一个道理。还有就是在谈及概念的时候肯定会抽象,而抽象代表的含义,实际上是把不同的概念的相似的部分合并在一起,形成一个新的概念。回过头来,根据架构的定义,要做好架构所首先必须具备的能力,就是能够正确的认识概念,能够发现概念背后所代表的问题,进而才能够认识目标领域所需要解决的问题,这样才能够为做好架构打好基础。最后总之为如何有效的去认识概念,明白概念背后的含义,以及如何利用对概念的理解,快速的进行学习。掌握了这些原则,会有利于帮助我们在架构阶段,快速的识别和定位问题。

      第三章:要学会识别问题。所有的概念基本都有一个很大的问题,就是缺乏主语。而我们大家都心照不宣的忽略这个主语,沟通的时候也都以为大家都懂得对方说的主语是谁,结果大家都一起犯错误。找出问题的主体,是做架构的首要问题。这也是我一再强调的,我们要解决的问题,一定都是人的问题。更进一步,架构师要解决的,基本都是别人的问题,不是自己的问题。再进一步,我们一定要明白,任何找上架构师的问题,绝对都不是真正的问题。识别问题的一个最大的前提就是要搞清楚:是谁的问题。这个搞清楚了,问题的边界也就跟着确定了,再去讨论问题才有意义。总结一下,要正确的认识问题,需要问两个问题:1.这是谁的问题?2.有什么问题?当得到的回答是支支吾吾的时候,我们就知道正确的方向在哪儿,以及需要做哪些事了。

      第四章:要学会架构切分。切分就是利益的调整我们要非常的清楚,所有的切分调整,都是对相关人的利益的调整。为什么这么说呢,因为维护自己的利益,是每个人的本性,是在骨子里面的,我们不能逃避这一点。我们以第一篇文章里面的例子为例来做解释。那么为什么需要切分?当人们认识到要主动的去切分一个系统的时候,毫无疑问,我们不能忘掉利益这个原动力。所有的切分决策都不能够违背这一点,这是大方向。结合前一篇“识别问题”,一旦确定了问题的主体,那么系统的利益相关人。总结一下1.架构的切分的导火索是人的负载太重。2.架构的切分实际就是对stakeholder的利益进行切分或合并,使得每个stakeholder的权责是对等的,每个stakeholder可以为自己的利益负责。3.架构切分的最终结果都会体现在组织架构上,只有这样才能够让架构落地并推进。4.架构切分的结果一定是一个树状,这也是为什么会产生分层。层数越多沟通越多,效率越低,分层要越少越好。尽可能变成一颗平衡树,才能让整个系统的效率最大化。

      第五章:主要是软件是什么?冯诺依曼结构,图灵机,以模拟人为目标.成本为王.软件扮演的角色.软件开发的架构演变.软件架构的出现等不同解释软件的本质.。其实说了这么多也总结出来软件其实就是通过把人类的日常工作生活虚拟化,减少成本,提升单个人员的生产力,提升人类自己的利益。软件工程师的职责在这个浪潮中,不堪重负,自然而然就分拆为不同的角色,形成了一个独特的架构体系。这一切的背后,仍然是为了提升人类自己的利益,解决人类自己的问题。

      第六章:主要解决了软件架构是需要解决的问题。其实也就是解决究竟那些算是软件架构呢?其一:软件因为流量增大而分拆成不同的运行单元,在不同的机器上部署所形成的架构,属于软件架构。其二:每个运行单元为了让不同角色的人,比如前端,业务,数据存储等能够并行工作,所分成的代码架构,也属于软件架构。那么软甲架构是怎么解决问题的我们一定要讲清楚,究竟说的是部署的架构,还是代码的架构。软件架构的落地,需要软件的组织架构和流程来保障,离开了这个,软件架构是一句空话。另外很多人讲,架构是进化出来的。架构实际上是在量不断的增大,超过了单台服务器的容量,逐渐的分拆,同时导致超过单个人员的能力,工作人员不断的增多,工作内容不断的分拆形成的。这本身就是架构的意义所在。不管怎么分拆,所达到的目标没有任何变化,就是完成业务在计算机中的虚拟化。

      第七章:谈及架构师的权利。架构师的权利和义务:架构师是要去平衡别人的利益,甚至会调整别人的利益的。一旦架构师是全心全意的为别人的利益服务,自然而然的架构师就拥有了强有力的影响力,肯定会是一个leader。但是只是民意上的leader是没有用的,不能完全发挥架构师的能量。所以架构师必须是一个组织的领导人,有权利调动这个组织的架构,才能够更好的发挥架构师的作用,更好的把利益的调整落到实处。反过来,具备架构师能力的组织领导人,一定是一个很好的领导,这个组织一定是很健康向上的,因为每个人的权利和义务就是比较均等的。架构师的义务似乎不用说了,大家提的要求可能比我提的都高 —— 当然是发现问题并且解决问题。所以架构师也要具有一定的权力才能带领团队走向成功。

      第八章:从架构师的角度去看如何去写代码:从刚开始重写代码,推翻原有架构,重新设计等等说法,来说明架构的进化。这实际上就是当初为了完成任务,没有充分思考所带来的后果。这也并不是架构进化的事情,而是个人对问题领域的逐渐深入理解的过程。以上只是针对单一的Service部署单元的分析,扩展开去,对于其他的部署单元也是类似的。每个单元的下一级都可以认为是Repository,每个单元的上一级都可以认为是User。这些实践在我自己的项目中都有用到,非常的有效,迭代的速度非常的快。很多人担心Business Model建不好,其实没关系,刚开始可以粗糙一点,后续可以慢慢的完善。这个架构已经隔离好了每个部分的变化对其他部分的影响,变化成本都在可控的范围之内。

      第九章:要学会理清技术、业务和架构的关系:我们要学会怎么处理业务、技术还有架构的关系。那么什么是技术要解决的是人类自己的问题,这就是业务,实际就是人类的利益。架构师应该承担起解决业务问题的这个角色来,专注于Business Domain和软件本身的架构,让技术人员致力于为业务在计算机中跑起来而努力。只有把这两者很好的结合起来,才能更好地完成业务的目标,才会让软件更好地服务于大家。最终一定会得到一个很好的软件架构,令软件开发团队和业务部门都能够很好地开展工作并降低成本。准确识别采用什么技术的能力,也是架构师所要具备的能力之一。考虑的主要因素也是长期的成本和收益。

      综上所述软件架构师要知道主要讲的什么是架构以及为什么会产生架构,主要讲的是认识概念是理解架构的基础,要学会识别问题,要学会架构切分,主要解决了软件架构是需要解决的问题,谈及架构师的权利,从架构师的角度去看如何去写代码,要学会理清技术、业务和架构的关系。在了解以上职能以后就能基本了解软件架构师的功能需要。

  • 相关阅读:
    Caffe2(1)----Ubantu14.04安装
    ROS知识(16)----如何编译时自动链接同一个工作空间的其他包的头文件(包含message,srv,action自动生成的头文件)
    GIT(4)----免输入账号和密码方法
    faceNet编译问题
    Python知识(7)--最小二乘求解
    BeanShell用法汇总(部分摘抄至网络)
    web_custom_request和web_submit_data
    创建一个数组,然后随机输出一个数组的值
    lr常见问题
    通过ctrl+r快速启动程序
  • 原文地址:https://www.cnblogs.com/bai123/p/8525205.html
Copyright © 2011-2022 走看看