美文网首页编程壁纸小家金融基础技术与业务
01从软件体系结构(架构)谈起

01从软件体系结构(架构)谈起

作者: 玩哲录 | 来源:发表于2017-12-12 11:40 被阅读3178次

    01

    关于软件架构(Software Architecture),这其实也是仁者见仁,智者见智,不过也早有了一个国际标准了,我所使用的概念全都来自国际标准。

    国外软件架构的书有很多,有卡耐基梅隆大学的,作者好像是美国国防部军事软件的供应商,这个大学好像外包了美国的很多军事项目。不过这本书讲的项目都是军事项目,我们软件技术人员大多是没有搞过搞军事项目的。我们更多的是企业应用软件的开发,所以,那本书中的军事领域里面的那些术语,很多是和我们软件开发过程中的术语是不一样的,因此,我们不会太多的涉及这本书的内容,当然了,虽然我们无法用他书中的概念来谈关于架构的问题,但它的那里面的很多方法也是可以参考的。

    What’s Software Architecture?

    软件架构,也可以称为是软件系统结构,或者说软件实际上是软件系统的一个简称。

    它最核心的一个方法论,是面对真正的需求,去寻找到一个架构,从而能够平衡(balance)的完成这个需求。

    02

    我们先来看看,软件是个什么东西?

    What’s Software?

    软件是什么?

    Software is a general term used to describe a collection of computer programs, procedures and documentation that perform some tasks on an operating System.

    这个软件它是用来干什么的呢?

    它是一个计算机的程序,然后呢,是这样的一个集合或者一个收集物。要让程序通过系统来执行一些任务,就是一个执行过程,从操作系统的眼光看,它是运行在操作系统上的很小的一个局部的过程。

    那什么又是软件系统呢?

    What’s Software System?

    The term software system is often used as a system of computer program or software.

    A software system is a system based on software forming part of a computer system(a combination of hardware and software).

    The term software system is related to the application of systems theory approaches in software engineering context. This approach is often used to study large and complex software,because it focuses on the major components of software and their interactions.

    The term software system is also related to the field of Software Architecture.

    我们再来对软件系统做一个更深刻的说明,软件系统这个术语,它常常也是一个计算机程序。或者软件的一个同义词。一个计算机系统包括了硬件、软件。当我们讲一个软件架构的时候,我们要跟硬件与软件,粘连在一起吗?软件架构是需要映射一个组织的架构吗?

    核心问题是,软件有一个架构。先有架构,然后软件,然后又有一个语境。我们直观的看到软件要部署在硬件上,这样构成了一个计算机系统,而这个计算机系统,是需要运行在一个企业里面的,它首先要映射一个企业。这是我们的两个核心。

    一个软件系统在一个企业里面,要包括四个部分,软件,硬件,组织,信息。

    那么,软件系统有哪些分类?

    Major Categories of Software Systems:

    Application software/Programming software (DevelopmentTools)/System Software

    应用软件/编程软件(开发工具)/系统软件

    03

    首先,介绍一下软件体系结构的核心概念和关键图像。

    Architect (架构师) 名词/Architecting(构架) 动词/Architecture(架构,体系结构) 名词

    Architect performs Architecting./Architecting results in Architecture./Architect creates Architecture.

    他们的关系是,架构师构架体系结构。那,什么是架构师呢?

    What is An Architect?

    System stakeholder(涉众) responsible for a system’s architecture.

    架构师是,负责系统体系结构的系统利益干系人(涉众)。

    04

    软件架构首先放在了一个软件工程的语境里面,它最重要的目标就是提高它的模块的通用性,以及关注点的分割,通过这两个核心的手段,来降低软件的复杂性,这是软件工程中要解决的重中之重的问题。

    Approach,是一个途径。达到一个目标你有很多途径,在一些条件的限定下,你获得一种对各种资源的平衡(比如项目管理中,资源时间成本,三者互相统一又互相矛盾的关系),你再去选择一条适合你的一种途径。

    各种类型的软件系统都有一个架构。它是系统里面一个有效的组成部分,这就把我们的范围在逐渐缩小,逐渐限定。我们首先要选择一下我们的方向,我在书中探讨的是,应用软件的架构。

    软件一定会有一个架构,不管你有没有意识到,架构一定存在。那我们研究架构的时候需要考虑,是哪一种类型的架构,我们先下决心去做一种选择,然后再确定我们研究的是应用软件,那应用软件也会有很多呀,我们到底要做什么,我们最终要选择的是做一个application,在企业的环境中,去做一个企业级的应用。

    通过这样一系列的选择,用的这个方法,其实是非常复杂,因为你要进行取舍,最后才能确定方向。然后呢,还要找到一个架构,来达到一种很好的平衡,这样才算理解了前进的方向。

    05

    架构师通过他的思考与设计,构建了一个符合要求达到标准的软件架构。

    注意我们的主语和谓语,我们现在的目光要聚焦在谁在干这个事儿,不是如何干,也不是干成的结果是什么,也不是等着这个结论与结果,然后用一个东西把它描述一下。

    很多人,把架构理解成了一种结果性的东西,比如系统文档,他们认为通过这些文档,就理解了这种文档背后的系统交流的语言,这个方向其实有点问题,搞成了反推机制,也就是说我们开发好一个软件后,然后再解释这个软件是如何产生的,反过来再解释这个软件的架构,而不是把架构理解成一个动态正向的过程,是一个前期的设计过程,这其实已经搞反了。

    我们有时候,会看到软件工程中有很多的蓝图,这其实是设计上的东西。

    而这三者的关系是,架构师通过执行构架这个活动,然后设计实现了一个架构。

    06

    当然,在现实生活中,很多时候架构实际上是三个要素(政治,经济与技术),斗争与评价,甚至是迭代的动态平衡后的一个结果。

    首先是一个技术面临的实现因素,你在企业里面呆久了之后你就会知道,架构,首先是政治斗争的结果,然后是经济斗争的结果,再然后才是技术选择的结果。

    比如,在一个公司里,每个销售经理从怎么维护自己部门的利益的角度来看问题,其他部门的负责人也是如此,而很少有人能从大局观来看问题,当然老板必须从大局观来看。这是因为公司的政策都会影响他们,会影响他们的收入,地位,以及未来发展前途。

    所以,每一个架构也会影响他们,组织结构也是一种balance的结果。因为我参与了一些事务的决策过程,这里面的利益之争是非常复杂的。

    第一个要素首先是正视权力斗争的结果,然后下一个是经济利益斗争的结果,第三位才是技术选择的结果。

    如果我们有足够多的开发经验和人生阅历的话,你慢慢就会接受一个概念,架构没有最好的,只有适合自己的,只有适合自己特定的企业环境的。

    当然了,这个世界上充满智慧的人也很多,很多人都是高标准、严要求,甚至很多都算是完美主义者,包括我自己,但我发现这种思考问题的角度是大有问题的。

    我们在开发软件的过程中,尤其是在实现软件架构的过程中,有很多人在技术上喜欢用比较新的东西,有技术含量的东西,以体现出我是牛人的特点的东西。从而,力争把软件设想得比较先进,以证明我的伟大。

    但实际经验,我要告诉你,你那叫找死,你只要能够解决问题,达到平衡,能按时完成任务,让老板们赚到钱,然后你也赚到钱,你只需要比别人多想一小步就足够厉害了。

    因此,在架构面前,我们不做best,做到better,我认为就很perfect了,这是因为,在技术面前,总有更新的,也总有更先进的,你追求这个永远追求不完。当然了,我们还要有一个考虑,步子不能太大,要结合实际情况,财、物、人、力,各种资源整体协调前进,做先锋做先驱可以,做先烈就有点惨了,如果没有各方面足够的投入,那就没有必要了。

    你可以做一个先驱,而不要紧接着做了先烈,一不小心把自己作死了,这就是有点冒进了,因此,我们要把握好这个度。

    所以,有这样一句话,叫尺度把握人生,高度决定视野,角度改变观念。

    相关文章

      网友评论

      • 淘气小师弟:我的理解是,这是由你在工作经验中打磨出来的思维模型,我认为他是达尔文自然选择模型的中级版,我只是在初级构架你的文章对我帮助很大,不过我推荐查理芒格思维模型和李善友教授的第一性原理,有兴趣我可以把第一性原理视频发给你,谢谢:pray:你的帮助太大了
        玩哲录:@淘气小师弟 好,谢谢关注。你说的第一性原理,我会发时间去看看的。
      • 玩哲录:架构实际上是三个要素,斗争与评价,甚至是迭代的动态平衡后的一个结果。

        第一个要素首先是正视权力斗争的结果,然后下一个经济利益斗争的结果,第三位才是技术选择的结果。
        刘昱廷:@北斗之光 这就开始上升到哲学层面了

      本文标题:01从软件体系结构(架构)谈起

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