《系统架构:复杂系统的产品设计与开发》——第2章,第2.2节系统与涌现

2023-10-17 14:59

本文主要是介绍《系统架构:复杂系统的产品设计与开发》——第2章,第2.2节系统与涌现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本节书摘来自华章出版社《系统架构:复杂系统的产品设计与开发》一书中的第2章,第2.2节系统与涌现,作者[美]布鲁斯·卡梅隆,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.2系统与涌现
2.2.1系统
由于系统思维是一种把疑问、状况或难题明确视为系统的思维方式,因此,要讲解系统思维,首先就必须讨论系统。英语中很少有哪个词的使用范围像系统这样广泛,而且其定义也有很多种,本书采用文字框2.1中的定义。
系统是由一组实体和这些实体之间的关系所构成的集合,其功能要大于这些实体各自的功能之和。


7e39fb740edfdd7c8744915c22d39dff228c3939

这个定义体现了两个重点:
1.系统是由相互作用或相互联系的实体组成的。
2.实体之间发生相互作用时,会出现一种功能,这种功能大于或不同于这些实体各自所具备的那些功能。
无论如何定义系统这个词,其核心都是上面所列出的第一点,也就是必须要有实体及实体之间的关系。实体(也称为部件、模块、例程、配件等)就是用来构成全体的各个小块。关系可以是静态的(例如连接关系),也可以是动态并交互的(例如货物交换关系)。
根据定义中的这一部分,我们可以确定有哪些事物不能称为系统。如果某物是一个连贯的整体,那它就不是系统。比如,一块砖(在宏观层面上)不能构成一个系统,因为它里面并不包含实体。然而,一面砖墙却可以构成一个系统,因为它包含实体(许多的砖块与砂浆)及关系(负载交换与几何关系)。毫无关系的一组实体也不能构成系统(例如位于乌克兰的一个人和位于亚洲的一袋米)。
要想给出一个能够把非系统的事物排除在外的定义,是相当困难的。有人可以说,一块砖头在适当的层面上就是一个系统。因为它是黏土做成的,而黏土本身是多种材料的混合物,这些材料之间具备相互关系,例如可以共同分担负荷,可以构成平行六面体等几何形状。住在乌克兰的人可能会用欧元购买亚洲的米,于是这两个实体就可以构成一个交易系统。
宽泛地说,任何一组实体其实都可以解读为一个系统,这也就是系统一词使用面较广的原因。有一个与系统密切相关的概念,叫做complex。作为形容词来讲,它的本义和首要义项是“复合的”,用来形容实体与关系较多的事物。而在某些语言中,complex还可以作为名词,用来表示“系统”这一含义。这种用法在科技英语中也有所体现,例如“肯尼迪航天中心39A发射复合体”(Launch Complex 39A)中的“复合体”,指的就是“系统”。
系统和产品,是两个容易混淆的概念。产品是能够交换或具备交换潜力的事物。有一些事物是产品但不是系统(例如米),还有一些事物是系统但不是产品(例如太阳系),但由于很多事物既是产品(可供交换)又是系统(含有很多相互联系的实体),因此这两个词经常混用。
与系统有密切关系的另一个概念是架构,也就是本书的主题。用最简单的话来说,我们可以把架构定义为“对系统中的实体及实体之间的关系所进行的抽象描述”[1]。由于架构是对系统所做的描述,因此对于一个存在且能够运作的系统来说,这两个概念显然是紧密相关的。
2.2.2涌现
在系统这个词的定义中,第二项特征是系统思维所要强调的重点。系统是一组实体及其关系的集合,其功能大于这些实体各自的功能之和。
系统思维所要强调的这一部分,就是涌现(emergence)的意义所在,也是系统的力量与魅力所在。涌现是指系统在运作时所表现、呈现或浮现出的东西。我们之所以要构建系统,就是为了取得令人满意的涌现物。对涌现的理解,是系统思维的目标,同时也可以体现出系统思维的艺术。
当系统的各个部件聚集起来时,会涌现出什么东西呢?最明显和最关键的涌现物,就是功能。功能(function)是系统所做的事情,也就是它的动作、产出或输出。我们设计某个系统,是想使该系统涌现出可以预期且令人满意的主要功能(例如汽车可以载人)。这项主要功能,通常与系统所产生的好处有关(我们之所以买车,是因为它有个好处,这个好处就是可以载人)。系统也可能会涌现出我们可以预料到但不合人意的产出(例如汽车燃烧碳氢化合物)。有时,当系统成形时,还会涌现出意料之外的功能。比如,汽车可以给人一种自由感,这项意料之外的产出,是令人满意的。而有些意料之外的功能却是我们所不愿意见到的,例如汽车可以致人死亡。从表2.1中可以看出:系统所涌现出来的功能,有些是可以预料到的,有些则是在事前无法预料到的;有些功能令人满意,另一些则不合人意。此外我们还可以明确地看出:除了主要功能之外,系统还可能涌现出其他一些令人满意的功能,例如人在汽车里可以感到温暖或凉爽,汽车能够令人感到愉悦等。
表2.1 对涌现出的功能进行分类


c93aec4399f6b291e8fa38be5b22c07601fa0cd9

预期的涌现意外的涌现,令人满意的汽车可以载人,汽车内可以使人感到温暖/凉爽,汽车令人感到愉悦,汽车可以创造一种个人自由的感觉
不合人意的,汽车燃烧碳氢化合物,汽车可以致人死亡。
系统的基本性质在于它会涌现出新的功能。比如图2.1中的这两个元素:沙和漏斗形玻璃管。沙是一种天然材料,并没有预期的功能。漏斗可以汇聚其他物品或使之沿渠道流出。当这两件元素组合起来时,一项新功能就诞生了,这就是计时功能。我们怎么会知道沙和漏斗拼接起来能变成一种计时器呢?沙和漏斗这两个机械元素怎么会产生一种可以记录抽象概念(也就是“时间”)的信息系统呢?
除了功能之外,系统还会涌现出性能(performance)。性能就是系统运作或执行其功能的好坏程度。它是系统功能的一项属性。某辆汽车的运输速度有多快?某个沙漏能否准确地计时?这些都是性能问题。图2.2中的足球队是个人类系统。所有足球队的功能都一样,就是队员协作比赛,取得比对手更多的进球。然而,有些足球队的成绩要比其他足球队更好,因为他们可以赢得更多的比赛。图2.2是参加2014年世界杯的德国足球队,他们赢得了冠军,可以说是这届比赛中成绩最好的球队。
图2.1 由沙和漏斗构成的系统所涌现出的功能:计时


20d5c4c3b5cbc6c0218ddf1cfa6eedaea9ff3842

图片来源:LOOK Die Bildagentur der Fotografen GmbH/Alamy
系统架构的第一条原则所谈的就是涌现(参见文字框2.2)。原则是一种长期有效的道理,它们总是能够(或者几乎总是能够)适用于各种问题。本书在介绍系统架构的原则时,一般都会先给出一些名人名言,用来展示伟大的思考者如何将这些原则精彩地表述出来。每条原则都会包含叙述和指引这两部分(指引部分可以用来指导我们的行动),有的原则还会给出深入的讨论。
文字框2.2 涌现原则(Principle of Emergence)


6eacc474d66048709a967de5e733fff24a988b99

“系统并不是其组成物的简单加总,而是这些组成物之间互动的产物。”
—Russell Ackoff
“整体大于其各部分之和。”
—亚里士多德(Aristotle),《形而上学》
当各实体拼合成一个系统时,实体之间的交互会把功能、行为、性能和其他内在属性涌现出来。我们要思考并试着探寻系统所涌现出的预期属性和意外属性。
实体之间的交互会导致涌现物。涌现物指的是系统在运作时所表现、呈现或浮现出来的东西。系统的附加价值是由涌现物所赋予的。
涌现的结果,使得变化以无法预知的方式进行传播。
一个实体所发生的变化将会如何影响涌现出来的属性,是很难预测的。
能够涌现出预期属性的系统,是成功的系统。不能涌现出预期属性或意外涌现出不良属性的系统,是失败的系统。
除了性能之外,系统还会涌现出其他属性,例如可靠性(reliability)、可维护性(maintainability)、可操作性(operability)、安全性(safety)和健壮性(robustness,鲁棒性)。这些以“某某性”为格式的属性,其对应的英文单词大多以“ility”结尾。与功能和性能方面的涌现物不同,这些属性并不是立刻就能创造出价值的,而是要通过系统在整个生命期中的运作情况来体现。某辆汽车是否能安全地载人?某个沙漏是否能可靠地计时?德国足球队是否能稳定地赢得比赛?某个软件是否能健壮地或可靠地运行?某辆车在路边抛锚,究竟是机械性的故障,还是嵌入式软件性的故障?
在表2.1的四类涌现物中,最后一类涌现物特别重要,值得单独讨论,这就是意外且不良的涌现物。我们把这种涌现物称为紧急状况(emergency,这个词的词根和涌现物的英文单词emergence相同)。汽车可能因失控而导致旋转或翻滚。足球队可能会在重要的比赛日产生冲突或表现不佳。图2.3是袭击新奥尔良的卡特里娜飓风(Hurricane Katrina),这是一种引发紧急状况的自然现象。这个系统的破坏力非常大。


b41735bbff912cc264e000191292540a5ca9315a

这些和功能及性能相关的涌现属性(也就是刚才提到的“某某性”),以及系统不引发紧急状况这一特点,与系统所创造的价值有着密切的联系。价值就是有着一定成本的利益。构建系统是为了获得利益(这个利益,在观察者的眼中,是以财富、名望或功用等主观标准来评判的)。
总之:
系统是由多个实体及实体间的关系所构成的集合,其功能大于这些实体各自的功能之和。
每件事物几乎都能视为系统,因为其中差不多都含有一些相互关联的实体。
当系统的功能大于其中每个实体各自的功能之和时,就会有涌现物出现。
对涌现物的理解,是系统思维的目标,同时也体现出系统思维的艺术。
系统运作时会涌现出一些功能、性能,以及一些以“某某性”为名的属性。与系统不引发紧急状况这一特点一样,这些功能、性能和属性,也都与系统的利益和价值密切相关。

这篇关于《系统架构:复杂系统的产品设计与开发》——第2章,第2.2节系统与涌现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226169

相关文章

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1