中国人学电脑,多数情况下是通过看中文版的资料书来学习的。但是有过学电脑,非凡是学习程序设计语言经历的读者(包括本人)都会有这样的体会:中文电脑书拿起来易如反掌,读起来却抓耳挠腮。原因之一就是书中有许多莫名其妙的中文专业术语。当然,它们都是从英文翻译过来的,只是翻译得太晦涩。
在我的记忆里,第一个让我念念不忘且深恶痛绝的中文专业术语是:“良基”。现在可能很少有人知道这个词。那是在我上大学时,在一门和人工智能有关的课程中,老师讲解“良基关系”。所谓“良基关系”就是满足几个条件的关系。我明白这几个条件的意思,当然算学会了“良基关系”,只是不明白为什么叫“良基”不叫“烧鸡”?“良基关系”好象很重要,因为老师“良基”了一个学期。许多年过去了,我现在还记得它。学期末的时候,要交一篇论文。我去查了英文资料,才知道满足那几个条件的关系是Well-Founded(基础良好),意思是设计良好、没有矛盾的关系。
我想我的同学应该和我一样,初见“良基”,一定会感到莫名其妙,相信本文的读者也有同感。因为它不是一个正常的中文名词,中文字典里找不到(可能是有人捏造出来的)。
Java是纯粹面向对象的程序设计语言,类似的语言还有C++等。假如你已经学过面向对象技术,还记得第一次看到“对象”一词的感觉吗?假如你没有学过,那么能看懂下面关于对象的解释吗?
“世界上是由对象组成的。例如人是对象、电脑是对象、猪是对象、泥巴也是对象......”。
上面是大意,是我第一次学习面向对象技术时,一本中文书上的说法。我不明白,所以整个一本书都没有看懂。直到我知道对象翻译自英文的Object(物体),才慢慢学会面向对象技术。上面的说法实际上的意思是:
“世界上是由物体组成的。例如人是物体、电脑是物体、猪是物体、泥巴是物体......”。
中文“专业”垃圾术语有几个特征。其一如“良基”,它是一个字典里和生活中闻所未闻的汉字组合:每个汉字都熟悉,但是拼在一起就不懂。其二如“对象”,它偏离了英文原意而导致误解,完全是张冠李戴。但是这些中文莫名其妙的术语对应的英文却都是简单的、生活化的英文单词,并非很晦涩。实际上,以我阅读英文资料的体会看,我并不认为有多少“专业”的英文计算机术语。相反,不知道译者出于何种原因,简单的英文单词翻译成中文后,就经常变得扑朔迷离、高深莫测,所以就成了中文“专业”术语。
下面主要以Java语言为例,列出一些中文计算机“术语”和它们对应的英文。
面向对象与Object-Oriented
Object-Oriented的意思是“对象为主的、对象主导的”,而“面向”的同义词是“面对”,丝毫没有主导的含义。此中文术语与“对象”的垃圾特征相同。
本人在业余时间去讲课,我的一个学员在课上嘲笑“对象”,指出“面向对象”也非善类。我从来没有想到质疑“面向对象”,所以忽然意识到,很多垃圾已经不知不觉成了我们学识的一部分了。
在此,我把“面向对象”列为本文的头条,以示对这位学员的感谢。
重载/重置与Overload/Override
在我上课讲Overload/Override前,我总是先问这两个单词的中文术语是什么,应该怎么念,结果答案还不止一个。有的说“重载= Overload”,有的说“重载=Override”。一般都把“重载”和“重置”的“重”念成“重新”的“重”。
Overload的原意是“超载”,指几个方法的名字相同,但是方法的参数不同。本人理解其意思可能就是一个名字承担了太多的功能,就像一个人要打几份工伺候几个老板一样,活太多,有些超载了。所以,Overload应该对应“重载”,而“重载”的“重”是“沉重”而不是“重新”的意思。有些书把Overload翻译为“过载”,值得赞扬。
Override的含义和Overwrite相同,其原意是“越过”、“跳过”,即是某事情无效。它在Java中,表示子类的方法覆盖了父类的同名方法。因此我猜测Override对应“重置”,也许是“重新安置”的缩写?所以,“重置”的“重”应该是“重新”的“重”,不是“沉重”的“重”,不要与“重载”混淆了。“重置”和“良基”的垃圾特征相同,“重载”还勉强算个正常名词。唉!每次我讲课,都要嚼半天舌头来解释这两个中文“专业”术语。
函数与Function
函数并非计算机专门术语。在中学时,数学课本上就有了函数一词。坦率地说,直到上大学,才知道“函数=Function(功能)”,不过目前仍然不明白为什么叫“函数”,是音译还是意译?所以虽然我知道它是垃圾,却不知道是哪一类,是“良基”的还是“对象”的,或者是某个垃圾新类型?假如说数学中的“函数”还和“数”多少有点关系的话,它可是和程序设计语言中的Function没有什么字面的关联。也许该把Function翻译为“函码”?
在Java中,可喜的是已经用method(方法)取代Function一词了,所以不必为解释“函数”再费口舌了。
显式/隐式与EXPlict/Implicit
一看“显式/隐式”,就知道它们和“良基”同类,也是翻遍大字典,都找不到的中文计算机术语。“显式”译自explict,意思是明显地、明白的,例如语句int x= 4的结果是x被赋值4,可以很“明显”地能够看出x被赋初值。而x假如是类的成员,那么int x的结果是x被赋初值0。这种赋初值不太轻易看出来,称为“隐式”赋值。隐式译自英文implicit,意思是隐含的、默认的。
线程与Thread
“线程”译自英文的Thread,假如查字典就知道它指“线”,比如缝衣服用的线。衣服上有纵横交错的很多线,好象程序的流程图一样,所以,Thread在英文中比喻程序执行的线路。例如,判定语句假如真,就走流程图的这条“线”,假如为假,那么就走另外一条“线”。因此Multi-Threads指得就是程序在运行时,有几条“线”上的代码同时在运行。而非多线程的程序在流程图上只能有一条线上的代码在运行:一段代码没有执行完,绝对不许执行另外的代码。顺便补充一句,以上的“说文解字”是作者自己的猜测(因此也是原创)。猜测得对不对不知道,但是比喻却与Thread在程序设计中的含义完全吻合。可见,“线程”的垃圾特征与“良基”相同。
数据报文与Datagram
UDP (User Datagram Protocol) 发送的数据称为Datagram。gram是表示重量的“克”,克在实际生活中是很小的重量单位,所以Datagram表示UDP发送接收数据的基本单位。每个Datagram独立发送,彼此没有关联,因此速度快,但是不可靠,所谓“欲速而不达”。
Datagram好象被某些书翻译成“数据报文”,猛一看还以为和拍电报有什么瓜葛呢,这就是作者第一次看到这个中文“术语”时的感觉。
套接字与Socket
网络中的一个闻名中文术语是“套接字”,这是个什么“字”?恐怕连第一个造这个“字”的人都不知道。
这个“字”译自英文的Socket,其原意是插座、插孔的意思。当两台电脑通过网络、电缆或者电话线等建立连接,可以互相通讯后,可以想象连接线是插在每个电脑的Socket中,尽管实际上电脑上并没有这样的物理部件。Socket是一种形象的比喻,可看作是实现电脑之间通讯的程序或者方法,和任何“字”都没有关系。
令牌与Token
Token的原意是“标记、记号、标志”。Token在Java的StreamTokenize中大体指流中有意义的内容,例如一个字母、一个数字都是一个Token,但是空格、回车则不是Token。
Token经常被翻译成“令牌”,例如所谓的“令牌网”。这听起来像古代打仗时下达作战命令的“令牌”,此中文与Token的原意有几成相似?
文件/正文/文档/归档与File/Text/Document/Archive
无论中文还是英文,这些术语都是很轻易混淆的。
依我的理解,File是“文件”,泛指计算机中存储的信息或者数据。
Text指文件的内容,通常是可以理解的字符,经常翻译为“正文”,但是我不知道“偏文”或者“非正文”是什么。例如本文的内容就是Text。而Text文件属于文件的一种,指其内容大体是可见的字符,没有格式化的信息。
Document大概被翻译为“文档”,它应该算File的一种,常用来说明什么,例如说明书就是Document。这个词在Html有关的内容中出现的比较多,例如“HTML文档”、“XML文档”等。
Archive的原意是“档案”,含义是有关某个主题、项目的一系列文件,例如中国每个人都有一份人事档案,这一份档案中有不止一份File或者Document。Java中有jar程序,用于压缩文件(一个或者多个),我想它应该是Java Archieve的缩写。我看到有的书把Archieve翻译为“归档”,可是“归档”听起来像动词,例如,“我有一份归档”是什么意思?
在写到这里时,正好听到电视里的一个药厂广告,广告词坚定而庄重:关注生命,健康人类。瞧,它把“健康”当动词用了,跟“归档”可谓半斤八两。
应用/实现与Appliaction/Implementation
这两个词的翻译比前面的“归档”稍好,但是仍然搞错了词性。“应用”和“实现”在正常的汉语中是动词,可是在电脑书中经常当名词。例如“本协议有了不少实现和应用”,是很多电脑书(非凡是翻译书)的说法,听起来不太像中国话。正常的语句应该是“本协议有了不少实现方法和实际应用的例子”。
总线与Bus
刚学计算机时就听说电脑有“总线”技术,但是老师和课本一直避而不谈“支线”在哪,直到看到Bus一词,才明白“支线”技术还没被发明出来。
反省、内省与Introspector
Introspector的原意是“向内看、观察和分析内部”,在Java中,它指分析一个类例如JavaBean的内部情况,了解其中有哪些属性、方法和事件。我看到的译文有“反省”和“内省”,听起来像干了坏事做检讨一样。
定制与Customization
“定制”是个闻名的中文计算机术语,几乎出现在每本电脑书中。“定制