【郭东白架构课 模块二:创造价值】24|节点四:如何减少语义上的分歧?
你好,我是郭东白。上节课我们通过一个篇幅比较长的电商案例,详细展示了为什么在架构活动中会出现语义分歧。同时也描述了,架构师在统一语义这个环节中所要创造的真正价值是什么。即,看到不同角色之间语境的差异,然后通过一个完整的、自洽的、相互兼容的设计,来满足所有角色的诉求。
那么这节课,我们来继续分析语义分歧的根源,然后看看怎么消除语义分歧。
语义环境的差异
语境是指语义的环境(Semantic Context)。我们上节课提到了,同一个词在不同的语境下,语义很可能完全不同。但是大多数角色都不一定知道其他角色的存在,更不用说理解他们的语境了。
如下图所示,展示了语境的差异:
这张图里有多个角色,每个角色都有自己的语境。在两个角色的交互过程中,通过统一语境又出现了新的语境。
比如“平台—用户语境”或者“平台—商家语境”,在图中用不同颜色的圆圈来表示。如果这个统一的语境能够扩大,便可以包含所有角色,最终形成全局统一的语境。
语义分歧的根源
事实上,我们上节课举的由于语境差异而带来语义分歧的例子,并不是特例。想想看,我们在架构设计中、需求实现中肯定都能见到不少类似的例子。为什么会是这样呢?这其实是哲学领域里争论了数百年的问题。
如下图所示:
假设物理世界有一个存在(Being,名词),也就是图中的绿色部分。那么主体,简单来说就是你和我。我们可以在各自的意识中对这个“存在”形成认知,也就是图中的客体。
唯物主义者认为,存在是先于主体和客体的。而且是客观的,独立于我们的意识而存在的,不以你我的意志为转移的。
而主观唯心主义者认为,只有你我意识中形成的客体是真实存在的,而那个“存在”却不是第一性的。
我们先不讨论谁对谁错。但是在“世界上所有人都有认知分歧”这一点上,大家反倒是没有分歧的。也就是说,我们各自主观意识中形成的客体,我们能表达给其他人的关于客体的描述,以及我们试图在多个人中间建立的对这个存在的共识,这三者是不等价的。而这种不等价,就是语义分歧的根源。
目前来讲,我们至少不能把多个人的意识拉通到一个共享的认知领域里。除了那些因为大量日常交互而已经形成固定语境的情况外,大多数时候,不同角色之间的语境都是不同的。因此,同一个词对于不同的人来说,在语义上肯定是有分歧的。所以我们能做的,就是想办法把这个客观存在的语义上的分歧表达出来。然后试图用文字、图片、建模工具等方式来准确描述语义,减少甚至消除语义上的分歧。
这种由于语境多样性而造成的语义差异,在互联网企业中更为普遍和严重。原因如下:
互联网企业一般是跨国企业,员工的文化、语言和认知本身就有差异。
互联网企业的组织复杂度大,不同角色有不同的视角,他们的认知也有差异。
互联网企业的场景跨度很大,在不同的使用场景下,语义也会发生变化。比如说一件商品,在大促、秒杀、团购、社区团购、物流履约和售后的场景下,含义会有所不同。
互联网时代用户体验迭代很快,不同的展现方式,比如文字、图片、短视频、直播、VR,会把一个实体以不同的方式投射给一个主体,那么主体形成的语义认知必然会有所不同。
信息时代引起了我们生活方式的剧烈变化,一个实体的语义会随着时间而扩充、迁移或者消亡。你翻开随便一本新华字典,看看古代人把“马”这个实体类型分得多么细。而到了现代,你要是能分清楚骡子和马,就算是博学了。
如何消除语义的分歧?
那么如何消除语义的分歧呢?
第一步,发现不同的语境。每一个交互场景其实都存在着多个角色,每个角色都有自己的独立语境。比如商家从供应商那里采购实体商品这个场景,就有它的独立语境。而商家给供应商打款,虽然交互双方没有变化,但是新的场景又会带来新的的语境。
就像我们在上节课给出的实体电商模型图里表示的,这些语境之间有一定的连续性。但如果我们深挖到细节,会发现其中的差异并不小。当然,我们的目的不是为了寻找绝对意义上的语义保真,而是为了给架构活动建立统一的语义环境。
所以这个发现,绝不是一个无止境的探索。我们必须保留语义差异来提供差异化的流程和服务,但是并不需要引入太多的分支,避免给用户带来不必要的复杂性。
第二步,定义概念。一旦发现了一个新的语境中,存在词语表达相同但语义不同的概念,那就需要准确描述这些概念了。就像我们上节课给出的例子。你不但要给出一个概念,更要准确描述这个概念背后的场景。
- 在这个过程中,你需要跟不同参与方进行访谈,然后通过准确定义概念来发现不同语境之间的差异点。最后再试图把多个概念放在一起,看它们是否能完全自洽。
- 在这个过程中,你需要不断修正自己下的定义。如此循环往复,来螺旋式提升你跟参与者的认知。
- 在这个过程中,你的角色不是 PMO,所以绝不是发一封邮件,通知大家各自完成一页 Wiki Page 就完事了。而是要深入到每个语境中,理解每个角色的真实诉求和语义差别。
总的来说,这仍然是一个深度思考和不断探索的过程。
第三步,语义建模。当完成了单个概念的定义后,就需要把不同概念引入到同一个语境中,也就是将两个不同的语境进行合并。这个过程,其实就是把上节课给出的两张图合并成一张图。图中的绿色部分,也就是被融合的实体的语义,需要与融合前语境中的语义基本保持一致。而蓝色部分,指的是每个实体有各自的语义,需要保留。
第四步,反馈修正。一旦形成了统一的语境,就需要跟所有参与者确认这个统一语境的正确性。要时刻记住,你作为架构师并没有什么特殊之处,也只是一个独立的个体。你的认知也仅仅是存在于自己语境中的认知,所以必须要与所有人重新确认并多次调整,才有可能找到基本正确的统一语境。
第五步,公布、维护和使用统一的语境。指的是不断使用和打磨实体定义,最终为企业带来统一语境。这个过程就是从自然语言到需求描述、到域模型定义的过程,未来也会延申到接口定义、模块设计、代码实现、上线使用等。
最终,这些过程都对之前的定义形成反馈闭环。如果你把语义的定义和维护做到极致,那么它就是一个基于标准化、中央化的实体定义和数据字典,以及围绕这些定义而制定的语义冲突解决(Conflict Resolution)的管控流程。也就是说,最终会建设一个完整的语义管理体系。
需要注意的是语境的差异。我们讲建模,其实已经默认所有的客体都放在了同一个语境中。我们也不再区分不同主体视角中的客体,而将它们统称为实体。但是实际上,建模过程中最难的一步,就是从不同语境中的主体那里,推导出一组统一语境中的实体。
关于建模我还想提一点。我在法则四中强调过必须向技术环境借力。要知道,大多数领域都有相对成熟的工业标准,并不需要发明创造太多的概念。如果真的下定决心去整合一个语境,那么在这之前,你至少要做一次彻底的线上调研,看看是否已经有工业和事实标准存在。
我就曾经见过一位研发人员自己定义了一套国家码。他一口气整出来 240 多个国家,胆子可真大!
小结
所谓统一语义,并不是要求你重新学习一门标准化的语言,然后再跟其他参与者交流。统一是语义层面的统一。
你作为架构师,所做的工作并不是收集汇总,而是发现不同的语境,找到其中存在的语义上的差异。然后把这些差异描述出来,再给出一个精确的语义定义。最后再和其他参与者一起使用这些更为准确的概念,来完成项目的规划和实施。这才是你在这个节点上真正要创造的价值。
在统一语义的的过程中,你要努力发现整个架构活动中所有不同角色。然后以客观事实、无损的表达和最小化沟通为目的来和他们沟通,从而统一语义。当你能邀请大家到同一个语义环境下做深度讨论的时候,我相信那将会是一个非常美妙的聚会,因为那才是灵魂之间的深度交流!
另外,这两节课我们花费了比较多的篇幅去分析和寻找语义分歧问题的根源。这也是架构师的一个基本技能。其实大多数时候,找到了问题的根因也就找到了解法。
从更深层次上来讲,寻找根因这个方法论也适用于我们整个架构规划。我们之所以要在统一语义这个环节下大功夫,目的就是在定义“我们要解决的问题”上帮助所有参与者达成共识,一起找到那个真正值得耗费大家生命力的 “问题根因”!
思考题
三个作业,任选一个来作答。
- 你见到过最清晰的领域建模是哪一个?这个模型最终带来了什么样的价值?
- 领域建模是为了定义我们要解决的问题。很多人号称自己在做领域建模,但往往是代码都写完了去晋升的时候才做。不过,哪怕这么做往往也有价值。你做过这种事后的建模吗?建模帮助你发现了什么问题?
- 建模的习惯一旦养成了,应用起来还是比较高效的。但是紧接着就会出现模型管理的问题。你碰到过什么好的模型管理的方法吗?不好的呢?
相关文章:
【郭东白架构课 模块二:创造价值】24|节点四:如何减少语义上的分歧?
你好,我是郭东白。上节课我们通过一个篇幅比较长的电商案例,详细展示了为什么在架构活动中会出现语义分歧。同时也描述了,架构师在统一语义这个环节中所要创造的真正价值是什么。即,看到不同角色之间语境的差异,然后通…...
windows下免费本地部署类ChatGpt的国产ChatGLM-6B
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 Chat…...
flask+opencv+实时滤镜(原图、黑白、怀旧、素描)
简介:滤镜,主要是用来实现图像的各种特殊效果。图像滤镜用于改变图像的视觉效果,使其具有特定的风格。下面是这三种滤镜的详细说明: 1、黑白(Grayscale):黑白滤镜将彩色图像转换为灰度图像&…...
【SCI征稿】极速送审,中科院2区(TOP)计算机算法类SCI,数据库稳定检索19年
算法类: 检索年份:数据库稳定检索19年 自引率:14.50% 国人占比:22.78% 期刊简介:IF:8.0-9.0,JCR1区,中科院2区(TOP) 检索情况:SCI&EI 双…...
1992-2022年31省GDP、第一产业增加值、第二产业增加值 第三产业增加值
1992-2022年31省GDP、第一产业增加值、第二产业增加值 第三产业增加值 1、时间:1992-2022年 2、范围:包括31省 3、指标:省GDP、省第一产业增加值、省第二产业增加值、省第三产业增加值 4、缺失情况说明:无缺失 5、来源&#…...
100种思维模型之万物系统思维模型-57
前面我们介绍过 “万物联系思维模型” ,即万物之间存有各种各样的联系,在解决问题时要看到事物之间的连接,并找到关键的连接,继而快速的解决问题。 01 何谓万物系统思维模型 一、万物系统思维 人的思维习惯, 一…...
Java 中的包装类是什么?如何使用包装类来操作基本数据类型(二十二)
Java 中的包装类是一种特殊的类,用来将基本数据类型(如 int、double、char 等)包装成对象。包装类的作用是可以让基本数据类型具有对象的特性,比如可以作为参数传递给泛型类或方法,可以调用对象的方法,可以…...
【Python入门】Pycharm的使用指南
前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函…...
python搭建HaIcon物联平台!
Python是一种高级编程语言,易于学习和理解。它在各个领域都有着广泛的应用,例如数据科学、机器学习、爬虫等。 在Python的强大功能之外,Python还有着丰富的第三方库和框架,其中之一就是HaIcon。HaIcon是一种基于Python的物联网平台,它提供了完整的解决方案,包括设备管理…...
GUI编程(二)
Swing Swing是GUI(图形用户界面)开发工具包。 早期的AWT(抽象窗口工具包)组件开发的图形用户界面,要依赖本地系统,当把AWT组件开发的应用程序移植到其他平台的系统上运行时,不能保证其外观风格…...
俩小伙一晚上写了个 AI 应用,月入两万??(文末附开发教程)
开发出一款能够与 AI 对话生成和编辑思维导图的工具,听起来似乎只能是一群专业的 AI 背景团队花费大量的时间和精力训练模型,打磨应用才能完成的事情。 但是,两名大学生却在一夜之间完成了,就像炼金术士将庸俗的材料转化成黄金一…...
Python爬虫常用框架
大家都知道python是一门多岗位编程语言,学习python之后可以从事的岗位有很多,python爬虫便在其中,不过很多人对python不是很了解,所以也不知道python爬虫是什么,接下来小编为大家介绍一下。 Python是一门非常适合开发…...
2023亚马逊云科技研究,数字化技能为中国企业和员工带来经济效益
在中国,信息技术在个人、企业和宏观经济层面都推动着重大变革。为了研究这些变化所带来的影响,盖洛普咨询公司(Gallup)和亚马逊云科技开展了关于数字化技能的调研。 研究表明,数字化技能正在为中国企业和在职人员带来巨大的经济价值&#x…...
springboot使用mybatis
扫描mapper接口的位置,生成代理对象 在application.properties配置数据源 测试: 在application.properties配置mybaits,支持驼峰命名,下划线 结果映射: Insert语句例子 在application.properties配置日志 更新 总结: 结果复用 ResultMap第二种…...
为什么是三次握手和四次挥手
文章目录 为什么是三次握手为什么是四次挥手什么是TIME_WAIT状态解决TIME_WAIT状态引起的bind失败的方法 为什么是三次握手 因为这是双方都有收发的最小次数 握手的目的:确认网络好着没,对方好着没 确认双方主机是否健康(双方)…...
Codeforces Round 867 (Div 3) 总结
文章目录 ABCDE 文章首发于我的个人博客:欢迎大佬们来逛逛 Dashboard - Codeforces Round 867 (Div. 3) - Codeforces A 题目大意:有n个电视节目,每个电视节目占据一定的时间,并且具有一个娱乐值,一秒可以额换一次台…...
vue修饰符的使用
事件修饰符: 在处理事件时调用 event.preventDefault() 或 event.stopPropagation() 是很常见的。尽管我们可以直接在方法内调用,但如果方法能更专注于数据逻辑而不用去处理 DOM 事件的细节会更好。 为解决这一问题,Vue 为 v-on 提供了事件…...
2023年五一数学建模 B 题过程与结果
文章目录 第一问第二问数据时序分析Auto-ARIMA第二问求解解的情况A->Q:D-> AQ-V总快递数 第三问第四问遗传算法求解 第五问SARIMA 模型拟合季节性规律 第一问 见 2023 年 五一杯 B 题过程 代码(第一问) 第二问 第二问考虑是一个时序预测问题&a…...
搞懂 API ,API 中 URI 设计规范分享
API(Application Programming Interface)是现代软件开发中的一项关键技术,它为不同应用程序间提供了数据和功能交互的标准化方式。而 URI(Uniform Resource Identifier)作为 API 中的重要部分,其规范和良好…...
【DarkLabel】使用教程(标注MOT数据集)
DarkLabel 使用教程 功能部分 Open video 第 2 处的内容为数据集类型。例如:VOC、COCO、MOT、YOLO等。 第 3 处的内容为标签名称。 可在 darklabel.yml 中修改 classes_set。例如:classes_set: "mot_classes" 第 4 处的内容为两种跟踪方法…...
Python3 迭代器与生成器
Python3 中的迭代器和生成器是 Python 编程中非常重要的概念,它们可以帮助我们更高效地处理数据和管理内存。下面分别介绍一下迭代器和生成器的概念和用法。 ## 迭代器 迭代器是一个可以遍历一个容器(如列表或元组)中的所有元素的对象&…...
C++基础 类的自动转换和强制类型转换
参考 C Primer Plus (第6版) 类自动转换 接受一个参数的构造函数允许使用赋值语法将对象初始化一个值 Classname object value; 等价于 ClassName object(value); 等价于 ClassName object ClassName(value); 只有接受一个参数的构造函数才能作为转换构造函数(某类型->…...
MySQL索引的底层实现原理
索引的底层实现原理 数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘块(对应索引树的节点),索引树越低,越“矮胖”,磁盘IO次数…...
Linux 更新
Linux权限系统 01 只读 1 10 只写 2 100 只执行 4 11 可读写 3 101 可读执行 5 110 可写执行 6 111 可读写执行 7...
华为OD机试 - 端口合并(Python)
题目描述 有M个端口组(1<=M<=10), 每个端口组是长度为N的整数数组(1<=N<=100), 如果端口组间存在2个及以上不同端口相同,则认为这2个端口组互相关联,可以合并。 输入描述 第一行输入端口组个数M,再输入M行,每行逗号分割,代表端口组。 备注:端口组内数字…...
分部积分法习题
前置知识:分部积分法 例题 计算积分 I n ∫ [ ( x a ) 2 b 2 ] − k d x ( n ≥ 1 ) I_n\int [(xa)^2b^2]^{-k}dx \quad(n\geq 1) In∫[(xa)2b2]−kdx(n≥1) 解: \qquad 用分部积分法,对任何自然数 k ≥ 1 k\geq 1 k≥1,…...
C++—非递归【循环】遍历二叉树(前序,中序,后序)思路讲解+代码实现
非递归遍历二叉树 前序中序后序 接下来我们在研究如何使用循环实现遍历二叉树时,以下面的二叉树为例: 在下文的讲解中,不对如何构建这颗二叉树做讲解,直接给出代码,如果有不懂的地方欢迎私信我。 文章中的完整源代码链…...
前端002_初始化项目
1、命名和启动项目 将目录名 vue-admin-template-master 重命名为 db-manager-system 将 db-manager-system/package.json 中的 name 值改为 db-manager-system {"name": "db-manager-system","version": "1.0.1","descriptio…...
组合设计模式
组合模式 组合模式定义使用场景1、文件系统的目录结构:2、组织架构图:3、菜单和菜单项:4、使用场景总结: 角色定义Component 抽象构件角色:Leaf 叶子构件:Composite 树枝构件: 需求背景代码实现Component(抽象构件角色…...
【MySQL】多表查询
上一篇介绍了外键约束,外键约束是用于连接两张数据表的,所以在此基础上就有了多表查询 之前的查询都是单表查询,这里我们会将多个数据表的数据结果返回在一张表上 文章目录 1.多表关系2.多表查询2.1 多表查询分类2.2 内连接2.3 外连接2.4 自连接2.5 联合查询2.6子查询 1.多表关…...
简单网站搭建/搜索引擎优化心得体会
Python的三大神器:装饰器.迭代器与生成器!这就是Python的三大神器,好了废话不多说。直接来上干货吧! 生成器 仅仅拥有生成某种东西的能力,如果不用__next__方法是获取不到值得。 创建一个生成器函数 >>> def …...
广西网站建设运营费用/万网官网首页
前言 从小就写字很挫,所以受够了被人鄙视的感觉,今天有个coder突然跟我说,你的代码怎么像小孩写的一样,顿时心情沮丧的极点。越来越发现一致的编程风格的重要性,于是把Google的C编程风格指南看了一遍, 这里…...
wordpress登录密码错误也不报错/百度推广竞价是什么意思
2019年高考结束最后一门英语考试的时候,王恒杰这个懂得感恩的大男孩被我们记住了。在高考英语结束后,所有人都放下了心中的担心,轻轻松松的走出了考场。此刻王恒杰也是万千学子中的一名,但是,他之后的举动却让他在众多…...
深圳网站排名怎么做/深圳网络整合营销公司
Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],问题背景:客户反馈DB每天产生的incident日志很多,需要排查原因查看alert日志发现大量的ORA-07445、ORA-00600错误Errors in file /data/oracle/diag/rdbms/bydata/bydata…...
互动广告平台/seo项目培训
在修改mysql密码时,修改不生效 后来才发现 在mysql5.7以下版本就修改authentication_string update mysql.user set authentication_stringpassword(123456) where userroot and hostlocalhost;在mysql5.7以上版本就修改password update mysql.user set passwordpas…...
做网站 域名是怎么回事/app开发成本预算表
http://blog.chinaunix.net/uid-15007890-id-3064254.html uptime11:35:08 up 21:57, 6 users, load average: 4.66, 2.98, 1.79“load”用来表示运行队列,用top 命令我们可以看到CPU一分钟,5分钟和15分钟内的运行队列的大小。这个值越大表明系统负荷越…...