我知道这里已经有一些与该主题紧密相关的问题,但是没有一个以泛在语言为起点,因此我认为这是合理的。
对于那些不知道的人:泛在语言是定义(口头和书面)语言的概念,该语言在开发人员和领域专家中均会使用,以避免因翻译问题和误解而引起的不一致和误传。您将看到相同的术语出现在代码中,任何团队成员之间的对话,功能规范以及诸如此类的内容中。
因此,我想知道的是如何处理非英语领域中的泛在语言。
就个人而言,我极力主张完全用英语编写编程代码,包括注释,但当然不包括常量和资源。
但是,在非英语域中,我不得不做出以下决定:
- 用域的自然语言编写反映通用语言的代码。
- 将无处不在的语言翻译成英语,并停止以该领域的自然语言进行交流。
- 定义一个表,该表定义无所不在的语言如何翻译成英语。
这是基于这些选项的一些想法:
1)我强烈反对混合语言代码,即使用非英语的类型/成员/变量名称等进行编码。大多数编程语言都在很大程度上“促进”英语,并且大多数技术文献,设计模式名称等也是英语。因此,在大多数情况下,根本无法完全使用非英语语言编写代码,因此您最终还是会使用多种语言。
2)这将迫使领域专家开始以与UL等效的英语进行思考和交谈,这对他们而言可能并非自然而然,因此会严重阻碍沟通。
3)在这种情况下,开发人员以其母语与领域专家进行交流,而开发人员则以英语进行相互交流,最重要的是,他们使用UL的英语翻译编写代码。
我确定我不想选择第一个选项,并且我认为选项3比选项2更好。我是否缺少其他选择?
更新
今天,大约一年之后,我每天都在处理这个问题,我不得不说,选择3对我来说非常有效。
这并没有我最初担心的那么乏味,在与客户交谈时进行实时翻译也不是问题。
根据我的经验,我还发现以下优点是对的。
- 翻译UL使您更加关注定义UL甚至域本身,尤其是当您不知道如何翻译术语并且必须开始浏览词典等时。这甚至使我重新考虑了域建模决策几次。
- 它可以帮助您使您对英语的了解更加深刻。
- 显然,您的代码看起来更令人愉悦,而不是让人讨厌。