02艺术和科学的融合

作者: 玩哲录 | 来源:发表于2017-12-12 17:56 被阅读4374次

    07

    我现在只是在描述它的语境。尺度把握人生,高度决定视野,当我们以架构的角度来看问题的时候,有些时候,就必须要改变你固有的观念。

    你只是一个企业中的员工,你不是高层,也不是决策层,架构本质上是一个执行者,或者说,人家需求来了,你在需求的基础上,在人事物的规则下,在成本,资源,时间的约束下,完成一种平衡的工作,即把架构合理的设计出来,换句话说,我们一定时刻要注意你的身份,你是没有资格去参与政治斗争的,却只能被别人被这些约束条件所左右。

    在项目组里面你是架构师,你会看到架构师,和需求设计人员,还有项目经理共同组成了一个软件开发的核心班子,可以用一个比喻来说明一下这几者的关系。

    我们知道中国军队里面有三个关键人物,项目经理就相当于是军长,而你其实是参谋长,是指导员,是政治部主任(政委)。

    这是你需要时刻注意的角色。你要做的是这个工作,一旦摆不好搞不好自己的定位,就有可能会被项目经理或公司高层扫地出门。因为架构师虽然是软件项目组里面的核心成员,但不是最终决策人员,这个组织既然是个team,当然有不同的分工,你有你的负责内容,别人有别人的任务,要搞明白你的定位。

    08

    因此,我们的角色,其实是参谋长,是指导员,是政治部主任,你是要配合项目经理的工作的,但同时,你要意识到,架构师不是军长!

    架构师到底是什么?

    架构师是参谋长。架构师是指导员

    架构师是政治部主任

    但,架构师不是军长!

    架构师一定要注意上下文之间的关系,并摆正自己的心态和位置,这个环境就是,你和别人一起构建与设计,并完成一个软件项目。

    作为系统架构师,首先要搞清楚需求的规约,在这个基础上,才能体现你的价值,让你去构建一个架构,你要构建的架构能够满足这个需求。

    你的工作其实是,作为一种策略,一个战略设想,千万不要把自己弄得跟军长一样,在一个作战部里,你只是一个参谋首长,也就说你不要妄下定论,你的决定也不见得是最终要使用的,不明白这一点,可能需求变更或其它部分有变动时,你可能就会和那些设计师程序员等技术人员,打起来了,所以你要学会平衡

    要把握好这个度,所以,我才一直强调,尺度把握人生,这其实就是一个平衡的思想,这个思想说起来很简单,人人都懂,但在实施时,可能又忘记了,使用上了你的牛脾气,平衡其实是很难的,这个要修炼,需要不断的反思与总结,还要实践,没有经验,嘴上说说容易,真到实践中去可能就很难了。

    09

    因为我们是企业中的人,就得考虑你在企业中的位置,以及你在企业中你能干些什么,如果你把你能干的活,干的漂亮,那就很了不得了,所以我们就采取这种工作模式,而不是只是去想。

    如果你看不到企业中大量的经济和政治斗争,你很可能就会犯错误,人家不要让你来参与了,换句话说,你成了斗争的牺牲品,失去参与资格了,这就是一种失败了。其实,严格的说来,你在项目组中,只能算是副手,而不是最终领导,这样,二把手的地位决定了你,也决定了你的言行。

    当需求来了之后,你的工作就要开始了,你需要根据需求有一个大概的设计,并分割这个设计。

    首先,你要仔细的研究这些需求,来构思你的设想,如果需求中有矛盾有不一致有模糊有不明确的地方,那你肯定要搞清楚,这些问题是如何出现的,是需求文档的问题,还是你自己引入的问题,要确定问题是哪一方面导致的,是谁负责的,如何和他们沟通,从而解决这个问题。总之,要搞清楚问题。

    在这种情况下,有可能扯皮的事情就出现了,所以,你也得有斗争意识了,这个世界上没有斗争的活动几乎是没有的,你说你遇到问题了,别人不承认,你不参加这个斗争也是不可能的。需求不可能一开始就是完美无缺的,有些需求本身也是相互之间的逻辑是矛盾的,当然了,甚至就需求本身也是不断讨论,讨价还价,斗争妥协的结果,属于你的职责范围,你就得把它搞清楚,哪怕是有限的参与斗争中去。

    10

    很显然现实中,常胜将军这种人是很少见的,如何摆平这些要素,从而根据这些要素来客观简单的描述清楚需求,这也是实现架构的先决条件。

    然后,在清理了一些障碍和困难后,我们可能就要了解一些关于架构的专业术语了。

    比如,什么是架构,当然也是众说纷纭,并没有一个确定的答案,但这并不影响我们对架构的理解,反而可以从多方面来直观的去理解架构是什么,为什么要谈这个呢,如果我们不理解这个概念,你甚至是根本无法理解你的职责与工作范围。

    因为我们必须给我们的项目设计一个目标,需求体现了我们达成的目标,它就是一种驱动过程,是一种目标导向的一个过程。这是一个增量迭代的软件开发过程。一个中心两个基本点,我们是用驱动更新的节奏,将一个软件过程,分解成有目的导向,而目的和手段,要想办法去平衡,然后才能开始进行设计。

    增量迭代的意思,就是说我们不可能一次性的得到一个完美的解决方案,只要大方向是没问题的,后面的工作可以增量性的,创造性(creative)的解决。因为我们在这过程中,还要深刻理解,艺术和工程,art and engineering之间有什么区别。

    11

    那么,艺术和科学,或者说艺术和工程有什么区别?

    第一个问题,软件工程,或者说这个范式最大的区别是什么?

    第二个问题是,我们也要意识到,工程也是具有creative创造性的?

    科学是规定性的,而架构艺术才是创造性的。我们在创造和规定,或者说艺术和科学之间,要找到一个平衡点。因此,即使工程也是不死板的,也需要你的创造性,当然也需要你照着规章制度去做,如何做,这恐怕还是一个平衡的关系。

    那我们再来看看什么叫架构?

    对于认识事物来说,我们首先要定义一个核心的概念,然后你再去描述这个概念,这需要在人头脑中建立一幅逻辑的图像,一个概念其实就表达了一种图像。

    概念之所以可以表达很多东西,就在于人是能理解概念的动物,比如,什么叫人?

    用恩格斯的话说,人总是能制造工具和使用工具的高级动物,所以说,我们人是高级动物,当然猪狗羊也是高级动物。但,人之所以不同于其它高级动物,或者说人异于同等的其它高等动物之间的区别,还在于人能制造并使用自己制造的工具,用工具这种方式去描述概念,以及其它事物的关系,以及整个世界。

    人,你是画了一个图,语言也是指向一幅图像,这样有了这样的指向后,人们之间才可以理解,但其它动物就不是很容易理解,就高级动物这个概念本身,我们还是要把这个概念讲清楚,包括人与其它的如猪狗羊等动物区分开始,正是因为我们使用了概念。

    12

    但我想任何一个概念,有的时候你要问问自己,我是在用一个通用的其它人能理解的方式描述吗,还是我在用一个我独自的方式在描述?

    当然了,我们也知道,不是每一个概念,都有唯一的方式对应着它来描述,而可能描述的方式有很多种,但是我们为了描述它,也只能选择一种最能概括性的描述方式来描述(或者一种约定俗成,大多数人都承认或认可的概念),换句话说,概念不是实体,它只是描述,而科学就是建立在各种各样的概念定义之上,因为只有根据概念,其它知识才能建立起来,这是科学大厦的根基。

    需求(蓝皮书),方案设计(架构),建设(开发),实施(部署)。

    这是我们给它建立的这些个概念,在统一建模语言(UML)中解决的问题是,我是什么,然后我有什么,以及我能什么。一种关系,依赖、泛化是一个关系,关联又是一种关系,这些表达都是程序设计人员能理解的概念,然后实施。

    关系是通过描述而确定的,描述是一个不断递进与修正的过程,你最初用语言来表达出来的东西,是一个可能不合适的描述,然后你再思考重新描述一下,如果还不合适,然后,然后再描,直到达到适合你的问题域,并能让更多人理解的合适的程度为止,这种描述方式,其实是一种逻辑的演绎与归纳,推理与反思,当从逻辑上把概念讲清楚了,我们才会上升到一个更加高级的描述方式,即模型。

    那么,什么叫模型?

    模型的产生,正是经历了上面的这些步骤,当然,它也是有一定的适用性的,因为它本身就来自于我们的演绎与归纳,因此模型可以在很多场合下解决很多问题,关键点在于,要根据我们的目的或者说是需求,这样一个前提下,来选择设计我们的模型。

    架构本身就是利用模型的过程,因此,它要考虑四大问题,抽象、封装、模块化、层次结构。

    其实,软件开发中所谓的设计模式的目的,就是为了解决这四大问题。就是说,有一个物体,我们应该通过一个模型来描述它,但实际上,这个模型是什么,我们并不知道,所以我们需要通过一些设计把这个模型给创造出来,这样大家就理解了,为什么要有这四大原理,就是能通过一些模型更好的去描述一个事物。

    相关文章

      网友评论

      • e2f82a327789:鼓掌👏
      • 玩哲录:那么,艺术和科学,或者说和工程有什么区别?

        第一个问题,我们要摆平我们这两个词汇,我们现在说的这个软件工程,或者说这个范式最大的区别是什么?

        第二个问题是,我们也要意识到,我们的工程也是具有creative创造性的?

      本文标题:02艺术和科学的融合

      本文链接:https://www.haomeiwen.com/subject/onvnixtx.html