【本文来自《鲁棒性这个翻译就在祸害计算机的学生》评论区,标题为小编添加】
鲁棒性并不是普通的翻译词,如果是普通的翻译,大家不用就过去了,它偏偏是官方指定的翻译,出现在课本与考试中,这个才让人气愤。
socket 译接口没什么问题,bug不就是错误吗,查错与debug,也没什么问题。
计算机这方面,民间不一定会用官方翻译,哪个流传得广就会用哪个,早期有多种翻译很正常,官方的不合理也不能强求。考试中……这行业没人会重视概念填空类型的考试吧,混个过就行了。而且偶尔有名词不合理对正式学过的人来说是影响最小的,第一次见没法理解才是影响最大的。真说考试的话问题可就多了,见过最过分的是,课本把overload和override都译成重载然后再让你辨析两者有什么区别,纯属有病,自找麻烦。
bug的问题在于,有句话说“不是bug,是特性”,什么算是bug其实是很有争议的问题,导致会有不同的理论去描述bug和相关的情况,但各自范围有所不同,会定义不同的词来代表。随便翻译的话潜在地容易撞上近义词,带来误解。比如说defect缺陷、glitch故障、vulnerability漏洞。然后还有与bug范围完全不同,但在自然语言中属于近义词的概念,比如error错误(一般指明确报错,有可能是输入的内容错误,不一定是bug,有bug的时候不一定会报错)、exception异常、failure失败。偶尔不正式地出现fault错误、mistake过失等。bug是原意在这里面最随意的,不接受字面意思翻译的话就不好找别的翻译了。
socket我本来也觉得随便译个插口、插槽就行了,只是没公认而已。查了一下之后感觉情况也比较复杂。socket有原意和引申义,原意是网络协议里的特别具体的技术名词,在通用的思想中没有太大的意义,在具体的协议里就像专有名词一样具体,很难根据含义重新取名;引申义是操作网络连接的对象或其它形式的接口,由于其他地方不常用socket这个词,几乎就成为网络相关操作的代称了。
TCP和UDP之中的原意是地址、端口的组合,有时也指协议和发送方、接收方双方的地址、端口的组合。如果现在有人随便重新发明个类似的协议,可能会根据功能随便想出来个“连接描述符”一类的更具体的名字。但问题是UDP按照定义是“无连接”的,在通用的思想中你管它叫只发送一次数据的临时连接也行,于是就叫连接描述符也行,但在具体的协议的原始定义里就管它叫无连接的,为了前后一致,在里面用到的东西名字有“连接”就是不合适。反过来要是根据成分来定义,如果有人随便重新发明个类似的协议,广义地考虑,完全可能会把地址和端口的组合称为地址,也可以称为端口,两者本来其实也算是近义词,但就是在已有的具体的协议里拆分出了地址和端口的概念,两者的组合也因此而没办法再叫地址或端口,新发明一个词别人也没办法确定你是指地址、端口还是两者的组合,只好尽量用原词。
引申义相当于如果原意是“X描述符”,那么还原出来的X。不严谨地说就叫连接就行,但按照定义不能叫连接。新发明一个比如“通道”“接口”的词也容易撞上具体场合下的其他术语。而且现在大部分人对这个词的理解也已经不是通道或接口,而是专指互联网协议的处于连接之上的接口。先说原意再说引申义,是因为套接字一词的字,明显是专指原意的,引申之后更怪了。感觉后来的人也不太明白套接字一词的构词逻辑,套接的词性都不知道,只好原样使用,也没有删掉字。
所以问题其实和bug一样,有太多近义词。好在原意插槽没被占用,意思也不怪,直译也算是凑合能用。
最近一直有人说的token,也有一些近义词,比如word词、symbol符号等,在编译的领域几乎完全是同一个意思,混用也不会带来误解;在自然语言处理中会带来误解,所以发明新词来翻译。说不定bug和socket也有类似的解决办法。