非英语域中的编程和通用语言(DDD)


64

我知道这里已经有一些与该主题紧密相关的问题,但是没有一个以泛在语言为起点,因此我认为这是合理的。

对于那些不知道的人:泛在语言是定义(口头和书面)语言的概念,该语言在开发人员和领域专家中均会使用,以避免因翻译问题和误解而引起的不一致和误传。您将看到相同的术语出现在代码中,任何团队成员之间的对话,功能规范以及诸如此类的内容中。

因此,我想知道的是如何处理非英语领域中的泛在语言。

就个人而言,我极力主张完全用英语编写编程代码,包括注释,但当然不包括常量和资源。

但是,在非英语域中,我不得不做出以下决定:

  1. 用域的自然语言编写反映通用语言的代码。
  2. 将无处不在的语言翻译成英语,并停止以该领域的自然语言进行交流。
  3. 定义一个表,该表定义无所不在的语言如何翻译成英语。

这是基于这些选项的一些想法:

1)我强烈反对混合语言代码,即使用非英语的类型/成员/变量名称等进行编码。大多数编程语言都在很大程度上“促进”英语,并且大多数技术文献,设计模式名称等也是英语。因此,在大多数情况下,根本无法完全使用非英语语言编写代码,因此您最终还是会使用多种语言。

2)这将迫使领域专家开始以与UL等效的英语进行思考和交谈,这对他们而言可能并非自然而然,因此会严重阻碍沟通。

3)在这种情况下,开发人员以其母语与领域专家进行交流,而开发人员则以英语进行相互交流,最重要的是,他们使用UL的英语翻译编写代码。

我确定我不想选择第一个选项,并且我认为选项3比选项2更好。我是否缺少其他选择?

更新

今天,大约一年之后,我每天都在处理这个问题,我不得不说,选择3对我来说非常有效。

这并没有我最初担心的那么乏味,在与客户交谈时进行实时翻译也不是问题。

根据我的经验,我还发现以下优点是对的。

  • 翻译UL使您更加关注定义UL甚至域本身,尤其是当您不知道如何翻译术语并且必须开始浏览词典等时。这甚至使我重新考虑了域建模决策几次。
  • 它可以帮助您使您对英语的了解更加深刻。
  • 显然,您的代码看起来更令人愉悦,而不是让人讨厌。

9
+1特殊问题。我们进行了大量无处不在的语言开发,这对我们来说是一个大问题。我期待着良好的答复!
CesarGon 2011年

2
我认为您的分析是完美的,您已经考虑了整个过程。很难回答这个问题,因为它很大程度上取决于不同的项目方案。例如,如果您正在为一家律师事务所开发软件,那么您可能会发现很难在代码中使用英语中的所有单词,因为您是开发人员并且并不真正知道如何翻译所有术语。选项1)有时就是答案。
Alex

我今年要去比利时开始在比利时工作,甚至都没有想到。看到他们采取的路线将是“有趣的”,特别是因为有人告诉我某些路线已经外包(我认为是印度)。
Phil N DeBlanc '18

很好的问题,感谢您的更新-我也支持选项3,很高兴看到一些确认。
lutzh

Answers:


11

我经常遇到这个问题,我认为答案是:“没有一个答案适用于所有情况。”

但是请记住,无处不在的语言本身并不是目标。它是一种工具,可以增强团队与领域专家之间的沟通,并在代码,测试和对话中增强已实现模型的概念一致性。

如果您能毫不含糊地讲UL,那么您就走对了。如果您和您的同伴不断地从代码转换为对话或从概念转换为概念,那么您可能就偏离了轨道。

实际上,并非所有领域都是平等的,也不是领域专家。某些领域无论如何都有很多英语术语(例如,技术驱动领域),因此选择全英语听起来很合理。但是,某些文化可能会影响这一选择(想到法国),并且英语术语的传播因国家/地区而异。在其他某些领域(法律中仅举一例),没有翻译某些术语的方法。否则,翻译将使Domain Expert变得更加困难。

总的来说,我们对领域专家所说的内容更感兴趣。因此,我们希望为他们提供便利。否则,他们只能参加一个UML类并阅读我们的图表(这是一个笑话)。因此,这里唯一真正的建议是:“请注意Domain Expert的行为”,如果他们参与了对话并且对话进行顺利,则您可能会按原样行事,请保持语言。这可能会给团队带来一些额外的工作,但这很好。作为开发人员,我们受过一定的训练,可以在上下文中学习具有特定含义的单词。

奇怪的是,这个问题总是伴随着这样的假设,即所有代码都需要说一种语言。这可能也会受到挑战。我不是英语母语人士,而且对外国语言的了解也不是一成不变的:谈论姓名姓氏汽车等时,我的大脑会快速移动;谈论邮政编码时,我会漏掉一些细节;谈论贷款时,我会放慢脚步,肯定会问在谈论抵押贷款时提供令人放心的解释。

因此,再次选择最佳组合,它将使关键对话流程畅通无阻,并从Domain Expert提供最大量的信息和反馈。


1
好吧,邮政编码不是一个通用的英语单词(应该是邮政编码)。一个邮政编码是特定于美国邮政服务。
TRiG 2012年

1
感谢您的更正。...这可能是我所缺少的细节之一;-)
ZioBrando 2012年

4

我通常将某些技术用语视为中性语言,即使有其他语言的翻译也是如此。

例如,当谈论德语编码时,即使有德语等效,我仍然使用英语技术词汇,就好像它们是德语单词一样。

在您的情况下,我会做相反的事情。将某些技术单词从您的母语导入英语,就像几个世纪以来导入的外国单词一样。使他们的语法行为像英语单词。一开始感觉很奇怪,但是您会习惯的。


1
那使我想起了一群听到我讨论他们工作的俘虏。这是我在挪威的一些波兰工人。所有人都说英语,但是大多数与建筑和工具有关的词都是挪威语。听起来很傻,但沟通很好。
Grastveit 2011年

3

我同意大多数编程语言“呼吸”英语的评论,这在多语言开发工作中始终成为一个问题。

通常我会以您的编程团队的语言获得UL

过去我们所做的是组成新词,以更好地表达领域主题。在法语/英语项目中,组合词主要以英语为基础,但具有法国风味(不是很难,因为许多英语单词都是法语),但这可以适用于任何语言组合

例如

“数量博伊斯”

英文为“ Amount of wood”或“ quantity of wood”,法文为“quantitéde bois”,因此对于两个讲者来说都足够接近。这样可以减少每个说话者必须学习的新单词数量

您的域UL有多大?这成为问题。如果少于100个关键短语,则可以使用混合的组合样式语言,如果较大,我会坚持使用开发人员的主要语言,因为他们通常必须更加认真地处理它

还发布Wiki词典/同义词库,以供所有人参考(因此也没有任何理由理解)


3

我最近在瑞士的一个DDD项目中工作,其领域是税收(特别是增值税和另一种税收……不容易翻译成英语……)。

他们选择了第一个选项:德语的UL,德语的代码中也使用了UL。

在从事此项目之前,对于混合语言代码,我的厌恶程度与您完全相同。我(还是)喜欢用英语讲一切,尽管我不是英语母语人士。我也不是说德语的人。因此,当我开始探索代码库时,我感到非常恐惧。

在对该项目进行了一年的工作之后,我必须承认,我认为在这种情况下这是正确的决定(我们也可以使用法语或意大利语,其他官方的瑞士语言,但是该项目中的大多数参与者都是德国人扬声器)。

域名的许多特定术语实际上并不能以有意义的方式翻译成英文。无论如何,我必须学习德语术语才能与团队的其他成员进行交流。同时还必须学习英语翻译本来会比较麻烦,因为无论如何都是凭空发明的。

所以我想这真的取决于域名。某些域名真的很难翻译成英文,也没有多大意义。

它也可能取决于本地语言。德语是一种语言,您可以用与英语大致相同的方式(尤其是相同的顺序)来撰写单词。例如,税收申报将为Steuerdeklaration。没有惊人的不同。

例如,我不知道该如何在法语中使用同等的班级名称,自然的术语是“déclarationd'impôts”,顺序相反,中间加一个介词...一个简单的例子。如果有人有使用拉丁语(法语,西班牙语,意大利语,葡萄牙语...)的这种命名经验,我将非常感兴趣!

另一个挑战是复数形式,在德语中有时很难将其与单数区分开(而在英语中,几乎总是以s结尾)。

重音字符还可以,因为在德语中它们都具有非重音等价字符(ü- > ue等等)。这是法国人更成问题的另一点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.