DDD领域驱动设计批评文集欢迎加入“软件方法建模师”群 《软件方法》各章合集在重审《人月神话》中译本的过程中,发现一处较严重的误译。原文是:the first milepost is not reached until two months have elapsed.原译为:两个月之后,第一个里程碑没有达到。应改为:两个月之后,第一个里程碑才达到。回想责任,当年(2001-2002)审校时没有对着原文一句一句审,觉得译文无大的逻辑问题的地方就过了,有问题才标注并找原文对照。意思都译反了,还觉得没有大的逻辑问题吗?以当时的水平,还真的是没觉察。译得不对,首先是英语知识有缺陷(当然领域知识缺陷也会影响);看着译文没有觉得不对,那就是领域(此处即软件工程领域)知识有缺陷了——当时的知识不足以体会出作者真正想表达的意思。不过,本文的目的不是追究责任或者辩解,这方面内容参见此文:这回真要动刀子-征集《人月神话》中译本的翻译修正>>本文说的是由此联想到的学习英语的问题。如果不是已经熟练到习惯成自然,被not……until或类似的结构困扰是很常见的。如果从状态机的角度来理解,会很有帮助,如下图:
过去分词“not reached”相当于形容词,放在系动词be后面作表语。用状态机表达就是:
【先声明:我英语一般,以下内容如果有用词不当之处,烦请指出。】我们也可以把状态“not reached”换成一个不带not但意思差不多的“形容词”,例如“being worked on”。
因此,下面的句子应该也是可以的(吧?)。
比较两个状态名称,我们会发现,如果在过去分词和现在分词之间选择一个作为状态名称,应该优先选过去分词。像上面的例子,“not reached”优于“being worked on”,我们把输出的行为(用主动语态,原因可自行体会)补上就知道了: