引子
“书中自有黄金屋,书中自有颜如玉”,这句话从小我老爸就给我讲,当然那个时候真的以为书中真的会有黄金做的屋子和很多玉件。后来慢慢长大了,也渐渐懂得了这句话背后的真正含义。当然,他还给我说过“书山有路勤为径,学海无涯苦作舟”和“少壮不努力,老大徒伤悲”。怎么说呢,虽然我父亲的文化程度并不是特别高,但是他教会了我踏实和努力,并教会我“好读书、读好书、书读好”。至于我妈妈,特别和蔼,当然也有双子座的太多特质,就是聪明、敏感和脆弱和文艺。她最大的爱好,其实是看书。
小时候家里条件并不是特别好,同村有几个玩伴有了小霸王学习机,每天都在打《顶蘑菇》、《魂斗罗》、《冒险岛》还有《坦克大战》,一堆人围着看,当然我们眼巴巴地只能排着队或者拿鸡蛋和他们换游戏时间咯——瞧他们多有商业头脑。从那时起,我的最大理想就是有个小霸王学习机。当然那个时候家长也不同意给我买,一是没太多的钱,二是耽误学习。可惜啊,天助我也,有一天上学的时候我竟然捡到钱了,虽然是和同学一起的,不但我眼神儿好,看到了一张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章几乎是完全重新翻译了一遍,再后来又统一译法、口吻等杂七杂八又搞了几遍,拖拖拉拉,终于在外版正式定稿后一年交稿了,然后又该过年了。收年后来又是预排、一审、二审、三校,接着是三排三校。在这期间杨海玲老师给了我很多指导,因为毕竟作为译者,我对出版流程并不熟悉,以为很简单,其实,编辑们的交流和勘误等都是在纸样上进行的,说实话,给我的感觉就是震撼和辛苦。
后来为了让读者能够更加早知道这本书并且拿到本书,又开始了在京东和异步社区上的预售,可以说每一个字、每一句、每一行文案,杨老师都会仔细斟酌。不管是书籍本身的文字,还是与书籍相关的宣导性文案。作为同样的“文字工作者”(写代码也算吧),我不得不敬佩她的专业态度,比如标点符号,如果我用错了,或者提出疑问来,她都会给出翔实的指导和相关的参考资料。这让我在参与本书的翻译过程中,不但自己更好地学习了本书的内容,而且提高了我个人各方面的水平,关于协作、责任、相信以及专业。
后来预售了,又是准备相关的代码清单——中文版的、英文版的(已经合并到了上游)以及答疑。漫长的等待,特别是今天早上,不对,昨天早上,看到有北京的读者在群里晒自己已经收到书的时候,我真的很感动,虽然我自己都没有收到。因为出版社在北京,印刷厂也在北京,自然北京的读者近水楼台先得月了,这么长时间、这么多人的努力(原作者,译者,出版社的编辑、排版人员、校对人员、发行人员,还有和我一起review的朋友们等),终于在一张晒单照上,可以画一个句号并且新起一段了。
感动
除了我对杨海玲老师的信任以及包容的感激外,我还想感谢本书背后的工作者,以及原作者Norman,在我多次骚扰后依然和我积极沟通答疑。
当然我更加想要感谢的是帮我一起review这本书的早期译稿的朋友们。他们中的很多人不止一遍看过译稿,并且给出了很多颇有见地的意见,这些意见大部分都一针见血,也有少部分我们会扯上半天,最后越辩越明。
特别要感谢的就是ctao、beck、兔子、DDS、frank、wrx和Unexpectable,他们给出了很多非常非常棒对意见,当然还有Hawstein,他也快速地帮我定位了一些问题,还有阿里的忘尘、宫博,以及为本书中文版写序的北纬大大,还有发现了本书第一个勘误的断岭等,如果没有他们,本书肯定不会是现在这个样子,当然,我也要感谢Play和Akka群的各位群友,我总是给他们发一些和该群的主题并不是很有关系的疑问,其实都是关于译法的,感谢他们的包容和理解,他们也都不厌其烦地给出他们的意见,甚至包括他们对最终定价的建议。感谢你们,我的群友们。
当然我也要感谢我的家人,感谢他们的支持和理解。以前以为翻译一本书很简单,实际上这两年我没当好老公,没做好爸爸,也没做好儿子。真的很感谢我的家人。
还要感谢的是,在本书刚刚预售后,中生代微信群的群友的帮忙,他们甚至制作了二维码。还有其他帮忙宣传这本书的朋友们,当然更需要感谢的是,不嫌麻烦在系统上提交勘误的朋友们,哪怕是电子版的细小排版问题,还是我“百密一疏”地把“2011”搞成了“2001”的问题,你们都极大地提高了本书的品质,并帮助了后来的读者。
后记
这本书虽然是译作,但中文版我们也没有丝毫的含糊,至少作为译者,我还是尽力了,毕竟是书,马虎不得,具体地,我们在下面的几个方面做了改进。
- 本书中的内容已经结合了国内外的勘误,即已有的错误不会再次出现。
- 对原版内容中的一些未被社区发现的错误,也和作者进行了沟通,并且修正了。
- 本书对英文版中的
channel
、handler
和pipeline
等都在合适的上下文中统一替换为了对应的程序概念,即Channel
和ChannelHandler
、ChannelInboundHandler
、ChannelOutboundHandler
或者ChannelPipeline
。但是在部分上下文中,指代更加通用的描述的时候还是使用了处理器
和流水线
这样的表述,从而大大地降低了读者的心智负担。 - 本书对应的代码清单同时提供了英文版本的对照和中文版本的对照,其中英文版本已经合并到了上游,和原书中的排版一一进行对照,并且通过
package-info.java
给出了每个代码清单对应的代码块的快速转跳,这需要您在阅读源码的同时借助IDE的帮助。同时针对中文版,我们在代码清单中不但结合本书中文版一一进行了排版,同时还加入了书中代码清单的注释和讲解,以便读者在查看代码清单的时候,能够很方便地得到上下文。虽然这样会增加一点读取上的负担,但是免去了重新看书中箭头说明的必要。 - 本书对应的代码清单是在Github上维护的,已经更新到了Netty 4.1.10-final。如果大家有什么疑问,也可以在Github上进行联系。
- 当然购买本书,也会请原书的作者之一——Norman,现在Netty的Tech Leader,喝一瓶可乐或者速溶咖啡。同时也相当于帮助了 Netty 项目本身,毕竟他老爱说:“买我书吧,请我喝咖啡。”(Buy my book, make me rich.)
- 本书的电子版的勘误非常快,而本书纸质版的勘误是一印一勘。
- 本书对应的代码清单会一直更新,希望能够带给您最鲜活的阅读体验。
结语
最后当然是,感谢所有购买了这本书的读者,以及整个 Netty 社区,希望大家一起努力,构建更加高性能、弹性以及更具有适应性的反应式系统,来构建更加美好的未来,当然也包括更加成功的职业生涯。当然,我也鼓励大家更多地回馈和参与开源社区,哪怕是改一个录入错误,或者发现和提出一个问题,也是贡献,也是我们和国际接轨,以及与社区进行双向互补的机会,这必然会让您在专业和个人方面都得到成长。
当然,最后还是,感谢阅读本书,我自己也等不及了,明天我也将收到我自己的纸质书了,加油,社区!