关于计算机术语的翻译这个问题,我一直在思考这个问题,我也一直在做笔记,希望能够凑足足够的资料的思考,对这个问题好好分析一下。 虽然我在谈论中英文术语翻译的事儿,在这里,我想提个人观点:读技术书籍,若有英文版,就不要读中文版。 为什么? 借用 three Idiots 中校长的一句话,就是“We do not have all day."
syntax vs grammar
在学习编译原理的时候,我经常读到一个术语“形式文法”,我一直没有找出英语中有对应”文法“的单词。后来,我才明白是对应上英语的“formal grammer"。 但是,如果说grammer 翻译为文法,那么“语法”对应的英文又是什么呢? 所以,我认为词语错误翻译,所谓”文法“应该是”语法“。 至少在计算机语言分析中如此。
我们来看看何为syntax。
oxford dictionary 对syntax 的解释: The arrangement of words and phrases to create well-formed sentences in a language: wikipedia 的解释: "the study of the principles and processes by which sentences are constructed in particular languages."
从上面的定义来看, syntax 的含义局限在 sentence 范围内。说到 syntax 的时候, 我们的讨论对象应该是只有一个句号的一个句子。
接下来,我们来看看什么是“语法”(grammar)。
oxford dictionary对 grammar 的解释: The whole system and structure of a language or of languages in general, usually taken as consisting of syntax and morphology (including inflections) and sometimes also phonology and semantics. 在Computing 分支的解释: A set of rules governing what strings are valid or allowable in a language or text. wikipedia 的解释: In linguistics, grammar is the set of structural rules governing the composition of clauses, phrases, and words in any given natural language. The term refers also to the study of such rules, and this field includes morphology, syntax, and phonology, often complemented by phonetics, semantics, and pragmatics.
可以看到,grammar 的概念要大。
所以,我们平常编译程序的时候报错“syntax error”, 应该翻译"句法错误“。 虽然 syntax error 是 grammer error的一种,但是,如果一个赋值语句少了后面的分号,就说那是“语法错误”,总感觉不舒服。
在程序编译过程中,syntax 是 词法解析阶段的术语,grammar 是 语义解析阶段的术语。熟悉BNF 的同学都知道,grammar 可以产生大篇的程序文本。 Lua 的 EBNF 中for 的grammar 是 stat ::= for Name ‘=’ exp ‘,’ exp [‘,’ exp] do block end 这个grammar 可以递归的写出无穷的语句。
bing dict 给出的翻译是“句法;句法规则;语构”, 看起来是靠谱的。youdao 给出的是 “ 语法;句法;有秩序的排列”,这个就有问题了。 我觉得,有道还需要不短的时间才能把这样的不准确的翻译修改过来,用这样不准确的参考,会浪费一些时间的。这也是为什么推荐直接阅读英文的原因之一。
我认为,这个翻译长久错误的归因于我们广大的初高中英语老师。在我们学英语的时候,如果我们利用一个词语造句,造错了,英语老师会告诉你,“你这语法错了”。 但是,他应该说“句法错了“, 这是 syntax error。谁有兴趣的话, 可以联系一下初高中的英语老师, 让他们讲讲到底什么是grammar, 什么是 syntax。
socket
我从来没有按照汉字的表面意思来理解这个术语。在我的经验中,我从来都是直接把“套接字”直接映射到“socket”。 然后想像下面这幅图:
我根本不想理会为什么会被翻译成这样。
robustness
说烂了,不发表意见。
Linear Algebra
linear 我们一般翻译为"线性的", 如Linear Algebra 是“线性代数”, oxford dictionary 给出的翻译是“(Mathematics )Able to be represented by a straight line on a graph”。的确也是跟线有关的,对吧,但是,人家明明说的是 "straight line", 我们却翻译为“线”,这中间是存在差别的,这明显是泛化了含意。 我刚开始学习Linear Algebra 的时候,看到“线性代数”这个中文翻译, 脑海里总在闪现着 y = 2x + 1, y = x * x, y = log x 等等各种函数的图像,因为他们都可以在欧几里得坐标系内用线表示出来嘛。 大学毕业了,我询问了身边的的多名同学,“当我说出线性代数,你立马在脑海里浮现的画面是什么?赶快说“。他们都说了斜线,抛物线,有人说只有矩阵。 看来,大家都基础课程忘了。 我们来看一下wikipedia 对该术语的解释:Linear algebra is the branch of mathematics concerning vector spaces and linear mappings between such spaces. It includes the study of lines, planes, and subspaces, but is also concerned with properties common to all vector spaces. 我也不知道翻译成什么才好,慢慢想吧。
Override vs Overload
我对于 “重写” 这样的翻译总是感觉有点别扭的, 当然,如果你不感到别扭, 那当然最好, 因为你的头脑中没有影响理解这几词语的杂念, 这样就能够保证理解的一致性了。
对于我来说, 我倾向于把“重写”理解为“重新写一遍”, 就是再做一次相同的事情。 虽然, 在程序书写上, 这种“重新写 一遍” 正好切合了override 的含义, “重写”本身不是一个计算机术语,我们生活中也用,如小明读三年级,练习写字,写得非常糟糕,他妈妈就会对他说“把作业重写一次”。 这样的话就会有一个问题,我们如何区分在生活用语中的含义和在计算机术语中的含义。我思考了这个问题很久,很久, 真的很久, 在学校学习Java的时候就开始了。 这段时间才有些许头绪。 就是最好不要有重复。
我个人认同的翻译是“覆写",取其覆盖,再次写的含义。
formal system
formal 翻译”形式化的“是有问题的。 oxford dictionary 对 formal 的解释有三条:
- Done in accordance with convention or etiquette; suitable for or constituting an official or important occasion:
- Officially sanctioned or recognized:
- Of or concerned with outward form or appearance as distinct from content:
“形式上的” 这个翻译取第三的含义。 如,我们说 ”这个活动只是走个形式“, 是说”活动的外观,样子,流程“是按照一般的规矩来的, 但是, 活动内容不是我们关心的,不管其相关与否。
词根来源: late Middle English: from Latin formalis, from forma 'shape, mould' (see form).
shape, ”形状“, 是译词中”形“的来源,是词汇最为核心的原始的含义,既然词根中都有”行状“这个含义, 翻译为 ”形式上的“ 也无可厚非了,对吧!那么,“形式化系统”到底是什么意思呢?
wikipedia 对 formal 的解释: (adj.) relating to an established hierarchy, procedure or set of specific behaviors. 说一个system 是 formal,就是说 这个system 经过了一定的时间,形成了 hierarchy,具有一定的合理性。 这个含义和”走个形式“有半毛钱关系。
同理, "well-formed" 被翻译为” 形式良好“也是不准确的的, well-formed 是对一个过程的描述,而不是对一个东西的静态描述,意指”在一个过程中,被良好的构造出了形状、结构“。
http://en.wikipedia.org/wiki/Formal_system
lambda
lambda 翻译为 “匿名函数”。 我觉得这是非常有问题的一个翻译, 有本质的错误。 体现了我们的潜意识中认为 有名字的函数才是正统, 这样没有名字的函数是trick, 是一种少量的特殊的情况。 我的观点正好相反, 借用老子的一句话来表达我的观点:“无名天地之始,有名万物之母”。 无名发生在有名之前,无名, 恰恰是正常的, 才是最为普遍的情况,有名,才是一种少数的特殊情况。 这样看来, 翻译为匿名,就不对了, 参看wiki, 有一处 anonymous function 这样的表述。 如果被翻译为”匿名“, 也就是认为这个东西本质上还是有名字的,( 当然,如果从语言实现的角度上看, lambda 实体也是有名字的 ), 但是, 在一般的编程语言中,lambda 多是一个value,可以被传递的,而不是name。
我的看法就是建议“lambda" 被翻译为 “无名函数” 或者 “不具名函数”。
http://en.wikipedia.org/wiki/Lambda_calculus
sprite
这个翻译很蛋疼的, 因为对不熟悉的人来说, 很难以理解, 对熟悉的人来说非常贴切, 无可替换. 这岂不是自相矛盾嘛! 我觉得,这个词语的翻译代表了很多类似的词汇。
oxford 对 sprite 的翻译是:
1, An elf or fairy.
2, A computer graphic which may be moved on-screen and otherwise manipulated as a single entity.
虽然说,把一个graphic 想像成为一个在二维世界的 elf,也挺生动的。但是,如果把 “精灵” 这个词写到书里面去,就有点难以接受了。
翻译讲求“信达雅”,如果连这个“信”都达不到,就别翻译了,保留原文吧。