说起软件架构师,我只能说我几乎没有任何了解。听名字可以看出软件架构师是管理软件架构的,但是软件架构又是什么?昨天,软件体系结构这门课开课了,老师提到了软件架构,课后我又看了看架构漫谈的几篇博客(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。这句话的翻译为中文是:架构(拉丁当时从希腊ἀρχιτέκτωνarkhitekton“架构师”,从ἀρχι——“首席”和τέκτων“建设者”)是过程和产品的规划、设计和建造建筑物和其他物理结构。博客里举了早期社会分工合作的例子,人类通过将生存这一目标分解为各个小目标,有人负责种田,有人负责打猎,有人负责制作工具等等,然后这些人互相交换资源,从而更省时省力的完成总目标。这个分工合作的过程就是架构。
所以我认为软件架构师必须对软件有深刻的理解,了解软件如何工作才能完成最终任务,这样才可以将总任务分解,形成各个互相协助的子模块。
博客里提到了概念,我认为这个“概念”就是将具体的事物、具体的解决方案抽象化。根据架构的定义,要做好架构所首先必须具备的能力,就是能够正确的认识概念,能够发现概念背后所代表的问题,进而才能够认识目标领域所需要解决的问题,这样才能够为做好架构打好基础。这说明一个软件架构师必须能具有抽象能力,能够将问题抽象化,分类化。
做好架构首先需要做的就是识别出需要解决的问题。一般来说,如果把真正的问题找到,那么问题就已经解决了 80% 了。这个能力基本上就决定了架构师的水平。找出问题的主体,是做架构的首要问题。软件架构师要解决的问题,一定都是人的问题。更进一步,架构师要解决的,基本都是别人的问题,不是自己的问题。再进一步,我们一定要明白,任何找上架构师的问题,绝对都不是真正的问题。为什么呢? 因为如果是真正的问题的话,提问题过来的人肯定都能够自己解决了,不需要找架构师。架构师都要有这个自觉:发现问题永远都比解决问题来的更加重要。
架构师必须是一个组织的领导人,有权利调动这个组织的架构,才能够更好的发挥架构师的作用,更好的把利益的调整落到实处。所以很多公司设了很多架构师的职位,但是并不具备调动组织架构的权利,那么这个架构师的职位一定是形同虚设。架构师只能够通过建立某些流程来行使架构师的权利,比如强制架构 review,反而会造成很多内部不必要的冲突,最终都会导致这些流程流于形式,得不偿失。相信很多人都已经经历过这些,但似乎很少有人回去探讨这是为什么。
除此之外,我还搜了搜软件架构师的一些要求以及基本素养。参考博客所说,软件架构师必须具有以下几点基本素养:沟通能力和自我表达能力、有一定的魄力和感染力、有广阔的知识领域、有过硬的技术能力和丰富的编程经验、多方位思考分析能力。沟通能力几乎是信息领域所有职业都需要的能力,沟通是双向的,一方面要能够理解对方的意思,另一方面也要让对方理解你的意思。学会沟通,才能找到真正要解决的问题,才能做好架构,才能成为一名合格的软件架构师。架构师要与很多人打交道,但是这个职业又是基本没有什么实权的,如果没有很强的感染力,那么谁会听你的话,将你的决策进行到底呢?软甲架构师必须有丰富的领域知识,除此之外,这个职业可能还需要掌握一些看起来与架构毫无关联的领域知识。
PS:架构漫谈(六)跑哪里去了?怎么五之后直接七了?
来源:https://www.cnblogs.com/dream0-0/p/12332081.html