正文
07
我现在只是在描述它的语境。尺度把握人生,高度决定视野,角度改变观念,当我们以架构的角度来看问题的时候,有些时候,你就必须要改变你固有的观念。
你只是一个企业中的员工,你不是高层,也不是决策层,
架构本质上是一个执行者
,或者说,人家需求来了,你需要在需求的基础上,在人事物的规则下,在成本,资源,时间的约束下,你完成一种平衡的工作,即把架构合理的设计出来,换句话说,我们一定时刻要注意你的身份,你是没有资格去参与政治斗争的,却只能被别人被这些约束条件所左右。
在项目组里面你是架构师,你将会看到你这个
架构师,和需求设计人员,还有项目经理
共同组成了一个软件开发的核心班子,我可以用一个比喻来说明一下这几者的关系。
我们知道中国军队里面有三个关键人物,项目经理就相当于是军长,而你其实是参谋长,是指导员,是政治部主任(政委)。
这是你需要时刻注意的角色。你要做的是这个工作,你一旦摆不好搞不好自己的定位,你就有可能会被项目经理或公司高层扫地出门。因为架构师虽然是软件项目组里面的核心成员,
但不是最终决策人员
,这个组织既然是个team,当然有不同的分工,你有你的负责内容,别人有别人的任务,你要自己搞明白你的定位。
08
因此,我们的角色,其实是参谋长,是指导员,是政治部主任,你是要配合项目经理的工作的,但同时,你要意识到,架构师不是军长!
架构师到底是什么?
架构师是
参谋长
。架构师是
指导员
。
架构师是
政治部主任
。
但,架构师不是军长!
架构师一定要注意这个上下文之间的关系,并摆正自己的心态和位置,
这个环境就是,你和别人一起构建与设计,并完成一个软件项目。
作为系统架构师,你首先要搞清楚需求的规约,在这个基础上,你才能体现你的价值,就是让你去构建一个架构,然后你要构建的架构能够满足这个需求。
你的工作其实是,你作为一种策略,一个战略设想,千万不要把自己弄得跟军长一样,在一个作战部里,你只是一个参谋首长,也就说你不要妄下定论,你的决定也不见得是最终要使用的,不明白这一点,可能需求变更或其它部分有变动时,你可能就会和那些设计师程序员等技术人员,打起来了,所以
你要学会平衡
。
你要把握好这个度,所以,我才一直强调,
尺度把握人生,这其实就是一个平衡的思想
,这个思想说起来很简单,人人都懂,但在实施时,你可能又忘记了,使用上了你的牛脾气,平衡其实是很难的,这个要修炼,不断的反思与总结,还要实践,没有经验,嘴上说说容易,真到实践中去可能就很难了。
09
因为我们是企业中的人,就得考虑你在企业中的位置,以及你在企业中你能干些什么,如果你把你能干的活,干的漂亮,那就很了不得了,所以我们就采取这种工作模式,而不是只是去想。
如果你看不到企业中大量的经济和政治斗争,你很可能就会犯错误,人家不要让你来参与了,换句话说,你成了斗争的牺牲品,失去参与资格了,这就是一种失败了。其实,严格的说来,你在项目组中,只能算是副手,而不是最终领导,这样,二把手的地位决定了你,也决定了你的言行。
当需求来了之后,你的工作就要开始了,你需要根据需求有一个大概的设计,并分割这个设计。
首先,你要仔细的研究这些需求,来构想你的设想,如果需求中有矛盾有不一致有模糊有不明确的地方,那你肯定要搞清楚,这些问题是如何出现的,是需求文档的问题,还是你自己引入的问题,要确定问题是哪一方面导致的,是谁负责的,如何和他们沟通,以解决这个问题。总之,要搞清楚这个问题。
在这种情况下,有可能扯皮的事情就出现了,所以,你也得有斗争意识了,这个世界上没有斗争的活动几乎是没有的,你说遇到问题了,别人不承认,你不参加这个斗争可以吗,这也是不可能的。需求不可能一开始就是完美无缺的,有些需求本身也是相互之间的逻辑是矛盾的,当然了,甚至就需求本身也是不断讨论,讨价还价,斗争妥协的结果,属于你的职责范围,你就得把它搞清楚,哪怕是有限的参与斗争中去。
10
很显然现实中,常胜将军石勇这种人是很少见的,如何摆平这些要素,从而根据这些要素来客观的简单的描述清楚需求,这也是实现架构的先决条件。
然后,在清理了一些障碍和困难后,我们可能就要了解一些关于架构的专业术语了。
比如,什么是架构,当然也是众说纷纭,没有一个确定的答案,但这并不影响我们对架构的理解,反而可以从多方面来直观的去理解架构是什么,为什么要谈这个呢,如果我们不理解这个概念,你甚至是根本无法理解你的职责与工作范围。
因为我们必须给我们的项目设计一个目标。需求体现了我们达成的目标,它就是一种驱动过程,目标导向的一个过程。这是一个增量迭代的软件开发过程。软件开发过程的三个基本点,我们说一个中心两个基本点,我们是用来驱动的更新的节奏,将一个软件过程,有目的导向的,而目的和手段,想办法去平衡,然后才开始进行设计。
增量迭代的意思,就是说我们不可能一次性的得到一个完美解决方案。只要大方向是没问题的,后面的工作可以增量性的,创造性(creative)的解决。因为我们在这过个程中,还要摆平两个使用最多的词汇,艺术和工程,art and engineering之间有什么区别。
11
那么,艺术和科学,或者说艺术和工程有什么区别?
第一个问题,我们要摆平我们这两个词汇,我们现在说的这个软件工程,或者说这个范式最大的区别是什么?
第二个问题是,我们也要意识到,我们的工程也是具有creative创造性的?
科学是规定性的,而架构艺术才是创造性的。我们在创造和规定,或者说我们在艺术和科学之间,要找到一个平衡点。即使我们做工程也是不死板的,也需要你的创造性,当然也需要你照着规章制度去做,如何做,这恐怕还是一个平衡的关系。
那我们再来看看什么叫架构?
对于认识事物来说,我们首先要定义一个核心的概念,然后你再去描述这个概念,这需要在人头脑中建立一幅这样的图像,一个概念其实就表达了一种图像。
概念之所以可以表达很多东西,就在于人是能理解概念的动物,什么叫人?
人总是能制造工具和使用工具的高级动物,所以说,我们人是高级动物,当然猪狗羊也是高级动物。
但,我们人之所以不同于其它高级动物,或者说人异于同等的其它高等动物之间的区别,还在于人能制造并使用自己制造的工具,用工具这种方式去描述概念,以及其它事物的关系,以及整个世界。
人,你是画了一个图,语言也是指向着一幅图像,这样有了这样的指向后,人们之间才可以理解,但其它动物就不是很容易理解,就高级动物这个概念本身,我们还是要把这个概念讲清楚,包括人与其它的如猪狗羊等动物区分开始,就是正是因为我们使用了概念。