一、背景
学了DDD也大半年了,看事物也总喜欢从更多的维度去看,因此对于需求而言,总可以归为从问题空间到解空间的映射。不过有时候这种从领域的角度或者领域驱动设计的方式去跟人沟通的时候发现是挺痛苦的,毕竟需要去理解不同的人在不同的上下游说的不同的词是什么意思,是不是指的同一个事物,同一个系统,同一个场景。所以,当从领域驱动设计的统一语言模式去应用的时候,其实还是非常难的。因此,本系列将探究一个关于DDD统一语言模式的问题,以及可能的解决方法。
二、客观原因
2.1 角色职责定位
现在我们从现实出发来看一个现象,大家都知道现在是互联网时代,很多网民上网时间都很长,有购物的,有追剧的,有撩妹的。那么对于网民来说他们如何看待这些互联网应用,他们怎么称呼这些应用。APP?网站?程序?应用?那对于开发这些应用的公司和运营维护这些应用的人对这些应用是怎么称呼的呢。系统?程序?端侧?无线?小程序?模块?微服务?
现在我们继续具体一点,假设我们身处一个开发团队,需要开发一款应用,从产品的角度来说她经常要说的词是什么,需求?从测试的角度来说她需要保证项目工程的质量,那么她经常说的词是什么,测试。当然从开发的角度来说可能也有一些比如接口,程序,服务,调试等。那么对于项目管理人员来说对于这个应用和相关程序而言其统称就是某某项目,某某迭代。
那现在我们来分析一下,明明是同一个东西,为什么叫法不一样,为什么你说的词跟我说的词不一样我却能听懂你说的话。但是有时候却不行。因为我们看问题的角度,我们所属系统上下文的角色职责定位不一样所以不同的人会对同一个事物表达不同的词。这里我总结了一些词语来从角色职责定位方面阐述这种原因:
上下文,语境,职责,角色,指向
下面分别简单介绍一下这些词相关的理解:
上下文:这个词其实我们在上语文课的时候语文老师就经常提到,因为上下文代表了一系列具有关联的人事物等信息。或者说从某一角度表达具有关联的人事物的内容。当然另外一个词就是伏笔,其实伏笔要表达的就是某某人事物相关的上下文信息。
语境:其实人与人沟通,人与自然相处都有一个语境,或者环境,类似于一种容器,都在容器里,不同的语境表达的含义其实不一样,跟上下文类似。或者说上下文就是语境的具象化表达。比如语文中的双重否定,一语双关,歇后语。同一件事用不同的标点符号表达同一句话就能突出不同语境或者语气下的不同意思,比如反问,疑问,肯定等等。
职责:这里的职责类似于我们所处的定位,或者我们有什么权利义务。那这样的话我们就根据本身的能动性来表达关于这个职责相关的事情。
角色:角色与职责是分不开的,所以我们一旦确定了自己的角色,难免会把自己代入角色执行职责相关的权利义务,然后表达基于自身角色所处的位置去看相关人事物的内容。
指向:这里的指向相当于上面的词的总结,任何人事物等的描述定义都有一定的指向性。就是说上下文,语境和职责角色所指的东西或者所要表达的东西都具有指向性。这也就是说为什么人与人沟通是逐步对焦逐步同频的。就是因为在交流的过程中的这个指向是逐步清晰逐步一致的。
2.2 主观理解与输出
这里其实就涉及到了一些学习相关的东西了,比如说一千个读者中就有一千个哈姆雷特。所以每个人的成长经历和环境都大致不相同的,对于事物的理解叫法都随着年龄经验的增长而变化。在很长的时间里,不同的人生阶段看事情也就不一样,所以有说法叫少不读水浒,老不读三国,另外一个例子就是书读百遍,其义自现。当与人谈论某些书,某个人都会表达自己的理解,那么形成的词句就需要另外的人加工改造才能更容易懂。当然涉及到专业性理论性比较强的人事物的话那么对于其的主观理解和输出会更统一一点。毕竟概念,术语等等就是逐步从主观理解与输出中变成客观存在的定义概念的。
所以从这里就不难看出为什么我们看不同的事物不同的现象会构建定义新的词了,一个比较浅而易见的例子就是网络用语,网红用语。这些网络上盛传或者疯传的词语为什么那么流行呢,因为我不需要加工不需要进行主管理解不需要自己再定义输出就可以直接接纳使用,当然这中间肯定有个大致了解的过程,比如这个网络用语的背景是什么,有什么故事,是不是有趣,是不是我可以直接跟风或者在日常中去套用等等。
2.3 本质复杂性
那现在我们来讨论这个问题的一个根本原因,为什么不能统一?肯定有其难处,即使我能站在你的角度换位思考,即使我懂你的主管理解和输出的东西,我仍然无法统一这些领域语言或者术语。究其原因是因为我们周身的人事物等等太多了,再加上思维的抽象导致的上下文语境等等令人无法统一,或者无法快速统一并达成一致。中文和英文的基本字母汉字都比较稳定,为什么还有很多新词,仿佛无法穷尽。所以无法统一的本质复杂性是客观世界的复杂性,简单理解为就是词太多了,我记不住或者不好记,我就按我喜欢的或者我需要关注的词去了解人事物等的。我也简单概括了这个本质复杂性的一些原因。
- 不容易理解
没见过,信息太少,太专业,容易忘
- 概念解释多
太深奥,太抽象,太简单
- 多变繁杂
信息过时了,还不够标准没有达成统一,不够结构化,太散乱
2.4 思维惯性
这里的思维惯性其实跟主观理解和输出差不多,但是我要表达的意思是一种思维定势,为什么刚入职场的人或者小学生的可塑性很强,就是因为他们还没有完全形成自己的思维惯性,他们还在不断适应和吸收周围的环境等信息。像大多数经过社会毒打摧残的人在公司里或者社会上都是老油条,所以他们看事物做决定都有一定的思维惯性,比如有的人就比较鲁莽,听风就是雨,有的人就运筹帷幄,能看出多年以后的事态形势等等。那么对于统一语言这块来说其实思维惯性也会导致无法统一,毕竟需要经过主观理解和输出之后那么表达出来的词又不一样了。所以我也总结了跟思维惯性相关的两个小笔记,如下:
- 人类本身对于事物,现象的理解倾向于抽象表达
- 成长经验习惯导致自身通过思维惯性主动定义事物现象方便自己理解记忆
三、语言产物
现在来看一下统一语言的本质,说白了就是词语,缩略语,术语,俚语,土话,情话等等。或者说短句这样的。回归到词语的本身其就是人们沟通交流的语言产物。那现在我们看一下一个词能表达哪些东西,当然,有些词或者语句表达的东西就是那种只可意会不可言传的语境。
3.1 一个词表达现象
从人类逐步进化的历史上看,很多象形文字,或者类似于符号语言的东西都表达了一种现象,如日升日落,或者战争或者农耕等等。这是古人类希望通过某种他们自己能理解能识别的语言来记录并积累学习的资料。
3.2 一个词表达活动
大家都知道,人是社群动物,有群体和部落。那么为了生存下去必然会有活动,比如捕猎,做饭等等。这些活动都通过一些语言符号表达记录了下来。从活动本身而言,这些活动可能只包含一个动作,或者多个动作代表一个活动。回到现代来看,我们日常生活就是由一系列的活动串联起来的,比如炒菜,吃饭,下单,退款,入库,看病等等。
3.3 一个词表达物品
很多时候有活动其实还需要知道有哪些东西组成了活动的基本信息。这些基本信息是可能是活动的发起者,或者活动的承受者,或者与活动有关的一些物品。这些物品可以简单理解为名称,名词性的东西。就是表达某个东西是什么,叫什么。当然有时候有些物品是虚拟的,或者是看不见的,或者是已经消失的东西,又或者是未来即将出现的东西。这些东西就组成了类似于本草纲目,动物大全一样的类群集合。所有的东西或者物品组成了大千世界,槟榔满目。那么回到统一语言上来看,一个词表达物品对物品进行定义指名的过程就是统一语言,比如说抽象出来的饭,菜,吃饭,做菜。饭和菜其实就是统一语言,只是大家默认了或者习惯了对于物品的抽象统一的表达就忽略了这其实就是统一语言的一个经典应用。
3.4 一个词表达度量
现在我们看一下词语中的一个特殊类型,可以认为是物品名称的一种,为什么要单独拎出来讲呢。因为这些其实在软件开发过程中是会经常提及的一些度量性词语,以及是抽象词语的一个代表。这些词语普遍具有动名词修饰的一些特性,当然其他行业也都有,这些其实也算某一行业领域关于度量统计相关的统一语言。这些统一语言在特定场景下其实无法体现在业务代码中的,只是需要单独去做相关的系统才会准确识别到代码上面。这里我简单列了一些词语:
性能,效率,实效,产出,比率,比例,关系
在整个现实世界中我们对很多物品都做了一些标准化和规格化的设计来满足日常需求,这些标准内容和规格内容其实与度量也有关系,所以没有度量很多东西就无法识别其核心内容。在数理化方面更是如此,那么回归到统一语言上来看,我们说的这些可能不是偏业务的内容,而是关于某种领域的度量模型。
3.5 一个词表达的多维性
前面分析了一个词可以表达的内容,而且从理解上看是很容易get到点上的说明。那这里我们看一下一种只可意会不可言传的词语多维性的表达。为什么这么说呢,因为在现实世界中人的沟通理解目标都不一样,有的人能听懂你说的却跟你打哈哈。有的人听不懂缺在努力去理解修正两人对于谈话内容的指向,比如一堂课老师说的跟同学们听的可能都不一样,有的同学全神贯注能跟着老师的方向一路听下去,而有的同学可能因为一些原因没有听懂老师讲的一些内容想重新听懂并且跟上老师的指向的话是很难的。
那现在我们看一下为什么有这种情况发生呢?
一种情况是多元化,这里的多元化大家可以理解为万物都是独一无二的,知识沟通传播就是多元化碰撞交流的过程。在多元化的世界里,本身就是多维度的。不同的人看同一个词语当然就有不同的理解,比如6和9这个。当然老师讲学生听是一种单向的传播,类似于你在看网剧但是弹幕缺把剧情透出来了,你就要多处理一下你自己对剧的理解。
那现在我们看另外一个比较有意思的原因:表达内容的方向不一致,不在同一个频道。这里有两种场景,一种是我说的不是我想说的。另一种是我说的不是你想说的。
现在我们看第一种情况:我说的不是我想说的。这种情况就是说话的人有点词不达意,导致说的话没有准确的表达其要真正要表达的东西。从而导致说话的人要重新组织一下语言才行。落实到文章书籍层面就是说作者在表达内容的时候没有做到信达雅。当然,如果经常这样的话可能沟通起来会比较困难,在工作中也比较浪费时间。
第二种情况就是:我说的不是你想说的。这句话怎么理解呢,就是说某个人跟你讨论某个话题或者就某个话题的某个方面具有指向性的沟通,但是得到的回应却是别的方面内容或者指向偏差变得比较大,从而导致两个人或者多个人的沟通出现更多分歧。比如左右而言其他,避重就轻,简单说就是转移话题或者偷换概念等等。
从上面的分析可以看出沟通需要持续理解持续修正指向对齐才行,不然的话就会出现同一个词的语境不一样,只可意会的场景,当然中文里也有很多关于这方面的经典成语词句等等,这里也分享一下:
驴头不对马嘴,鸡同鸭讲,对牛弹琴,抬杠(经典),辩日,指鹿为马,指桑骂槐,含沙射影
上面这些词可以算是争论吵架的一些统一语言了,哈哈。当然从词的语境,上下文等可以体现出来这种词语的多维性,放大了讲就是关于思维,物品的本质复杂性,举个例子土语或者土话这种,最经典的莫过于:橘生淮南则为橘,生于淮北则为枳。这里可能指向(隐喻)的是人才,但是单从橘子本身而言其叫法在不同的地方就是不同的命名。又或者说一个老外跟一个中国人沟通肯定会有一些麻烦。
所以对于这种上下文之间或者环境文化之间存在巨大差异的情况,肯定需要人工处理或者通过某些工具去表达这之间的关系,类似于翻译。
四、词语特性
上面我们从一些词的表现可以看出几乎所有的词都是造出来的,也符合一定的语法逻辑。现在再简单从语文的角度分析一下词语的特性或者词语的类型。
4.1 动词
关于动词的百度汉语解说如下:表示人或事物的动作、存在、变化的词,如“走、跑、跳、哭、拿、坐、飞、起来”。
在软件开发领域,很多业务操作我们就可以归结为增删改查,更抽象一点的就是读和写。
4.2 名词
百度百科解释:表示人、事、物、地点或抽象概念的统一名称。它分为专有名词和普通名词。也有关于英语的名词类解释,链接如下:
https://baike.baidu.com/item/%E5%90%8D%E8%AF%8D/502047?fr=aladdin
当我们谈论一个需求的时候或者一个软件中的某个物品的时候其实更喜欢将其名词化,或者说用名词定义某种操作。比如建模过程的一个关键业务时刻或者说时标对象,这个就是由动词引发的开发者或者建模专家将其名词化的过程,因为有了名词才更具象化。
4.3 动名词
这里需要说明一下动名词这个类型其实不属于汉语的类型,而是由英语转换过来的,其概念如下:
动名词(英语:gerund),指的是动词ing形式的一种,兼有动词和名词特征的非限定动词(即非谓语动词)。
具体解释参考百度百科,链接如下:
https://baike.baidu.com/item/%E5%8A%A8%E5%90%8D%E8%AF%8D/502814
谈到这里其实很多东西在汉语中为什么会出现只可意会不可言传的情况呢,可能跟汉语本身的语法,词句类型有点关系,汉语其本身就是由古文到文言文再到白话文演进变化来的,一开始的比较简单但是能表达很多意思,再后来的就是稍微复杂却能更具体的表达某个指向信息。所以从汉语的名词动词而言其本身也有这个动名词的概念,只是说我们就简单的分动词和名词两种了,再回头看一下动名词,这个说白了就是动词名词化。所以从英文转到中文来看其实就是名词,只是这种名词大多是虚拟的,不指向实际物品。如果从中文本身而言是动词表达名词的话也有不少,但是我们就认为其是名词了,比如说漏斗,铲子。这里不再拆文解字了,大家只可意会一下。
4.4 主谓宾,定状补
这里就简单分析一下词语构成的一些语法,从中文来看其实有6大类主谓宾,定状补,这几个概念就表达了中文的一句话的整个语法结构,关于其详细解释,链接如下:
https://zhidao.baidu.com/question/1513736271920794340.html
为什么会说这个呢,跟统一语言有什么关系呢?其实作为领域专家或者建模专家,开发者都需要从语句中找到关键的统一语言,最能表达业务操作,业务场景的词语。比如某个接口,针对某个接口需求的描述我们可以画一下重点,从中文或者英文的语法结构中找到我们所关心的词语,虽然这些词语可能不是统一语言,但是也隐喻了这个接口的本质需求。比如性能怎么怎么样,在什么什么情况下做什么什么事情。
五、总结
本文是《统一语言为什么不能统一》系列的第一篇,详细介绍了统一语言不能统一的客观原因和本质原因,并分析了词语的一些概念特性。后面将介绍一些该话题相关的其他方面内容,欢迎关注讨论。