不负好时光——《Netty in Action》中文版《Netty实战》翻译手记

简介: Netty 是支撑了阿里巴巴内部的RPC框架、消息中间件等一系列的核心基础系统的 Java 高性能网络编程框架。由 Netty 的Tech Leader所主导编写的《Netty IN ACTION》的中文版已经上市了,本文记录了翻译《Netty IN ACTION》这本书的中文版本《Netty实战》的心路历程。

引子

“书中自有黄金屋,书中自有颜如玉”,这句话从小我老爸就给我讲,当然那个时候真的以为书中真的会有黄金做的屋子和很多玉件。后来慢慢长大了,也渐渐懂得了这句话背后的真正含义。当然,他还给我说过“书山有路勤为径,学海无涯苦作舟”和“少壮不努力,老大徒伤悲”。怎么说呢,虽然我父亲的文化程度并不是特别高,但是他教会了我踏实和努力,并教会我“好读书、读好书、书读好”。至于我妈妈,特别和蔼,当然也有双子座的太多特质,就是聪明、敏感和脆弱和文艺。她最大的爱好,其实是看书。

小时候家里条件并不是特别好,同村有几个玩伴有了小霸王学习机,每天都在打《顶蘑菇》、《魂斗罗》、《冒险岛》还有《坦克大战》,一堆人围着看,当然我们眼巴巴地只能排着队或者拿鸡蛋和他们换游戏时间咯——瞧他们多有商业头脑。从那时起,我的最大理想就是有个小霸王学习机。当然那个时候家长也不同意给我买,一是没太多的钱,二是耽误学习。可惜啊,天助我也,有一天上学的时候我竟然捡到钱了,虽然是和同学一起的,不但我眼神儿好,看到了一张50的,然后我就加快了脚步,跑到了他们前面,几步路又是一张50的,后来还有一张20和一张10元的。这当时对我来说可是天文数字,我的小心脏扑通扑通地跳。我也不去学校了,也不告诉和我一起同行的同学,当然我也没有告诉警察叔叔。相反,我和同行的同学说,我作业本没有带,然后我如同脱弓的箭一样,飞驰到家。那条路多年都没变,是山路,回家的路都是下坡的,所以那个速度,我真是终身难忘。回家后,我一把把我妈妈抱住,我说妈妈我捡钱了!

那个时候130块钱还是很多的,然后我妈妈第二次赶集的时候给我买了一个小霸王学习机105,剩下的钱买了一袋化肥和一斤肉,据说捡来的钱都得吃掉,不过后来因为没有完全吃掉,我家养的猪GG了。

也是那个小霸王学习机让我第一次接触到了编程,那时候键盘上估计我认识的也就那几个数字和加减号,至于什么ABC是些什么玩意儿,根本不知道。

那个时候游戏卡带挺贵的、后来附赠的说明书中有介绍QBASIC,介绍说可以用来写游戏玩儿,所以我就按照说明书中的代码清单“逐字输入”了,用一个手指,一个字母一个字母地输入,我还记得后来那个小人儿在屏幕上走来走去的时候,我的高兴劲儿,当然,和实际具有游戏性的游戏差得还是太远。

后来我初中高中都沉迷计算机和网络游戏了,也是班上的计算机课代表。

再后来我上大学我选择了软件工程,并且某个暑假我在上海的建筑工地看了《Java编程思想》,从此步入了Java世界,再后来又搞Android,并且因为工作接触到了Netty。

惬意

我是个爱钻研的人,对自己不太懂又特别好奇的事物,总是想要搞明白。这份热情也激发了我对 Netty 源代码的学习,在《Netty实战》的“内容提要”中提到的那些知识,其实都是我当时欠缺的,所以直接学习 Netty 源代码,我还是碰了不少壁的,不过怎么说呢,缺钙补钙、缺铁补铁,我在学习的过程中也不断地充实自己,丰富自己的知识,直到我后来在生产中更好地利用 Netty,发现问题,并且能够提出改进。其实,最开始我连 Maven 都不会用,还各种拷贝 jar 文件呢,当然在我为 Netty 做出贡献之前,我还买了一本《Maven实战》,好好学习。

Netty 的源代码、Github上的讨论、社区的文档和博客都为我提供了充分的养分,并且如同我在书中提到的,Netty 和 Akka 其实是对我影响很大的两个框架,我从这两个框架中学到了太多的东西:优秀的框架设计、良好的软件工程、精巧的逻辑,每个小的点和它们的整体都是那么充满艺术和美感。社区,特别是主要的维护者,也特别热情,基本上很多细小的,看起来很傻的问题,都会有人回答你。我还记得我当时问过现在看起来最傻的问题是,那么多instanceOf不会影响性能吗?可是就是这样的问题,Trustin Lee 也给出了细致的回答。

毕业,不是学习的终点;工作,才是学习的起点。

随着我对 Netty 的深入了解,并且因为工作上创造的机会,我得以在很多场景下使用 Netty,并且在我之前的Leader的带领下基于几个RFC和一些论文搞了一个 P2P 的文件服务器、视频、聊天,还有Android客户端,真的是“麻雀虽小,五脏俱全”。再后来我又因为工作需要,接触了 Play,并且因为 Play 了解了 Akka 和 Scala,由此发现了我真正的热情所在。是的,我爱Scala,因为它满足了我对编程语言的幻想,我也爱 Netty,它让我感受到高性能网络编程也如此“美味”,当然我更爱的是Akka,它给了我更大、更宽广的视野,并且让我感受到了并发编程的乐趣。

虽然后面我主要都在生产上实践 Akka 的应用,可是我对 Netty 的热爱却从来没有停止过,我非常希望可以和社区一起分享和成长。后来偶然的机会,也是在 Scala 群,一次讨论中我遇到了臧秀涛,在得知了他已经有了多本译作后,我就主动联系了他,了解了一些和出版相关的问题,他也很乐于助人,并将我引荐给了人民邮电出版社的杨海玲老师,我也因此有幸能够翻译这本《Netty实战》。

也许这就是所谓的蝴蝶效应吧,如果多年以前,我没有捡到钱,也没有那么不听警察叔叔的话,没有购买小霸王学习机,等等,估计估计我也不会在夜深人静的时候,找点时间,继续在和小霸王当年的手感差不多的键盘上,键入这段文字了。

时光机

弹指一瞬,恍如隔世。虽然没有那么长,但是整个翻译过程真的太长太长了,至少对我来说,是这样的。从在北京翻译开始,过了一个夏天、一个冬天,再到杭州继续,期间也因为太忙了,或者LOL这个游戏太坑了,或者老婆孩子暑假来了,或者各种各样的理由,其实翻译的速度并不快。当然,我是从MEAP版本开始的翻译的,作者一边写我一边翻译,但后来原书的改动太大了,结果1~7章几乎是完全重新翻译了一遍,再后来又统一译法、口吻等杂七杂八又搞了几遍,拖拖拉拉,终于在外版正式定稿后一年交稿了,然后又该过年了。收年后来又是预排、一审、二审、三校,接着是三排三校。在这期间杨海玲老师给了我很多指导,因为毕竟作为译者,我对出版流程并不熟悉,以为很简单,其实,编辑们的交流和勘误等都是在纸样上进行的,说实话,给我的感觉就是震撼和辛苦。

编辑审阅

后来为了让读者能够更加早知道这本书并且拿到本书,又开始了在京东和异步社区上的预售,可以说每一个字、每一句、每一行文案,杨老师都会仔细斟酌。不管是书籍本身的文字,还是与书籍相关的宣导性文案。作为同样的“文字工作者”(写代码也算吧),我不得不敬佩她的专业态度,比如标点符号,如果我用错了,或者提出疑问来,她都会给出翔实的指导和相关的参考资料。这让我在参与本书的翻译过程中,不但自己更好地学习了本书的内容,而且提高了我个人各方面的水平,关于协作、责任、相信以及专业。

编辑审校1

编辑审校2

编辑审校3

后来预售了,又是准备相关的代码清单——中文版的、英文版的(已经合并到了上游)以及答疑。漫长的等待,特别是今天早上,不对,昨天早上,看到有北京的读者在群里晒自己已经收到书的时候,我真的很感动,虽然我自己都没有收到。因为出版社在北京,印刷厂也在北京,自然北京的读者近水楼台先得月了,这么长时间、这么多人的努力(原作者,译者,出版社的编辑、排版人员、校对人员、发行人员,还有和我一起review的朋友们等),终于在一张晒单照上,可以画一个句号并且新起一段了。

感动

除了我对杨海玲老师的信任以及包容的感激外,我还想感谢本书背后的工作者,以及原作者Norman,在我多次骚扰后依然和我积极沟通答疑。

当然我更加想要感谢的是帮我一起review这本书的早期译稿的朋友们。他们中的很多人不止一遍看过译稿,并且给出了很多颇有见地的意见,这些意见大部分都一针见血,也有少部分我们会扯上半天,最后越辩越明。

审校者

norman

norman1

特别要感谢的就是ctao、beck、兔子、DDS、frank、wrx和Unexpectable,他们给出了很多非常非常棒对意见,当然还有Hawstein,他也快速地帮我定位了一些问题,还有阿里的忘尘、宫博,以及为本书中文版写序的北纬大大,还有发现了本书第一个勘误的断岭等,如果没有他们,本书肯定不会是现在这个样子,当然,我也要感谢Play和Akka群的各位群友,我总是给他们发一些和该群的主题并不是很有关系的疑问,其实都是关于译法的,感谢他们的包容和理解,他们也都不厌其烦地给出他们的意见,甚至包括他们对最终定价的建议。感谢你们,我的群友们。

当然我也要感谢我的家人,感谢他们的支持和理解。以前以为翻译一本书很简单,实际上这两年我没当好老公,没做好爸爸,也没做好儿子。真的很感谢我的家人。

还要感谢的是,在本书刚刚预售后,中生代微信群的群友的帮忙,他们甚至制作了二维码。还有其他帮忙宣传这本书的朋友们,当然更需要感谢的是,不嫌麻烦在系统上提交勘误的朋友们,哪怕是电子版的细小排版问题,还是我“百密一疏”地把“2011”搞成了“2001”的问题,你们都极大地提高了本书的品质,并帮助了后来的读者。

清样

编辑小样书

编辑小样书1

电子版本

读者晒单

后记

这本书虽然是译作,但中文版我们也没有丝毫的含糊,至少作为译者,我还是尽力了,毕竟是书,马虎不得,具体地,我们在下面的几个方面做了改进。

  1. 本书中的内容已经结合了国内外的勘误,即已有的错误不会再次出现。
  2. 对原版内容中的一些未被社区发现的错误,也和作者进行了沟通,并且修正了。
  3. 本书对英文版中的channelhandlerpipeline等都在合适的上下文中统一替换为了对应的程序概念,即ChannelChannelHandlerChannelInboundHandlerChannelOutboundHandler或者ChannelPipeline。但是在部分上下文中,指代更加通用的描述的时候还是使用了处理器流水线这样的表述,从而大大地降低了读者的心智负担。
  4. 本书对应的代码清单同时提供了英文版本的对照和中文版本的对照,其中英文版本已经合并到了上游,和原书中的排版一一进行对照,并且通过package-info.java给出了每个代码清单对应的代码块的快速转跳,这需要您在阅读源码的同时借助IDE的帮助。同时针对中文版,我们在代码清单中不但结合本书中文版一一进行了排版,同时还加入了书中代码清单的注释和讲解,以便读者在查看代码清单的时候,能够很方便地得到上下文。虽然这样会增加一点读取上的负担,但是免去了重新看书中箭头说明的必要。
  5. 本书对应的代码清单是在Github上维护的,已经更新到了Netty 4.1.10-final。如果大家有什么疑问,也可以在Github上进行联系。
  6. 当然购买本书,也会请原书的作者之一——Norman,现在Netty的Tech Leader,喝一瓶可乐或者速溶咖啡。同时也相当于帮助了 Netty 项目本身,毕竟他老爱说:“买我书吧,请我喝咖啡。”(Buy my book, make me rich.)
  7. 本书的电子版的勘误非常快,而本书纸质版的勘误是一印一勘。
  8. 本书对应的代码清单会一直更新,希望能够带给您最鲜活的阅读体验。

结语

最后当然是,感谢所有购买了这本书的读者,以及整个 Netty 社区,希望大家一起努力,构建更加高性能、弹性以及更具有适应性的反应式系统,来构建更加美好的未来,当然也包括更加成功的职业生涯。当然,我也鼓励大家更多地回馈和参与开源社区,哪怕是改一个录入错误,或者发现和提出一个问题,也是贡献,也是我们和国际接轨,以及与社区进行双向互补的机会,这必然会让您在专业和个人方面都得到成长。

当然,最后还是,感谢阅读本书,我自己也等不及了,明天我也将收到我自己的纸质书了,加油,社区!

相关文章
|
7月前
|
Java
由浅入深Netty组件实战3
由浅入深Netty组件实战3
37 0
|
7月前
|
前端开发 算法 Java
由浅入深Netty组件实战2
由浅入深Netty组件实战2
82 0
|
7月前
|
缓存 安全 Java
由浅入深Netty基础知识NIO三大组件原理实战 2
由浅入深Netty基础知识NIO三大组件原理实战
44 0
|
7月前
|
Java
由浅入深Netty基础知识NIO三大组件原理实战 1
由浅入深Netty基础知识NIO三大组件原理实战
58 0
|
2月前
|
Java Unix Linux
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
当涉及到网络通信和高性能的Java应用程序时,Netty是一个强大的框架。它提供了许多功能和组件,其中之一是JNI传输。JNI传输是Netty的一个特性,它为特定平台提供了高效的网络传输。 在本文中,我们将深入探讨Netty提供的特定平台的JNI传输功能,分析其优势和适用场景。我们将介绍每个特定平台的JNI传输,并讨论其性能、可靠性和可扩展性。通过了解这些特定平台的JNI传输,您将能够更好地选择和配置适合您应用程序需求的网络传输方式,以实现最佳的性能和可靠性。
51 7
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
|
7月前
|
前端开发 安全 Java
由浅入深Netty组件实战1
由浅入深Netty组件实战1
58 0
|
20天前
|
NoSQL Redis
Netty实战:模拟Redis的客户端
Netty实战:模拟Redis的客户端
11 0
|
3月前
|
分布式计算 前端开发 网络协议
13W字!腾讯高工手写“Netty速成手册”,3天能走向实战
在java界,netty无疑是开发网络应用的拿手菜。你不需要太多关注复杂的nio模型和底层网络的细节,使用其丰富的接口,可以很容易的实现复杂的通讯功能。
|
3月前
|
监控 网络协议 调度
Netty Review - 深入探讨Netty的心跳检测机制:原理、实战、IdleStateHandler源码分析
Netty Review - 深入探讨Netty的心跳检测机制:原理、实战、IdleStateHandler源码分析
101 0
|
9月前
|
存储 数据安全/隐私保护
Netty实战(十三)WebSocket协议(一)
WebSocket 协议是完全重新设计的协议,旨在为 Web 上的双向数据传输问题提供一个切实可行的解决方案,使得客户端和服务器之间可以在任意时刻传输消息,因此,这也就要求它们异步地处理消息回执。
161 0