《Netty IN ACTION》中文版《Netty实战》翻译手记——不负好时光
不负好时光——《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章几乎是完全重新翻译了一遍,再后来又统一译法、口吻等杂七杂八又搞了几遍,拖拖拉拉,终于在外版正式定稿后一年交稿了,然后又该过年了。收年后来又是预排、一审、二审、三校,接着是三排三校。在这期间杨海玲老师给了我很多指导,因为毕竟作为译者,我对出版流程并不熟悉,以为很简单,其实,编辑们的交流和勘误等都是在纸样上进行的,说实话,给我的感觉就是震撼和辛苦。
后来为了让读者能够更加早知道这本书并且拿到本书,又开始了在京东和异步社区上的预售,可以说每一个字、每一句、每一行文案,杨老师都会仔细斟酌。不管是书籍本身的文字,还是与书籍相关的宣导性文案。作为同样的“文字工作者”(写代码也算吧),我不得不敬佩她的专业态度,比如标点符号,如果我用错了,或者提出疑问来,她都会给出翔实的指导和相关的参考资料。这让我在参与本书的翻译过程中,不但自己更好地学习了本书的内容,而且提高了我个人各方面的水平,关于协作、责任、相信以及专业。
后来预售了,又是准备相关的代码清单——中文版的、英文版的(已经合并到了上游)以及答疑。漫长的等待,特别是今天早上,不对,昨天早上,看到有北京的读者在群里晒自己已经收到书的时候,我真的很感动,虽然我自己都没有收到。因为出版社在北京,印刷厂也在北京,自然北京的读者近水楼台先得月了,这么长时间、这么多人的努力(原作者,译者,出版社的编辑、排版人员、校对人员、发行人员,还有和我一起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 社区,希望大家一起努力,构建更加高性能、弹性以及更具有适应性的反应式系统,来构建更加美好的未来,当然也包括更加成功的职业生涯。当然,我也鼓励大家更多地回馈和参与开源社区,哪怕是改一个录入错误,或者发现和提出一个问题,也是贡献,也是我们和国际接轨,以及与社区进行双向互补的机会,这必然会让您在专业和个人方面都得到成长。
当然,最后还是,感谢阅读本书,我自己也等不及了,明天我也将收到我自己的纸质书了,加油,社区!
《Netty IN ACTION》中文版《Netty实战》翻译手记——不负好时光相关推荐
- Netty In Action中文版
第一章:Netty介绍 本章介绍 Netty介绍 为什么要使用non-blocking IO(NIO) 阻塞IO(blocking IO)和非阻塞IO(non-blocking IO)对比 Java ...
- Netty In Action中文版 - 第十二章:SPDY
Netty In Action中文版 - 第十二章:SPDY 本章我将不会直接翻译Netty In Action书中的原文,感觉原书中本章讲的很多废话,我翻译起来也吃力.所以,本章内容我会根据其他资料 ...
- 《Netty 实战》Netty In Action中文版 第2章——你的第一款Netty应用程序(一)
第2章 你的第一款Netty应用程序 本章主要内容 设置开发环境 编写Echo服务器和客户端 构建并测试应用程序 在本章中,我们将展示如何构建一个基于Netty的客户端和服务器.应用程序很简单:客户端 ...
- Netty 4.1 Getting Start (翻译) + Demo
一.先来官方入门页面的翻译(翻译不好请多包涵) 入门 本章以简单的例子来介绍Netty的核心概念,以便让您快速入门.当您阅读完本章之后,您就能立即在Netty的基础上写一个客户端和一个服务器. 如果您 ...
- Netty in Action 读书
Netty in Action 作者: Norman Maurer / Marvin Allen Wolfthal 出版社:Manning Publications 出版年:2015-12-31 页数 ...
- Netty教程02:Netty实战之TCP服务
源码地址:https://gitee.com/pidaner/netty-class 官网:https://netty.io/ Netty is an asynchronous event-drive ...
- Netty入门教程——认识Netty
什么是Netty? Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架. Netty 是一个广泛使用的 Java 网络编程框架(N ...
- Lucene in Action中文版
Lucene in Action 中文版 第一部分 Lucene核心 1. 接触Lucene 2. 索引 3. 为程序添加搜索 4. 分析 5. ...
- Lucene in Action 中文版
Lucene in Action 中文版 ERIK HATCHER OTIS GOSPODNETIC zw_ren译 主要内容 第一部分 Lucene核心 1. 接触Lucene 2. ...
最新文章
- 中国“芯”的突破攻略——智源大会“智能体系架构与芯片”论坛发布
- C++智能指针简单剖析
- redis常用配置项
- 在MATLAB中读取同一路径下多个txt或mat文件
- Qt Creator在桌面上预览
- 登录方式2:windows命令行
- MySQL高级 - 锁 - MyISAM表锁 - 小结
- 立足于飞秋和即时通讯软件市场
- 在centos 7.0上利用yum一键安装mono
- c语言程序设计职工信息管理系统,C语言程序设计-职工信息管理系统.doc
- iOS 应用内付费(IAP)开发步骤一:填写相关的税务,银行,联系人信息;
- 云计算如何从计算机发展而来,云计算是由什么发展而成的产物?
- Dlink路由器后门分析
- 数据禾|甘肃省国家湿地公园功能区划数据
- 学人工智能买什么电脑?
- 二开七色中文视频 图片 小说网站源码模板 苹果cms V10
- 如何从 SQL Server 中的 SELECT 更新?
- 稻城亚丁,从你的全世界路过
- 机器学习(决策树四)——简述 剪枝
- docker 修改tomcat端口,部署ZrLog