大概三年前,本人参与了一本技术书籍的翻译,书籍是《The Design and Implementation of the FreeBSD Operating System (2nd Edition)》,中文名为《FreeBSD操作系统设计与实现(第二版)》。19年那会我主要精力在做车载语音交互,花了很多时间做离线语音交互系统的性能优化,那段时间集中看了一些计算机体系结构的书籍,比如《计算机体系结构》这本书。
操作系统的书籍从本科开始就买过很多,当时看到《FreeBSD操作系统设计与实现》这本书,第一版有中文版本,但是第二版只有英文版,所以就买了一本英文版看。看完感兴趣的章节后,觉得受益不小,因此在朋友圈中推荐了下这本书。
这本书和大部分源码分析的内核书籍不同,这本书更强调的是“设计与实现”,其中的实现也是high level的,而不是具体代码层面的。说实话,有经验的工程师更需要的是问题分析,解决思路的选择和工程上做的折衷方案,而不是各种代码细节。原因在于,解决思路有了,对有经验的工程师而言,怎么实现都是苦力活罢了。本书搭配Hennessy大佬的《计算机体系结构:量化研究方法》,熟悉一下软硬件接口,以及硬件层面的性能改进技术,基本上内核代码怎么实现就没太大必要知道了。尤其对应用开发工程师而言(用户态程序开发者),对内核的实现细节做到如数家珍帮助不一定很大,反而熟悉内核的设计思路,背后的软件工程思想,知道What和Why,可能对日常工作更有帮助。
下面摘抄几条网上对这本书的评价,供大家参考:
The content of the book is highly technical and is dense in operating system concepts. It is written with an excellent academic style.
Compared to others classic "Internals" books, it focuses more on the design and algorithmic concepts and less on the specific detailed structures of the FreeBSD kernel.
The design and implementation of the FreeBSD operating system book fits perfectly for an advanced operating system course, due to the academic style of presentation and to the fact that it covers new contemporary topics, as for example the ZFS file system, and an elaborate presentation of the networking architecture.
Outstanding technical writing. Somehow the authors manage to make dense technical topics readable. A worthwhile update of the previous version. For example, chapter 10 has an excellent description of ZFS in about 25 pages -- a monumental change to FreeBSD involving an extra 250,000 lines of code.
Many technical books focus on "how". There are plenty of excellent biographical accounts of teams or individuals -- the "who". This book focuses more on the "what" and, more importantly, the "why". Not everyone needs to have this depth of understanding, but when you've hit a plateau in understanding infrastructure, this book will definitely help you "level up". Even if you're not a big user of FreeBSD there is a ton of useful information about a wide variety of topics relevant to other Unix/Linux systems, networking, storage, and even Windows.
当时发了这条朋友圈后,北大师兄郭立峰刚好看到,就说他也许可以联系下出版社,看看是否有机会一起翻译下。当时郭师兄已经出版过一本操作系统方面的书籍,也参与翻译过一本操作系统内核书籍。之后几天,郭师兄和北大的陈向群教授联系了下,因此促成了这次翻译。
翻译大概花了半年左右的时间,我负责5,6,13,14四个章节,涉及安全、存储管理和网络协议等话题。不过成书在2021年11月才由机械工业出版社出版。下面是翻译版本的链接,有兴趣的朋友可以买来看看。不过英文好的话,还是推荐买本英文书。虽然我们也花了一些时间消化书籍,以尽可能翻译准确,不过毕竟我不像其他两位译者,本身并不是专业从事操作系统研发的,翻译不当之处应该不少。
言归正传,本文来简单聊聊我第一次参与技术书籍翻译的体验,尤其是翻译的困难之处。
平时很多书籍我都会买英文版,或者是中英文两个版本都买回来,优先看中文版,主要是阅读中文的速度更快。遇到中文看不太明白的地方,也会看看英文,增强理解。阅读的时候使用英文书,虽然没有太大的压力,但是往往阅读过程“不求甚解”,尤其是复杂的句子,扫一眼,大概理解理解就过了。实际真正翻译起来的时候,往往就有捉襟见肘的感觉。之前简单翻译了几篇短文,感觉还没那么强烈,比如之前我曾经翻译过jemalloc 的文章《【译】使用jemalloc实现可扩展的内存分配》,整体翻译过程还算顺畅,这次要翻译点操作系统内核的章节,处处抓襟见肘。难点有几个:
1,没有吃透原文很难翻译好。一般读书都是囫囵吞枣,或者挑点自己感兴趣的话题和章节,有选择性地阅读和吸收。翻译工作却不行,哪里没搞明白,翻译得好不好自己心知肚明。也就是说,阅读的时候,往往是选择工作中经常接触的章节进行学习,因为相关性比较高。而那些不太相关的章节,往往选择性略过,或者只是泛泛而读,毕竟不像学生时代,为了应付考试不能错过任何一个知识点,因此也就谈不上深刻理解。而翻译自己不擅长的方向,所能做的只有保持学习心态,不要半桶水就上,见笑方家。但是翻译毕竟不是正经工作,无法投入太多时间去“切磋琢磨”,毕竟翻译在国内基本没什么回报,不过是“重在参与”罢了。
2,一些英文句子语法结构复杂。技术英文本来单词量比较少,单词和术语成为拦路虎的概率倒是不高,奈何经常见到巨复杂的语法结构,翻译起来直让人抓耳挠腮。要翻译为简单通顺的中文,实在是需要反复推敲琢磨,先拆散再重构。FreeBSD这本书里,有相当比例的句子,语法结构复杂,让我初读下来费解。有一些地方我参考了第一版的翻译,但是第一版的翻译质量远非尽善尽美,看着他人的译稿,反而更懵了。不过有时候推敲一两遍,整明白了作者想表达的意思并使用流畅的中文翻译出来后,确实有“哦,原来如此”,“啊,终于这里不会再误导读者了”的兴奋时刻。
3,中英术语的关系不容易处理。偶尔插入一些英文术语,留而不译,这固然很精准,但是读起来毕竟文气差了一些。之前阅读侯捷的很多技术翻译书,虽然觉得他的翻译精准,但是英文单词满篇都是,总觉得阅读下来不够酣畅,至少英文夹杂过多,看起来不太像地道的中文书。搜索网上信息,经常能看到讨论某个术语的翻译,很多讨论者都心有戚戚。不过很多术语,其实业界并没有通行的翻译,而是每个高校的教材或者每本译作都有自己的处理。有时候某个术语翻译成A版本,虽然也能理解,但是如果和业界的通行翻译不同,就会加大分歧。比如在翻译信息安全相关章节的时候,我就参考了FreeBSD中文社区的术语,尽可能和社区的翻译趋同。
一些技术术语的翻译实在是磨人心性。好的时候,可能有翻译先例在前,但是经常有不尽如人意的情况。不幸的时候,Google搜索半天也找不到翻译先例,只能推敲琢磨一翻,硬着头皮自己上。这种创造性的翻译,就更加没底了,有时候会出现这样的情况:翻着成这个词也行,那个词也不赖,但是好像都缺点儿意思。
4,有些章节篇幅虽然不大,信息量却大得吓人。比如信息安全部分,虽然我本科和研究生的专业都是信息安全,不过翻译起内核中信息安全相关章节,也是被逼得抓破脑袋,只好做各种补课工作。下面是本书安全相关的章节目录,基本上囊括了操作系统中所有的安全话题,从安全模型,到Jails、安全审计,到磁盘加密等,不一而足。
Chapter
5. Security
5.1 Operating-System Security
5.2Security Model
5.3 Process Credentials
5.4 Users and Groups
5.5 Privilege Model
5.6 Interprocess Access Control
5.7 Discretionary Access Control
5.8 Capsicum Capability Model
5.9 Jails
5.10 Mandatory Access-Control Framework
5.11 Security Event Auditing
5.12 Cryptographic Services
5.13 GELI Full-Disk Encryption
5,脱离代码的文字,很难精准理解。因为本书是“设计与实现”,而不是仅仅停留在“操作系统概念”上,所以其实很多篇幅是和实现相关的。但是阅读代码又谈何容易。内核代码大几百万行,甚至千万行规模,要快速检索到书中文字对应的代码文件、数据结构、函数实现,绝非易事。更何况,还需要读懂代码,并和书籍内容相互参考。这块我并不能做到熟读代码,没那个精力,也不一定有那个能力。翻译过程中,我倒是花了一定的时间,翻阅FreeBSD的在线文档,查看一些函数对应的接口说明,甚至了解大概的实现,以搞明白这个函数大致的作用。在线文档的地址:https://docs.freebsd.org/en/
最后说一下参与翻译的几点心得:
1,翻译过程是忐忑不安的。虽然本书有第一版译作可供参考,但是第二版相比第一版做了大量的更新,有好几个章节甚至是全新的。另外,第一版并不算非常出色的译作,参考价值有限。作为翻译方面的新人,担心自己的翻译质量不行,祸害读者。
2,有时候看到上个版本的翻译里出现了一些对原作的误解,我以为自己掌握了“真理”,应该能准确翻译过来,就会有“哈,我真是原作者的解语人”的激动一刻。有时候之前的翻译句子桀骜不驯,难以理解,语法复杂度堪比英文原文,而我的翻译版本则简短而不失晓畅,这时候就放佛给自己之前写过的文章进行“改头换面”,以“重新做人”,有了很大的快感。
3,有时候一时半会无法理解原文,总觉得自己的翻译很膈应,这时候参考第一版翻译,觉得人家的理解挺到位的,就会觉得很汗颜,心中感叹,“哎,差点又要误人子弟了”。“三人行必有我师焉”,孔夫子诚不我欺也。人和人之间的理解本就是困难的,面对面都如此,何况面对冷冰冰的异国文字,存在理解上的偏差在所难免。
4,在中国,写作和翻译技术书籍回报是真的差。一些知名的书籍,其实翻译都是行业外的人士,或者是在校的学生。只有部分极其顶尖的书籍,才有技术作家愿意花时间翻译。还是挺佩服《计算机程序设计艺术》这类书籍的翻译的,没有一定功力翻译不了这样的书籍,并且需要长期坐冷板凳的功力。但是这样的书籍,如果出现一些较为明显的错译,又比较容易被吐槽。总之,在中国搞翻译,很容易出现这样的局面:**翻译者觉得自己是“为爱发电”,而读者可能会觉得翻译者“为了恰饭,连脸都不要了”。**这和职场是一样的,很多时候员工觉得呆在公司是为公司在牺牲(考虑外部机会的机会成本),而老板们却觉得员工拿着高薪不干事,两相受气。
5,有幸参与翻译,也算是一次奇特的体验。自己写文章,随便怎么写都行,信笔由缰,我的文章我说了算。翻译这个东西则是“带着镣铐跳舞”,要怎么做到“信达雅”,则是对个人的磨练。
第一次参与翻译,错漏在所难免,希望读者能够谅解。当然,这个译本对阅读该作应该是有一些帮助的,毕竟译者们还是花了不少时间趟过不少文字坑的。
希望以后有机会自己独立完成某本书的翻译,不限于技术书籍,也可以是管理书籍或者是科技史等。希望有机会写作并出版自己的书籍。