软件架构师,乍一听给人很高大上的感觉,技术型工程师,站在金字塔顶端的角色,看完九篇博客之前,在网上搜了搜软件架构师的词条。
什么是软件架构师
软件架构师是软件行业中一种新兴职业,是软件项目的总体设计师,是软件组织新产品的开发与集成、新技术体系的构建者。对一些大型软件产品或项目的开发,这一角色显得很关键,因为缺乏好的软件架构师而导致项目失败的例子不胜枚举,一个没有经验和能力的软件架构师也会使软件项目失败的速度加快。正因如此,MartinFowler指出:架构师是对所有重要事情作出决定的人。(来源:https://wiki.mbalib.com/wiki/%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%E5%B8%88)
这指明了软件架构师在整个工程中的地位和重要性,可以说,整个项目的进度以及能否完成,全靠软件架构师。那么,软件架构师是如何工作的呢?带着这个问题,继续阅读《架构漫谈》九篇博客(地址:https://www.infoq.cn/profile/1279517/publish)。
架构师必须是一个组织的领导人,这是文中的一句话,也很好地展示了软件架构师的地位,在说架构师之前,还得先了解架构是什么,对于软件工程专业的学生来说,对这些概念不懂是很可笑的,在博客中,给了架构的定义:
架构的英文是 Architecture,在Wikipedia 上,架构是这样定义的:
Architecture (Latin architectura, from the Greek ἀρχιτέκτων arkhitekton"architect", from ἀρχι- "chief" and τέκτων "builder") is both the process and the product of planning, designing, and constructing buildings and other physical structures。
从这个定义上看,架构好像是一个过程,也不是很清晰,所以只能自己去摸索了,大体上,个人感觉,架构主要是一种分工,拿一个项目来说,首先要考虑的是人月,每个人的效率,整个工程的开发进度,针对一个工程来说,团队合作是少不了的,每个人都有自己擅长的部分,同时每个人在团队中扮演的角色也是不一样的,而这种分工会影响到项目的进度;每个人对同一部分的完成情况的满意度也是不一样的,有的人对代码的要求极其严格,这也是团队中的一个问题。
一位架构师在项目中,应该是项目的最大权力者,对项目完全负责,包括团队在内,都由架构师进行分配,作为项目组中的leader存在。程序员在项目中的位置是,我只考虑分配给我的任务如何实现,仅仅是那一部分,而不会去考虑整个项目的构成,软件架构师不一样,考虑的问题要全面,站位要高,要在程序员的角度之上,同时还得统筹兼顾,整个项目的开发,将整个项目进行分割成每一部分,然后将每一部分进行分配,分配到具体 的执行小组。
架构师要做的工作首先就有一个——切分,将项目进行切分、分配,而这项工作要考虑很多因素:
1. 某个或者某些利益相关人负载太重。
· 时间上的负载太重。
· 空间上的负载太重,本质上还是时间上的负载太重。
2. 某个或者某些利益相关人的权利和义务不对等。
一个关键词:利益,架构师是要去平衡别人的利益,甚至会调整别人的利益的。一旦架构师是全心全意的为别人的利益服务,自然而然的架构师就拥有了强有力的影响力,肯定会是一个 leader。但是只是民意上的 leader 是没有用的,不能完全发挥架构师的能量。
技术和语言,都是用来识别和解决所服务的主体的权责,保护并提升所服务的主体的权利的。特别对于软件领域来说,必须明白软件本身是怎么回事,解决什么问题,还要解决软件所服务的对象的领域本身是怎么回事,解决什么问题,这就要求更高了。语言和技术应该是随手拈来才对,对于架构师这些都是工具。学习技术和语言,如果明白了这些技术和语言要解决的是谁的问题,什么问题,学起来是非常快,非常容易的。
在很多人的概念里面,架构和技术实际上是等同的。学会了几种技术,就认为自己是架构师了,甚至是学习的技术越多,就觉得自己的水平越高。这样实际上是对自己很不负责任的。要知道任何技术都是为了解决某种问题而存在的,学会了技术,并不代表自己能够解决问题,这一点非常的重要。学会的技术的多少,所带来的差别只是自己解决问题的手段多了罢了。但是手段多了就一定是好事吗? 很多时候,学习的技术越多,越不知道采用哪种技术好,所谓“乱花渐欲迷人眼"。
架构师应该承担起解决业务问题的这个角色来,架构师要考虑的是提出解决方案,处理好时间和利益的关系,在期间会有时间的紧迫感,要将利益进行平衡,达到最大的利益,用最先进的技术、最快的时间完成一项工程。
来自网络的定义:软件架构师的主要任务就是规划与系统架构层次相关的事务,评估可能的风险与成本,并有效运用有限的人力、物力资源满足系统层次的需求。优秀的软件架构师是保证软件系统强大生命力的核心人物。专业架构师能够帮助组织全面研究现有架构和设计模式、评估系统设计的优缺点和可能存在的风险,通过一系列的专题指导和具体案例帮助组织掌握先进的、成熟的设计模式,简化复杂的业务逻辑和需求,确定系统最佳方案。在必要的情况下,还可就特定领域或课题,为开发人员提供定制指导。(来源:https://wiki.mbalib.com/wiki/%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84%E5%B8%88)