翻译不好,不过不能完全怪译者
2012-11-24
这本书的英文在技术书中绝对是奇葩(按这个词原来的意思,非贬义)。作者写得比较随性,有很多的口语和省略,这给翻译增加了很多难度。但即使如此,这本书的翻译也只能让我给中文版打四星了。
以下是一些错误或不妥之处:
84页第一幅图说明文字“编译器符号表具有一个地址9980”,原文“compiler symbol table has a (原文字体不同) as address 9980”,这里译者显然看错原文了,应译为“编译器符号表有符号a,表示地址9980”(a是前面定义的数组的标识符)。下面一副图,类似的一句“编译器符号表有一个符号p,它的地址为4624”,符号表中的符号哪里来的地址??原文不抄了,应译为“编译器符号表有符号p,表示地址4624”。
202页图下面的一段(很关键的内容!),整段译成了浆糊……我对照原文改了5处,懒得摘抄了……
204页左上方框,“对R3的步长进行调整”,看得我无比费解,R3的步长是什么东东??一看原文,立刻明白了,“scale R3”,不就是把R3乘上一个缩放系数(为了正确访问数组元素)嘛。
谁274页“通常第三种答案”一段的中文一遍能直接看懂的,请务必告诉我!!
275页编程挑战框中“重复进行,直到初始条件不满足为止”一句对应的原文为“repeat until the induction condition jumps out at you. ”翻译肯定是有问题的,但是要怎么理解和翻译,还真不太容易,下面是我的尝试:“重复进行,直到[归纳出“最后的答案”所依据的]归纳条件对你来说清晰明了为止。”
最后的“提示”,原文为“write the program, and extrapolate from there. ”我觉得这是作者说的一句俏皮话,extrapolate的原意为“to estimate something or form an opinion about something, using the facts that you have now and that are valid for one situation and supposing that they will be valid for the new one”,也就是从特殊的事实得到一般的结论和意见。而这里作者是在建议我们先根据一般的结论写出程序,然后运行程序,观察具体的运行实例,从而理解一般的结论。所以我试着将这句话翻译为:“直接编写程序,再实验,这将帮助你归纳出结论。”
276页,第一段“定位一个对象的表达式的编译器用语”原文是“compiler-talk for an expression that locates an object”。一遍读过去(特别是读者没有相关知识的话)绝对会理解成“定位(动词) + 一个对象的表达式 (名词短语)”。我想翻译成“编译器相关用语,说的是指定了一个对象的表达式”就清楚多了(你之前能看出来原来译文的那句话是在说左值嘛?)。
跨过三行代码的下一段“‘++x’表示取x的地址,增加它【哪个它?x?地址?】的内容,然后把值【哪个值?】放在寄存器中”,这绝对会让初学者一头雾水,原文是“ "++x" means take the location of x, increment the contents there, put this value in a register”。首先是“取x的地址”这一个译的不妥,然后中文翻译要加上很多东西才能清晰通顺:“++x”的意思是,获得x的在内存中的位置,增加该位置中保存的值,再把这个值放入寄存器中。