Transcription
嗯,我叫 Eli,今天在这里和大家聊聊我们如何沟通。
先简单介绍一下我自己。我曾是一名软件工程师,做过数据工程,后来进入开发者关系领域,现在我主要思考如何向人们解释概念。这是我工作的重要组成部分。我目前在一个研究所工作,教流行病学家写代码,这比听起来既容易又难。
请务必来和我聊聊我的工作,它非常酷。
但这次演讲是关于如何将一个人的想法传递给另一个人这个基本过程,以及这对我们作为软件的构建者、测试者、设计者和维护者意味着什么。
思考这个问题有各种各样的框架。今天我将带大家了解其中的一些。我们会从一些历史上的语言哲学家那里了解其中的一些。
我将从解释我如何尝试向你们解释某事开始。
所以,这里是两个人,或者说,左边是我,头是粉色的,你们是所有人,你们的头都是蓝色的。我有一个想法,我希望你们也能有这个想法。
所以我说些什么或做些什么。我用嘴发出一些声音,或者我在纸上或电脑屏幕上写下一些符号。这会让你感知到我所做的事情。你听到一些声音,或者看到一些字母之类的形状。
这会在你脑海中产生一个想法。这四件事中的每一件都是独立的。它们有关联,但又都是独立的。
当然,我们可以通过一个中间步骤,比如通过网络传输,或者时间延迟等等,来让事情变得更加复杂。
在这个阶段可能会发生很多很多复杂的情况。所以,我们将保持抽象,不去考虑它们。
有了这个模型,我们就有了一个想法,我们有这四件不同的事情,而我们只能控制其中的一些。
这个模型中最让我感兴趣的是这些翻译层,因为在这些阶段之间都有翻译层在发生。
中间的那个可以通过在嘈杂的房间里,或者需要阅读一张浸泡在水里的纸,或者其他任何事情来降级。我们在传输信息时可能发生的各种各样的问题。
但是,在我有一个想法和我说话之间,以及你听到某事然后产生一个想法之间的翻译层,这些要难得多,这很大程度上就是这次演讲的内容。
所以,我们有两个想法:一个是在你脑海中有一个想法,另一个是做一些象征那个想法的事情。
如果我们想理解这两者之间的翻译层,以便我们能更好地与人沟通,让他们的“灵光一闪”尽可能与我们的“灵光一闪”相似,我们就需要理解我们如何从有一个想法到说出或做出象征那个想法的事情。
现在是时候认识我们今天的第一个哲学家了,费迪南德·索绪尔。
他常被称为符号学之父,而符号学是我今天将要主要谈论的领域。他是一位非常有趣、有影响力的、开创性的语言学家。
他是符号学领域的两位主要创始人之一。
所以,我们回到“你所想的东西”和“你所说或做的事情”这两个想法。
索绪尔给它们起了名字。他说,这是“所指”,而你用来指代那个东西的是“能指”。
这些都是非常拗口的词,而且如果我结巴(我确实经常结巴)的话,它们也很容易混淆。
所以,我将对索绪尔的框架做一点更新,说这是“概念”。“灯泡”是我脑海中的概念,而“能指”是我用来传达这些概念的词。
索绪尔当时说的一件非常具有开创性的事情是,对于一个给定的概念,这两者之间不一定有任何内在的联系。
这在当时是具有开创性的。人们认为我们使用的语言与它们所要代表的概念之间存在某种内在的联系。
索绪尔说,我不认为这是真的。我认为这比那要随意得多。我不认为他用了那些确切的词。
但举个例子,我们来看看这个动物。
现在,谁认识这个动物?我们都知道这是什么动物,我希望。
如果你不认识,那么你就是今天的一万名幸运儿之一。
在各种语言中,这个动物的名字听起来像“喵”之类的,对吧?
我想古埃及语或埃及语中,这个词是猫的意思,但在英语中,它是“cat”。
我们为什么要用这一连串的声音来代表这个动物?这有点随意,但它之所以有效,是因为我们都同意存在这种联系,对吧?
而且,它甚至可以变得更抽象。我们可以为相当复杂的概念使用非常复杂的能指。
这里有人认为他们不知道这些图像中的任何一个是什么意思吗?
但是,为什么这个特定的,我能借点光吗?为什么这个卡通人物握紧拳头的图像会代表它所代表的意思呢?
你知道,为什么这会意味着“哦,这太尴尬了,我要消失了”?
因为我们集体同意它们具有这些含义,因为它们来自一个赋予它们这些含义的语境,即使我们把它们从那个语境中抽离出来,它们仍然保留那些含义。
这些都是能指,只要我们同意它们所指代的意思,它们就能作为语言运作。
换句话说,如果我们回到沟通的四个独立阶段的想法,并且我们正在关注这些翻译层,那么一个不那么明显的事情是,这两个翻译层之间无法真正进行一对一的比较。
你知道,我很难说清楚为什么我将一个特定的能指与一个特定的概念联系起来,或者至少对于那些没有花几个小时沉迷于这类事情的人来说是这样。
这也意味着,两个人的两个想法,粉色的灯泡和蓝色的灯泡,永远无法直接比较。
有那个古老的哲学上的俏皮话:“你看到的蓝色和我看到的蓝色是一样的吗?”
我认为这个问题根本无法回答,这也意味着,我们永远不会有完美的沟通,因为你怎么去验证它已经发生了呢?
人们脑海中的想法永远不会完全等同,因为我们甚至没有办法谈论那意味着什么。
还有更明显的方式,即使我们使用相同的词语来描述它们,人们脑海中的想法也可能不匹配。
我第一次做这个演讲是在葡萄牙的波尔图,有一个葡萄牙语单词被公认为无法翻译。
房间里有葡萄牙语使用者吗?偶尔会有一个。即使在波尔图,碰巧也有不少。
这个词被公认为无法翻译,它指的是一种特定的情感,这种情感是那些在帆船时代进行长途航行的人,或者那些离开家园前往新大陆殖民的人所经历的。
他们对家乡有一种苦乐参半的思念,即使他们知道自己要去做的这件事是值得的,但他们……这是一种非常复杂的感觉。
你可以看到,为了解释这个词,我不得不使用很多英语单词。而它在葡萄牙语中只有一个词。
之所以如此难以解释这些事情,部分原因是我们缺乏创造和使用这个词的人所拥有的文化背景。
所以,我们没有相同的内在体验,这个词……我没有那个灯泡的等价物。我没有感受过。我不知道。
所以,我们不得不使用更多的词来试图唤起某人的情感。
如果我们回到概念和能指的想法,我们需要理解它们之间的关系。索绪尔说,好的,这是……我们有两个东西,显然,一旦每个人都同意某个能指指代某个概念,我们就可以用它来交流。
但是,这些关系最初是如何产生的呢?它们从何而来?我们如何从一个方向走到另一个方向?当我们不知道的时候,我们如何学会哪些能指与哪些概念相关?
所以,索绪尔想出了一个主意。他说,好的,这里有一个人脑子里有个想法,他说了一些象征那个想法的话。
他们知道如何做到这一点,因为他们有一个“言语行为”,即“parole”。
他们怎么知道如何进行言语行为?他们怎么知道如何将灯泡翻译成声音或词语或任何东西?
他说,好的,他们有一个叫做“语言”(langue)的东西,这是集体同意的翻译,比如,我们如何指代这些概念。
当语言学家研究时,他们大部分时间都在研究这个“语言”的概念,这个集体持有的关于我们如何用能指来指代概念的共识。
但是,我们只是把问题推迟了一步,通过定义这个……“语言”从何而来?
所以,索绪尔说,好的,它是通过使用来定义的。我们有语言,它既定义又被其自身的使用所定义。
如果你足够频繁地进行言语行为,并且它们得到了足够的接受,它们就会成为“语言”的一部分。它们成为被同意的共识的一部分。
我们可以通过模因看到这一点。我们开始用它们来指代这些东西。你知道,史蒂夫的这张“你怎么了,我的孩子们”的图片并不总是我们集体语言理解的一部分,它通过使用,逐渐成为其中的一部分。
索绪尔当时说的另一件事是革命性的,他写作的时候。这叫做他的“言语回路”,他的“论文陈述”是,这是一个循环的、不断演变的事物,这就是语言变化的原因。
而是否存在“阻塞”或不同的人以不同的速度穿过电路的某些部分,将导致不同社区之间词汇的差异。
诸如此类。
如果你不经常使用某个特定的俚语作为你的“言语”(parole)的一部分,那么它在你脑海中的“语言”(langue)中就不会那么强烈。
但是,我们都必须在彼此之间达成一致,关于“语言”由什么构成,才能有效地沟通。
是的,所以我们得出了“语言”作为集体持有的关于如何将概念翻译成能指的想法,一种共享的词典,存在于我们所有人的脑海中,但又不完全存在于任何一个人的脑海中。
它只作为人们相互交流的涌现属性而存在。
有一个人对这实际上是如何运作以及我们如何真正看到这个“语言”的想法的体现做了很多思考,对我来说,他就是哲学家路德维希·维特根斯坦。
观众中有维特根斯坦的粉丝吗?有人听说过这个人吗?
你听说过他?你听说过他。好吧,你们其他人今天可以认识路德维希·维特根斯坦了。
他是个很有意思的人。他在哲学上几乎什么都做过。他研究逻辑。他研究数学。语言。
他对所有这些都有有趣的看法。我不一定同意他说的所有话,但他是一位极其有影响力的哲学家。
他做的一件事就是提出了“语言游戏”的概念,这次演讲的名字就来源于此。
他创造了“语言游戏”这个想法,以此来展示概念和能指之间的关系。
他认为语言和交流就像一场技巧或运气游戏,或者任何这些……它有规则,规则可以被违反,为了成功地玩一场游戏,你需要遵守规则。
他用了大量的类比和抽象的语言来描述这个概念,因为它确实很难用抽象的方式简洁地描述。
他用了大量的例子。所以,我也会这样做。
所以,我们假设有这些人们正在用它们来建造东西。
假设我们有两个人,我们称他们为克里斯和阿尔特,他们一起玩乐高。
为了……
所以,克里斯在建造,阿尔特在递给他零件。
为了让阿尔特知道克里斯想要他递给他一个零件,克里斯会说“积木”。
为了让阿尔特知道克里斯想要他递给他一个零件,克里斯会说“板”。
而对于这些零件中的一个,克里斯会说“连接件”。
这是一个非常基础的语言游戏。说“连接件”意味着请递给我一个,而且正好是一个看起来像这样的东西。
但是,你知道,像“卡丹”一样。那就像一个命令。
只要玩语言游戏的人都理解规则,你们就可以有效地使用沟通来达到一个目标,即协作沟通。
现在值得注意的是,在这个非常基础的语言游戏例子中,克里斯说“粉色、白色和蓝色”比说“连接件、积木和板”更有效率,因为“粉色”比“连接件”少一个音节。
但是,因为他们是乐高迷,他们想使用每个乐高零件的正确术语。
语言不完全是关于效率的。它融入了文化背景。它有人类的怪癖,例如。
但这只是一个非常基础的语言游戏例子。
所以,有一些设定的规则,通过做出合法的举动,我们可以推进游戏,分享知识和理解。
如果语言就像一场游戏,那么打破规则意味着什么?
有人能告诉我这句话是什么意思吗?我给你们一点时间。有人想猜一下吗?
它什么都不是。它毫无意义。它违反了语言规则。
这个特定的违规行为被称为“比较幻觉”。你将一个数量与一个布尔值进行比较。
在英语中,我们没有将布尔值转换为一或零的方法,对吧?我们做不到。
你正在比较两个不可比较的类型。但它听起来像合理的英语。
所以,你看着它,你会说,“嗯?”
这是违反英语规则的一个例子。它不传达任何意义。它什么都不是。它不是一个陈述。这里没有信息被传达。
另一方面,我们可以打破规则,但我们也可以扩展它们。
有人知道这是什么意思吗?有什么猜测吗?
如果我告诉你这是“宝贝”,对你们有帮助吗?现在有什么猜测吗?
是的。我们需要修剪我们猫的爪子。她是……
这是 Gothm。她是家里的宝贝。她有时会变得很尖锐,所以我们需要让她不那么尖锐。
不。Gothm 的尾巴,修剪爪子的时候到了。我们需要让“宝贝”不那么尖锐。
因为我可以,我将向你们展示我猫的另一张照片,因为她是最棒的。
之所以这能作为我家庭语言游戏的一个有效举动,是因为我们设定了家庭规则,对吧?语境,额外的语境为语言游戏设定了规则。
所以,为了让克里斯和阿尔特玩他们的乐高游戏,他们首先需要就“连接件”、“积木”和“板”的含义达成一致。
如果他们有乐高迷的共同语境,他们就已经有了共同的理解。
在我家,知道“宝贝”指的是猫意味着,指代“宝贝”的事物突然变得可以理解了,而以前却不行。
这本质上是维特根斯坦当时提出的一个重要论点,当时是革命性的。
他说,语境赋予交流意义。语言在没有其所处的共享语境的情况下没有任何意义。
这又回到了我们使用的能指与概念之间存在某种内在的、神奇的联系的观点。
这违反了那个观点,所以在当时是革命性的。
如果我们回到“悲伤”的想法,这可以让我们更多地思考为什么在语言游戏中,这有时会是一个困难的举动。
因为如果我没有相同的语境,关于那种苦乐参半的思念,它是我文化历史的一部分,你知道,我可能永远无法感受到这种情感,因为没有共享的语境。
这是一个比我能回答的更棘手哲学问题。
但它是一个例子,说明拥有额外的语境会使语言对你的影响不同。它使你听到的和你思考的之间的翻译层对你来说是独一无二的,是你自己独特的语境。
我们与他人共享的语境越多,我们就越能有效地与他们沟通,或者越能高效地与他们沟通。
所以,如果语言之所以有效是因为我们共享语境,那么如果我们必须与那些我们完全不共享语境或只有极少语境的人沟通,那会是什么样子呢?
有一个研究所基本上以此为使命,那就是长期核废料储存研究所。
有人认识这个短语吗?
这是信息系列的第一部分,它不是为了写在长期储存核废料的设施上而设计的,因为语境……
我们作为一个物种确实做了很多很酷的科学研究,结果是我们给自己制造了很多问题。
其中之一就是有害物质的存在,它们将在数万年的时间里继续有害。
比任何一个人类文明存在的时间都要长,可以说,但肯定比大多数人类文明存在的时间都要长。
比任何一种已知的语言在没有重大变化的情况下持续的时间都要长。
所以,我们现在产生核废料的人面临一个问题。我们有使命。
我们有责任让遥远的未来的人们知道,你们不应该碰这些东西。这对你们有害。
所以,这个研究所设计了一系列信息。
诸如“这里不是荣誉之地。这里没有伟大的功绩被纪念。”之类的。
你知道,这里的危险在你的时代存在,就像在我们的时代一样,危险是对身体的,以及各种……听起来很金属的东西。
它太酷了。老实说,我强烈鼓励人们去了解这件事,因为它真的很酷。
这个想法不是我们一定会写下这些话,因为语言可能会随着我们负责保护人们免受这些东西侵害的时间而改变。
这些是我们能找到的最接近……它们旨在代表概念。它们试图成为非常朴素的能指。
我们想以某种方式传达它的意思。
这些信息系列从非常广泛的“这不是荣誉之地。不要……离开。”到非常具体的事情,比如“这里的危险是对你的身体。”
你怎么向一个你不知道是否和你一样理解物理学的人解释电离辐射?你不知道他们说什么语言。
所以,这是一个非常困难的问题,这个研究所必须解决,他们有……语言学家、哲学家,我想还有核物理学家。
但很大程度上,这是一个沟通问题。
他们开发的一个我认为非常有趣的东西是这个符号。
这是 ISO 21482 2007,于 2007 年制定。这是一个他们认为可以放在核废料管理设施上的标志。
所以,这是一个三角形的设计。
如果我们看看每个元素,我们可以看到一些设计背后的推理。
首先,我们有骷髅和交叉的骨头。目前,这普遍意味着危险。你会死。
有充分的理由认为,这在遥远的未来仍然对人们有意义。
作为一个物种,我们通常看不到自己的骨骼。我们埋葬死者,我们不倾向于……你知道,把他们留到变成骨骼。
一般来说,如果你看到一个头骨,说明有什么地方出了非常非常严重的问题,对吧?
这是一个相当……我们希望这仍然是一个相当普遍的象征,表明你的身体会发生不好的事情。
所以,它在这里,在标志上。
接下来,我们有这个。我们可以认为……你知道,我们可以假设,在 10,000 到 20,000 年后,人类将拥有与我们相同的身体图谱。
进化速度不够快,无法让我们在那段时间里拥有……你知道,额外的肢体,无论你离核废料储存设施有多近。
我们可以希望这仍然可以被识别为一个运动中的人。
我们希望箭头仍然……你知道,具有相同的含义,但我们不能确定,对吧?
你知道,也许那个箭头对未来的人来说意义不同。我们只是不知道。
但这是一个合理的猜测。
最后,我们有电离辐射,这是一个极其抽象的概念,你试图将其传达给那些你不知道是否与你共享任何语境的人。
所以,我们有顶部的原子符号,然后是这些表示危险射线的弯曲线条。
我认为这是这个符号中最薄弱的部分,而且有充分的理由。
这是因为需要大量的语境来理解它所指的非常抽象的概念。
一些我们没有物理表征的东西,就像我们有头骨一样。
综合来看,我们可以理解为什么它对我们今天意味着原子危险正在散发出来。非常糟糕。你应该离开。
但正如我的朋友迪伦指出的那样,这也可能意味着“当蛇从吊扇里出来时,逃离海盗。”
你知道,沟通……它永远不完美,我们共享的语境越多,我们就越接近“足够好”。
我们共享的语境越少,我们就越需要努力,尝试越多的方法。
另一种方法是……我不确定它是否由这个研究所制作,但……有人想出了一个警告人们在遥远的未来关于核辐射的想法。
它基于……人类长期以来一直遵循的两件事。
一是我们喜欢和这些动物一起玩。我们与这些动物有着互利的关系,作为……农业物种。
这些动物在我们的谷仓里吃掉来吃我们谷物的鼠标。
我们喜欢它们。它们很可爱,很迷人,你知道,人们为了好玩把它们养在家里,就像我一样。
所以,我们可以合理地预期,人类将继续在生活中拥有猫。猫会……你知道,当人类文明发生时,它们会自然地出现。
我们现在也有能力通过科学来基因改造猫,使它们在电离辐射的存在下发光,这非常酷。
这个想法是,我们将这个基因引入野猫种群,以及……我们随机饲养的家猫种群。
我们希望人们看到他们的猫开始发光,然后说,“哦,这里有点不对劲。有什么问题。”
但也许他们会觉得猫很酷,发光真的很漂亮,就像……你知道,那也很好。
所以,我们需要一些其他的方式来代代相传,当你的猫发光时,这是坏事。
人类传统上传递知识的一种方式是通过口头传统,特别是歌唱传统。
所以,这个人写了一首歌,叫做“别变色,小猫咪”,据说非常朗朗上口。
我没听过,生怕它永远不会离开我的脑海。
据说这是一首非常朗朗上口的曲调,它讲的是如果你的猫变色了,那是不好的,你应该离开。
那种非常抽象的想法,比如他们没有……他不是在试图传达原因。他只是试图传达实际的操作性:如果你的猫变色了,你应该离开。
试图保护这些假设的人类种群,让他们不要生活在有足够电离辐射的地方,以至于让他们的猫发光。
所以,通过这两件事——人类喜欢猫,人类喜欢音乐——我们显然都知道音乐能够传递持久的文化信息,对吧?
是的。
这是我的饮水时间。
所以,这就是沟通的运作方式,对吧?它永远不会完美,但我们可以理解它是在试图将想法与行动、声音、形状联系起来,并希望这些形状能够传递给感知它们的人。
这些……这些行为被传递给感知它们的人。
而他们的感知会在他们脑海中产生一个相似形状的灯泡。
大家都明白了吗?
酷。哦,我们有一些相似形状的灯泡。
我们回到这个模型。这对我们这些与计算机打交道的人意味着什么?
嗯,我……这就是你写代码时发生的事情,对吧?你脑子里有一个想法,你写了一些代码,然后它在计算机上执行。
我……我假设的一个原因是,我们中有如此高比例的神经多样性的人喜欢写代码,是因为这消除了很多模糊性。
如果你写一个“你好,世界”的东西,并且你知道它是正确的,计算机也这样做了,我可以验证我是否成功地传达了我的想法。
而计算机没有内在性。所以,对于计算机在你给它的代码之后做了什么,没有误解的空间。
你知道,我们可以看看 C 语言是如何实现的,例如,然后是 Python,例如。
你知道,我们可以一直看到堆栈的底部,并且知道我们作为沟通行为所做的事情,即编写代码,已经产生了预期的效果。
如果我们从语言游戏的角度来看待这个问题,编程语言就是语言游戏的规则集。
通过……从我们的一和零,我们的机器码开始,我们可以构建……语法糖之上再语法糖,直到我们得到足够像语言的东西,可以称之为编程语言。
我们所做的是,我们迭代地为语言游戏添加了规则。
所以,现在花括号有意义了。现在……你知道,我是一个 Python 人,这意味着这个。
当我们说不同的语言时,是因为我们基本上在使用不同的规则与计算机交流。
但这不止于此,因为当我们编写软件时,我们实际上是在添加更多规则。当我为一个用户编写一个类定义时,我是在教计算机“用户”是什么意思。
我是在给它额外的规则,这样我就不必写所有东西的长篇大论。这就是我们在定义函数和变量时所做的事情。
我们正在添加越来越多的方法,以便通过提供关于我们的业务问题的更多语境,更有效地与计算机、与将要执行的软件进行沟通。
我们试图通过提供语境来将我们的业务问题融入计算机。
所以,当我们编写代码时,太棒了。只要你能推理出你想做什么,并用代码写出来,你就可以做到。
方程的这一半已经解决了。
正如我之前所说,你可以看看你的代码是如何编译的。如果你真的真的想,你可以验证它的正确性。
而要擅长编写代码,很多工作都在这一边,即能够推理出想法并准确地将其翻译成言语行为,比如编写代码。
作为一点题外话,因为我们现在正处于生成式人工智能时代。
如果这一半变得非确定性,那确实会从根本上改变你编写代码时发生的事情。
所以,例如,如果作为我软件运行的一部分,有一个非确定性的模型,那么我突然失去了这一半方程已解决的事实,并且突然将这个“我是否正确沟通了?”“它是否在做我以为它在做的事情?”的问题重新引入到方程中。
这不是我看到很多人谈论的角度。
我对此没有什么可说的,除了我认为这是一个关于软件中非确定性的有趣观点。
但总的来说,这就是你编写代码时发生的事情。很棒。我们喜欢它。
每个人都喜欢编写他们的小爱好项目,你知道,当你让计算机做你想让它做的事情的那一刻,你会说“是的”。
但是,当我们团队合作编写软件时,不仅仅是我们自己,对吧?
有我写我的代码,有我的同事写他们的代码。也许我的许多同事都在写他们的代码。
我们都在试图同时与计算机沟通。
所以,我们最好确保我们之间共享了足够的语境,以免让计算机对它应该做什么感到困惑。
我们都需要玩同一个语言游戏。
这就是为什么当我们一起写代码时,我们也会与人类交流。
你可以不这样做。顶部的这条线是相互沟通的有效途径。
David Whitney 有一个关于代码中的意图和代码作为文学的精彩演讲,它主要是为了供其他人阅读,并且碰巧可以由计算机执行,这是一个精彩的演讲,我强烈推荐。
这是人与人之间以及与计算机之间有效的沟通途径。
一些开源软件开发社区将其作为一种非常重要的沟通方式。
但这条线也包括代码审查。它是茶水间的闲聊等等。
所以,这就是我们团队合作编写软件时发生的事情。
虽然仍然存在一些……这里有额外的复杂性,但总的来说,作为一个行业,我们在这方面已经相当不错了。
我们已经制定了流程,以确保我们在代码上保持一致,并且代码按预期工作,并且我们编写测试,以便我们可以验证我们的沟通是否成功。
当我们一起构建软件时,我们使用代码进行沟通,以及其他方式。
而这些其他方式的补充,比如会议、GitHub 工单、GitHub 问题,你知道,所有这些我们都认为是我们与他人沟通的主要方式。
但代码也在那里。
我们可以做一些事情来使我们的代码成为我们之间更有效的沟通工具,当我们编写软件时。
我想向大家介绍我们今天的第三位哲学家。
这是保罗·格赖斯。他是一位英国语言哲学家。
他提出了一个叫做“合作原则”的理论,但它更常被称为“格赖斯格言”。
有人以前听说过吗?
好吧。是的。传播信息。
所以,他提出了……这些是他观察到的描述性事物。他观察到很多人在进行他所谓的“合作沟通”。
合作沟通是指多方真诚地试图最大化信息传递。没有撒谎,没有开玩笑,没有误导。
你只是真诚地试图尽可能有效地沟通。
他注意到在这些沟通例子中,有几个特征反复出现。他给它们起了名字。
现在,他的格言……数量格言。你……这些通常被规定为“你应该这样做”,但他注意到它们是描述性的。
他注意到人们倾向于提供所需的信息,但不多,以实现信息传递的最大效率。
最大真实性。只说你合理认为真实的事情。我不是为了开玩笑而误导你。我不是出于任何原因撒谎。我只是真诚地试图说我认为真实的事情。
相关性格言。不要包含不相关的事情。当你试图沟通某件事时,不要开始谈论另一件事。
我们中的一些人患有注意力缺陷障碍。这很难。
所以,清晰性格言是……这是我认为真正有趣的一条。
避免歧义和晦涩的语言,以易于理解的方式呈现你的信息。
其他三条可以……你知道,以相当冷酷的逻辑方式推理。
清晰性这一条是专门关于与他人沟通的,对吧?
因为这是你试图以一种能够被对方的翻译层所理解的方式来构建你的沟通,它将行为转化为想法。
为了尽可能地遵守这条格言,你应该做的是尝试考虑你的听众。
你正在与谁沟通?并以一种能够整齐地融入他们思维方式的方式来构建你的沟通尝试,他们对“语言”的想法,你知道,尝试按照他们的语言游戏规则来玩。
要做到这一点,你需要比你现在更了解他们一点……你知道,你需要了解他们。
你需要了解他们的语境。这就是为什么它是真正棘手的一个,也是沟通问题通常出现的地方。
所以,可操作的收获,因为每本会议书籍都应该有可操作的收获。
关于这四条格言,它们对编写代码有很多好的建议。
数量格言,提供所需的信息,但不多。
你知道,不要在你的函数中包含你不需要的额外东西,等等。
编写有助于澄清的代码注释,但不要仅仅为了写而写代码注释。
诸如此类,你知道,如果你在 Python 中使用类型提示,如果它增加了信息,但不要仅仅为了这样做而这样做。
真实性格言,只说你认为真实的事情。
你知道,在函数顶部验证你的假设,确保你没有意外地传递一个空值,而它本不应该是。
诸如此类。
相关性格言。不要包含你不知道相关的信息。
在代码方面,这看起来是确保你只接受你需要的输入,并且你不会最终传递大量可能导致你的代码脆弱并最终崩溃的东西,因为有些东西改变了,但它实际上不是承重墙,但测试却失败了,因为你还是包含了它。
但是,我将在这次演讲的其余部分讨论的大部分内容都来自这一条,即清晰性格言。
因为这对代码意味着什么?避免代码中的歧义,避免晦涩的语言。
这可能意味着……你知道,编写干净、文档齐全的代码,避免聪明,避免简洁的单行代码,专注于可读性。
设计你的代码,使其易于另一个人类理解,而不仅仅是计算机。
但最后一点是我认为真正有趣的部分。
将你的代码结构与它所解决问题的结构相匹配。
这有助于你的代码更清晰。如果你理解你的业务问题,并且你用你的业务问题的语言来表达事物,你实际要解决的问题,你的代码将更容易被那些共享该语境的人理解,而这些人应该是你组织中所有与你一起构建软件的人。
之所以这特别相关,是因为这就是我们在团队中构建软件时发生的事情。
但是,我们很少只是在团队中构建软件。我们有利益相关者。万岁,利益相关者。告诉我们我们需要构建什么的人。
他们说一些话。他们说我们需要软件来做这个功能,因为我们的投资者说我们需要它,或者因为我们收到了用户反馈说我们需要它,无论出于何种原因。
我们需要对我们的软件做一些事情。
这意味着开发人员听到了什么。也许是他们的项目经理或产品经理制作的一些 Jira 工单。
这意味着开发人员现在对他们需要对他们的软件做什么有一个想法,然后他们会离开并实施它,使用软件团队,以及我们在过去几十年里作为软件工程师开发的并擅长的流程,将想法转化为软件。
这一部分,这就是很多事情出错的地方。
这是支付我们账单的人和实际制造构建软件的人之间的沟通。
当这些沟通问题发生时,可能会导致各种问题,从……你知道,比如他们不……抱歉,结巴。
没有关于某件事需要多长时间才能完成的一致想法。
这是一个令人恼火的问题,但不是最糟糕的事情。
但是一个糟糕的问题是,利益相关者要求一些需要你完全重写项目的东西。
假设你构建了某种计费软件,突然你的利益相关者来找你,说我们需要能够以不同于付款人最初支付的货币来退款,而你构建的任何后端都根本不允许这种情况存在。
你将不得不从头开始重写你的软件。
他们要求你做的举动打破了你在已构建软件中与计算机创建的语言游戏的规则。
你将不得不把所有的家庭规则都剥离到零点,也就是你的编程语言及其标准库,然后重建,以便你能够创建一个语言,让你说“向这个人退款,金额不同于他们支付的金额”。
有人遇到过这样的问题吗?你被要求构建的功能根本不可能实现?你基本上必须重写整个东西。
是的,它发生了。
而且它确实非常令人沮丧。
偶尔会有一些变通方法,但你知道,正如我们都知道的,你在一堆东西上面再加一堆东西,突然之间你就搞得一团糟。
所以,把这种沟通做好,确保你作为软件开发人员所做的事情能够让你能够用他们的语言与利益相关者沟通,使用他们……业务问题是他们说的语言的规则。
确保你的软件与业务问题相匹配,可以让你更容易地与说那种语言并支付你账单的人保持同步。
当然,这就是我们在公司里发生的事情,我们有利益相关者,或者……你知道,一个研究所,我们有利益相关者说“这就是我们需要构建的”,然后你离开去构建它。
这就是我认为实际发生的事情,但我不是利益相关者。
利益相关者认为发生的是这样的。
我是一个利益相关者,我脑子里有一个想法,我说了一些话,然后软件就出现了。
我们只是……我们只是一个实现细节,我们只是他们言语行为变成软件的机制。
如果我们考虑这个模型,我们应该做的是让我们的生活尽可能轻松,作为那些需要翻译的人,从利益相关者的头脑到计算机如何看待业务,计算机如何能够概念化业务问题。
我尽量不那么频繁地使用拟人化的语言来描述计算机,因为再次强调,它没有内在性。
但是,我们希望能够用我们构建的软件的语言来阐述利益相关者告诉我们的事情,以便利益相关者能够有效地……告诉我们软件需要是什么。
有各种各样的工具被用来解决这个问题。
诸如……Girkin 测试之类的,我正在努力回忆……Girkin 语法。有人用过吗?
你编写测试,这些测试是……用普通语言描述的用例。
是的。
>> BDD。
>> BDD。是的。行为驱动开发。
是的,你让你的利益相关者基本上编写测试,这些测试就是规范,一旦测试通过,你就成功了。
这些方法的成功有限,因为利益相关者通常不喜欢用形式化语言思考,除非他们已经是开发人员,而并非所有人都如此,这让我们感到非常……
而且,无论 BDD 语法看起来多么好,它仍然是形式化语言,它仍然会限制人们。
所以,总会有一点点人为的混乱。
但是,我认为,为了让这种翻译尽可能容易,我们需要做的基本上就是领域驱动设计。
有没有人听我说话,然后想,“哦,他们描述的就是领域驱动设计。”
没有。
是的。
是的。
这就是领域驱动设计。它是将你的代码结构和你软件的逻辑构建方式与它所描述的现实生活问题相匹配。
所以,它是……你知道,它将业务概念转化为代码概念,尽可能地接近,并试图让你的抽象尽可能地接近现实世界。
这意味着那些整天思考业务问题的人,整天谈论业务问题,希望你构建解决该业务问题的软件,你们都说同一种语言。
你们都在玩同一个语言游戏规则。
不仅是在你,开发人员,理解业务问题的方面,而且在你软件中描述它的方式。
你需要……这做什么?它减轻了你作为开发人员在翻译利益相关者想要的东西和你必须写成代码的东西时的认知负担。
因为如果你的利益相关者在你提到“用户”时意味着一件事,而你的代码有 17 种不同的“用户”定义,而且没有一种完全匹配,你就会遇到麻烦。
不幸的是,这意味着需要大量的初步对话,与人交谈,确保你们都……
同一页面。但我们已经讲过了。我们知道那是什么样的。我们有了概念和指示物,并且知道如何就术语达成一致,以便我们都在教授、说话使用同一种语言。例如,与您的利益相关者交谈时说:“好的,当您说‘用户’时,您的意思是什么?”您最终会问很多听起来很愚蠢的问题,但它们非常必要,因为很容易不意识到您没有使用同一种语言,即使你们都在说英语。那么,在领域驱动设计方面,有哪些可行的收获呢?嗯,主要的收获是,回去好好研究一下领域驱动设计。听一些优秀演讲者的讲座。今天,本周,本次会议上,我们有一些专家。伊恩·库珀就是其中之一。所以,如果您有机会和他交谈,强烈建议向他请教。嗯,我认为领域驱动设计非常自然地源于这些关于沟通的框架,以及我所认为的它们如何适用于我们这些与计算机以及与他人交谈的人。但总而言之,我们希望尽可能多地重用上下文。嗯,我们想了解我们的利益相关者在说某事时意味着什么,然后将该上下文整体提取出来,并将其作为我们与计算机打交道的方式。嗯,我们希望大家玩同一种语言游戏,当我们说“用户”时,意思相同。嗯,我们不希望不得不花费精力将我们的利益相关者想要的东西翻译成我们必须对计算机做什么才能让他们满意。嗯,并且让我们的指示物与我们的概念相匹配。是的。嗯,尽可能紧密,因为再次强调,它永远不会完美,尤其是在您在两个人之间进行沟通时。但考虑到这是一个我们永远无法真正解决的问题,我们作为一个物种实际上做得相当好。我的灯泡永远不会和你的灯泡一样。说它们一样是没有意义的。嗯,但我们可以做得足够好,以构建有效的软件,构建令人满意的软件。嗯,并且进行有益的对话,让我们双方在信息上都更加丰富。结论。计算机很棒。我们可以以一种与他人无法沟通的方式与计算机沟通,因为我们可以确切地知道我们已经成功地将某些东西正确地传达给了它们。这就是代码,这就是代码的作用。嗯,当它至少是确定性的。沟通是困难的。如果您认为正确性在于让我们的灯泡是同一件事,那么从根本上说,这是不可能做到的,因为它们是不可比的。嗯,但通过实践和严谨的思考,我们可以做得更好。嗯,我所到的想法,以及我在这场演讲中试图分享的想法,可以帮助您在生活的各个方面,显然包括工作,也包括与他人交谈,并对事情出错时发生的情况有更好的了解。能够诊断您认为可能是意图或理解问题,并意识到它们实际上是关于沟通,并确保您所说的话能够按照您想要的方式传达。嗯,是的,这就是论点:沟通是困难的,但我们可以做得更好。希望我今天分享的一些内容能帮助您做到这一点。嗯,非常感谢您的时间和关注。另外,嗯,是的,在我们鼓掌之前,周五晚上,如果有人还在,我们有一个活动,我们的一些 NDC 演讲者正在举办。Pubconf 和 the line breakers。Pubconf 将会有很多 NDC 演讲者做有趣的演讲,有趣的歌曲,在它们之间,我们将会有两场 the line breakers 的表演,这是我和其他一些演讲者组成的乐队,我们翻唱摇滚歌曲、流行歌曲,并将它们变成关于软件的谈话,这真的非常有趣,它……是的,如果您觉得听起来不错,它会更好。所以,如果有人在,并且想参加,我们在克拉克恩韦尔的 Slaughtered Lamb,还有一些剩余的门票,那个二维码将带您到活动页面。嗯,我希望在那里见到大家。我希望这次演讲有用、有趣,并且您已准备好迎接 NDC 的另外两天精彩的会议。非常感谢您。