在重审《人月神话》中译本的过程中,发现一处较严重的误译。原文是: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”,我们把输出的行为(用主动语态,原因可自行体会)补上就知道了:
可以看到,如果用现在分词“**中”作为状态名称,状态和状态的内部活动可能会重名。但是,现在分词作为状态名称并不是最差的。最差的状态名称是“to ”(待),因为它强烈暗示(耦合)了允许接收的事件。你想想,你的状态名字都叫“待审核”了,不就已经暗示这个状态下能接收的事件就是“审核”了吗!同样,虽然过去分词>现在分词>不定式,但过去分词也并非最佳选择。最佳选择是描述性形容词,即:描述性形容词>过去分词>现在分词>不定式注意,这几种都可以用作状态名称,只不过如果前面的选项有合适的名称,优先选用。我们用人举例,玉凤比较丑,她看上的人类高质量男性看不上她,她想变美。变美有很多条路线,可能有(1)连续三年坚持锻炼注意饮食早点睡觉(2)整形(3)外星基因改造玉凤选择了整形。整形完毕后,玉凤拼命放电,果然有人类高质量男性和她结了婚。我们把这个故事相关的概念画成不同的状态机图:
①最佳。没有暗示进入或离开的事件,要变美,可以整形,可以锻炼,也可以基因改造;美了,可以结婚,也可以干别的。②不好。暗示了进入的事件,但比④要好,毕竟“整形”是已经发生过的,“已整形”至少没有暗示任何离开的事件。③更不好。有把状态和状态下的行为混淆的可能,或者说,把状态和内部行为绑定,不过,没有暗示进入或离开的事件。④最不好。暗示了离开的事件,“待结婚”状态下接收的事件就是“结婚”呗。可能细心的同学会发现,②③④涉及的概念都是3个:整形、放电、结婚,其中一个刷了两遍,而号称“最佳”的①却多了一个“美”,这是不是多余?对的,状态就是多出来的概念。至于为什么需要“美”这样的多余概念,可以参见我的另一篇文章《DDD话语批评之一:评“状态和事件本质相同”》>>