新書上市 -《Elasticsearch 原始碼解析與優化實戰》
非常抱歉,很久沒來更新部落格,因為我去寫書了。第一次產生寫書的想法,是在寫了一陣子部落格之後,感覺一些文章的內容值得放在書裡。這種想法只是一閃而過。但是隨著時間流逝,對 es 方方面面積累的更多的認識,以及網路上大量文章過時,錯誤觀點,在 es 原理方面進行系統性,權威地介紹的資料很少。使我覺得最好把我知道的東西分享給更多的人,為了搞明白某個原理,不用再花費太多心血從原始碼中逆向出來。
我所在的基礎大資料團隊,每個同學負責各自平臺的優化與開發,而我負責 es,因此有大量的時間閱讀原始碼,研究原理。在閱讀原始碼的時候,一般會花一兩週的時間分析某個流程或模組,然後週會給大家串講,串講其實挺有壓力,聽眾都是專家,你必須把原理講清楚,不能有模糊的結論。因為有串講的壓力,在閱讀原始碼,分析原理的時候就需要把自己想到的問題都弄清楚。能夠給別人講明白,也有助於從茫茫的程式碼中跳出來。即使如此,分享 PPT 時大家經常會問到你不曾考慮到的問題,這樣讓做分享的人思路更加開闊。就這樣,系統性的閱讀原始碼用了大半年的時間,分析了比較重要和常見的流程及模組,中間穿插一些測試,以及處理線上問題,也陸續寫了一些部落格文章。
當我真的考慮去寫書時,面臨一個核心問題:ES 的版本更新很快,大約1年左右就會發佈一個大版本,版本變化比較大。這樣,寫出來的書時效性就很強:花費大量精力和時間寫出的東西,一兩年就過時,是個很大的問題,這讓我猶豫了一下。
幾天後,我覺得這件事情必須有人去做,即使時效性很強。因為市面上沒有原理類的書籍,沒人講清楚 recovery 的過程,分析這類原理的痛苦過程不應該被其他人重複。同時也有很多人對 ES 的認識和基礎原理的理解比較薄弱,如果有人把原理和常用的優化方式講清楚,可以促進 ES 受眾的發展,我對 ES 的研究可以幫助更多的人。再者,雖然原始碼有較大的變化,原理的變化一般不會特別大。因此,第二天我就聯絡好了出版社。
接下來就是寫書面臨的實際問題:
內容
準備全書目錄,我把以前寫過的文章整理了一下,加上其他準備寫的東西,似乎內容有些單薄,達不到整本書的體量,我不知道最後能否完成全書。但是我不能因為這個問題放棄,我必須去寫,就算寫不完,也要把能寫的都寫出來。在動筆之後,你會發現能寫的東西很多,甚至需要減小篇幅。
時間
網際網路公司很忙,工作日最早也要8點才收工,下班後碼字最多隻有2小時的時間,只有週末可以全心碼字,產出比較高。不過女兒三歲,和我關係很好,週末當我背起電腦準備去 KFC 的時候,經常會哭著不讓走,能夠狠下心來不容易,我深知童年只有一次,陪伴只有一次,但這件事情需去做,我很想說,以後的週末都屬於你!
進度
同樣由於ES版本更新很快的原因,我最好在6.x 版本的生命中期讓書上市,本書寫作的時候 ES 最新版本為 6.1.2,如果上市的時候7.x 都出來了那會很尷尬,因此我 需要在半年左右的時間完成全書內容,同時要保證本書質量,本來可以從容寫作就變得有不小壓力:
- 雖然有先前的文章積累,但是基於2.x-5.x,我需要基於6.x 重讀程式碼。
- 書中部分文字和圖片引用官網內容,理論就是那樣,自己重新畫一個相同的圖出來沒有必要,這個過程對引用的內容中描述不夠精確的進行了修正,所引用部分都給出了說明,並在章節末尾給出了連結(後來篇幅的原因刪掉,出版社單獨整理了引用連結)
幸好年假多,可以全部休光。
在此也要感謝出版社的陳曉猛老師,在本書交稿之後以相當快的速度讓本書上市,交稿之後的審查和校閱等複雜流程遠超我的想象,沒有陳老師的大力支援,本書不會如期出版。
最後,一些經驗分享給同樣想要寫書的小夥伴:
- IT類書籍,選擇電子工業出版社或者機械工業出版社
- 出版社負責排版印刷等整個後續環節,包括對錯別字的檢查。作者只關注寫作即可。寫書和寫部落格不同,部落格可以自由散漫,寫書要力保精確,嚴謹,可考證
- 不要因為編輯老師會檢查錯別字就在寫作期間大意,人總會犯錯誤,疏漏難免,如果終審不合格,會耽誤出版。寫作之前最好看看出版社的文法規定,把錯誤消除在交稿之前。在全書完成後,僅我個人就對全書進行了7-8遍校閱,還不算編輯老師的,終審抽查仍扣3分(8分為不合格)
4.寫作文體推薦按照金字塔原理:
金字塔的基本結構是:中心思想明確,結論先行,以上統下,歸類分組,邏輯遞進。先重要後次要,先全域性後細節,先結論後原因,先結果後過程
搭建金字塔的具體做法是:自上而下表達,自下而上思考,縱向疑問回答/總結概括,橫向歸類分組/演繹歸納,序言講故事,標題提煉思想精華