语言这种东西经常让人产生误解。翻译过的语言经过了别人的一层理解,往往更容易让人云里雾里。这篇文章总结一下自己职业生涯里面遇到一些难懂的翻译,初见吓一跳的那种,莫名感觉高大上,实际上他们表示的内容可能并没有多艰深。
面向对象
英文原文 :object oriented
因为对象这个中文单词具有某个特殊含义,因此也成了一个梗。
最开始遇到的时候,真的不明所以。实际上当我真正理解了面向对象之后,我觉得这个翻译是没什么问题的。问题是面向和对象这两个词对初学者来说太抽象了。
那我们来具象的解释一下。
面向,字面意思就是脸对着谁。我们脸对着谁,那一般注意力就在谁嘛。谁让我们的眼睛只能看到前面呢。那这个面向其实就引申为,注意力在谁身上,注重的意思。
(你看上面这个图里面两个男的深情对视,哪还有功夫看旁边的美女。)
对象,常有两层意思,指行动或思考时作为目标的事物或特指恋爱的对方等含义(百度百科)。 其实这里要体现的重点是事物这个含义。台湾翻译成构件或许更直白一些。
那为什么要注重事物呢,因为事物这里和过程是相对的。好比一个电影,里面有人物和剧情。人物就可以类比成事物,剧情就类比成过程。这里的意思实际上就是注重人物,先不管剧情。这其实是一个编剧的技巧。对吧,哎,跟艺术还联系起来了。
这样有什么好处呢,编剧先有人物,人物就立体了,情节就自然了,故事就好发展了,甚至还可以搞IP了。周边同人也好发展了。因为这个人有了,他遇见谁就会发生怎样的故事。
面向对象编程也是一样,先有事物,完成他的功能和属性,那么他可以自然的在各种场景工作。甚至还能生孩子,搞变异是吧。对象有了,代码世界也就构建好了。
不知道这么一类比有没有变的好理解一些呢。
双亲委派模型
英文原文:parents delegate
这个就是彻彻底底的翻译问题了。parents在英文中是“父母”、“双亲”的意思,但这里其实表达的是“父母这一辈”的人的意思。实际上这个模型中,只是表达“父母这一辈”的class loader而已,并不是说真的有一个父亲的class loader和一个母亲class loader。正确的翻译应该是父委派模型。
oracle 官方文档关于 jvm 类加载机制所用的描述是:
The Java platform uses
a delegation model
for loading classes. The basic idea is thatevery class loader has a "parent" class loader.
When loading a class, a class loaderfirst "delegates" the search for the class to its parent class loader
before attempting to find the class itself.
翻译过来就是:
java 平台使用
委派模型
来加载类。 基本思想就是,每一个类加载器都有一个父加载器
, 当需要加载一个 class
时,首先把该 class 的查询和加载优先委派给父加载器进行
, 如果父加载器无法加载该 class, 再去尝试自行加载这个 class
使用了父委派模型后, 类随着它的类加载器, 一起具备了一种层级关系。由于父加载器总是拥有优先加载一个类的机会, 那么当不同的 child class loader 试图加载一个属于更高层级的parent class loader 加载范围的 class 时, 该请求总会被转发给对应的最高层级的父加载器, 返回一致的结果。
套接字
英文原文: socket
socket原意是插座。套接字是一种通信机制。
外国人用socket来命名这种通信机制是很自然的。因为通信要建立连接。作者是想表达建立网络连接和插插座一样,一方去“插”一方“被插”。
至于为啥要翻译成套接字这么一个奇怪的东西,据说至今还是一个谜。
个人揣度一下,套接,就像你买的扫帚的棍子,是不是套在一起就接起来了?这就表达了一个连接的意思。字呢,是一种表达信息的媒介。所以翻译者的意思应该是实现连接的媒介的意思。
可能猜的不对,但这么一解释感觉这个词看着都亲切了些!
句柄
英文原文:handle
句柄的英文是 handle。在英文中,有操作、处理、控制之类的意义。作为一个名词时,是指某个中间媒介,通过这个中间媒介可控制、操作某样东西。这样说有点抽象,举个例子。door handle 是指门把手,通过门把手可以去控制门,但 door handle 并非 door 本身,只是一个中间媒介。又比如 knife handle 是刀柄,通过刀柄可以使用刀。
我们常说扛把子,对吧,拿着handle的那个人就是大哥,可以操作小弟。
让人难理解的是这个句。为啥叫句柄啊?明明很多时候操作的不是句子。好吧,还是翻译的锅。
David Gries所著的《Compiler Construction for Digital Computer》(1971)有句话
A handle of any sentential form is a leftmost simple phrase.
该书中译本,《数字计算机的编译程序构造》(仲萃豪译, 1976 版)翻译成
任一句型的句柄就是此句型的最左简单短语。
这可能是句柄一词最早的出处。这里确实是在讨论句子。在这里句柄是个意译的合成词,两个字分拆开,“句柄”中的“柄”,用法就类似于,“刀柄”中的“柄”。用在此处是适当的。但以后将各种资源 handle, 都翻译成句柄时,就容易导致误解了。
具体到代码实现,handle 通常是某个数字标记,通过标记操作资源。这个标记在不同的场合有不同的叫法,有时叫 ID,有时叫描述符(descriptor)。在 Windows 平台,就叫各种 handle 了。
用 handle 如何操作真正的资源,是实现的细节。handle 通常被实现为整数,也可以被实现成其他类型。
广义来说,指针也是某种 handle,可以操作对象。但实际语境中,指针跟句柄是有区别的。handle可以理解为指针之上的一个层级。因为直接操作指针比较危险,并且也不是所有的语言都有指针,这也是为什么有些场景不用指针而用handle的原因。
宏
英文原文:macro
还记得最开始学C语言的时候,对这个宏就觉得莫名其妙,觉得很高大上,毕竟宏嘛,大嘛。查了一下维基百科才知道是这么来的:
Macros are used to make a sequence of computing instructions available to the programmer as a single program statement, making the programming task less tedious and less error-prone.[2][3] (Thus, they are called "macros" because a "big" block of code can be expanded from a "small" sequence of characters.
翻译一下就是:
宏用来使得一系列的指令变成单个语句,使得编程不那么乏味以及减少出错。(所以他们被称为‘宏’,因为他们可以从一些很少的语句展开成很大的一个代码块)。
这个应该是一个英文直译了。没毛病。原命名作者的思维太跳脱,是我没跟上。
小结
很多时候,学一个东西会被看起来花里胡哨的名词吓到,实际上名字嘛,只是一个代号而已。管你是叫翠花还是tracy,长的好看不是一样能当网红 - 。- 。就我个人而言,编程大多是应用层面的东西,说真的比物理、数学界的概念好理解多了。
这篇文章在我的博客里算是很用心的一篇了- 。-(还配了图)。写的过程中还是有不少收获,确实输出也是一种学习啊。也参考了很多文章,都在参考里拉。
参考
Java 中的双亲委派的“双”怎么理解 ?https://www.zhihu.com/question/288949359
面试题之窒息翻译:类加载机制的双亲委派(正解:父委派模型):https://blog.csdn.net/lengxiao1993/article/details/86689331
Socket为什么要翻译成套接字?https://www.zhihu.com/question/21383903/answer/64103663
句柄是什么?https://www.zhihu.com/question/27656256/answer/943130123