不负好时光——《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”的问题,你们都极大地提高了本书的品质,并帮助了后来的读者。

后记

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

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

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

《Netty IN ACTION》中文版《Netty实战》翻译手记——不负好时光相关推荐

  1. Netty In Action中文版

    第一章:Netty介绍 本章介绍 Netty介绍 为什么要使用non-blocking IO(NIO) 阻塞IO(blocking IO)和非阻塞IO(non-blocking IO)对比 Java ...

  2. Netty In Action中文版 - 第十二章:SPDY

    Netty In Action中文版 - 第十二章:SPDY 本章我将不会直接翻译Netty In Action书中的原文,感觉原书中本章讲的很多废话,我翻译起来也吃力.所以,本章内容我会根据其他资料 ...

  3. 《Netty 实战》Netty In Action中文版 第2章——你的第一款Netty应用程序(一)

    第2章 你的第一款Netty应用程序 本章主要内容 设置开发环境 编写Echo服务器和客户端 构建并测试应用程序 在本章中,我们将展示如何构建一个基于Netty的客户端和服务器.应用程序很简单:客户端 ...

  4. Netty 4.1 Getting Start (翻译) + Demo

    一.先来官方入门页面的翻译(翻译不好请多包涵) 入门 本章以简单的例子来介绍Netty的核心概念,以便让您快速入门.当您阅读完本章之后,您就能立即在Netty的基础上写一个客户端和一个服务器. 如果您 ...

  5. Netty in Action 读书

    Netty in Action 作者: Norman Maurer / Marvin Allen Wolfthal 出版社:Manning Publications 出版年:2015-12-31 页数 ...

  6. Netty教程02:Netty实战之TCP服务

    源码地址:https://gitee.com/pidaner/netty-class 官网:https://netty.io/ Netty is an asynchronous event-drive ...

  7. Netty入门教程——认识Netty

    什么是Netty? Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架. Netty 是一个广泛使用的 Java 网络编程框架(N ...

  8. Lucene in Action中文版

    Lucene in Action 中文版  第一部分 Lucene核心 1.      接触Lucene  2.      索引 3.      为程序添加搜索 4.      分析 5.      ...

  9. Lucene in Action 中文版

    Lucene in Action 中文版 ERIK HATCHER OTIS GOSPODNETIC zw_ren译 主要内容 第一部分 Lucene核心 1.      接触Lucene 2.    ...

最新文章

  1. 中国“芯”的突破攻略——智源大会“智能体系架构与芯片”论坛发布
  2. C++智能指针简单剖析
  3. redis常用配置项
  4. 在MATLAB中读取同一路径下多个txt或mat文件
  5. Qt Creator在桌面上预览
  6. 登录方式2:windows命令行
  7. MySQL高级 - 锁 - MyISAM表锁 - 小结
  8. 立足于飞秋和即时通讯软件市场
  9. 在centos 7.0上利用yum一键安装mono
  10. c语言程序设计职工信息管理系统,C语言程序设计-职工信息管理系统.doc
  11. iOS 应用内付费(IAP)开发步骤一:填写相关的税务,银行,联系人信息;
  12. 云计算如何从计算机发展而来,云计算是由什么发展而成的产物?
  13. Dlink路由器后门分析
  14. 数据禾|甘肃省国家湿地公园功能区划数据
  15. 学人工智能买什么电脑?
  16. 二开七色中文视频 图片 小说网站源码模板 苹果cms V10
  17. 如何从 SQL Server 中的 SELECT 更新?
  18. 稻城亚丁,从你的全世界路过
  19. 机器学习(决策树四)——简述 剪枝
  20. docker 修改tomcat端口,部署ZrLog

热门文章

  1. C# 多线程一: Thread 的简单理解与运用
  2. Homebrew 安装 OpenCV
  3. 背景图片根据宽度自适应高度的方案
  4. 使用Fiddler调用WebService接口,模拟发HTTP请求
  5. 2023优质计算机专业毕业设计题目汇总-重点学院专用
  6. form跳转到新页面
  7. 第一次蓝牙TWS调试项目
  8. Hook:如何高效双向链接不同类型的信息资源?
  9. “8月3日我们要过男人节”
  10. 生活短视频网站介绍百科