《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 社區,希望大家一起努力,構建更加高性能、彈性以及更具有適應性的反應式係統,來構建更加美好的未來,當然也包括更加成功的職業生涯。當然,我也鼓勵大家更多地回饋和參與開源社區,哪怕是改一個錄入錯誤,或者發現和提出一個問題,也是貢獻,也是我們和國際接軌,以及與社區進行雙向互補的機會,這必然會讓您在專業和個人方麵都得到成長。
當然,最後還是,感謝閱讀本書,我自己也等不及了,明天我也將收到我自己的紙質書了,加油,社區!
最後更新:2017-06-05 11:32:26