2018年12月28號,《Rust編程之道》開啟了預售,截止到本月月底就滿兩個月了。現在《Rust編程之道》已經上架各大電商平臺正式開售,亞馬遜Kindle電子版也已上架,歡迎大家訂購學習。

除此之外,我也想跟大家嘮嗑一下關於這本書的一些故事。


惡評風波

預售開啟後的第一週,遭遇惡評。

當我滿心歡喜,等待讀者對本書的評價時。第一個看到的卻是一個心理殘疾的噁心小人發布的惡評,具體可參見我知乎專欄相關文章。

有的人說,不就是一個差評嗎?那麼在乎幹什麼?心胸要寬廣點。這話說來輕巧。一年的精心寫作,比作懷胎十月也不為過。新生命的誕生,總是讓人喜悅的,並且對它未來的成長充滿了期待。換成誰,也絕不會允許別人惡意的詆毀。這不是差評那麼簡單,我絕不會原諒這個小人。

過年期間,看了《流浪地球》,一部匠心之作。同樣是在豆瓣,遭遇了垃圾的詆毀。為什麼呢?就是吳京PTSD綜合症患者,也不管電影拍的如何,看見吳京就會罵。這些人和我得罪的那個小人是一樣的心理殘疾。

當然,也有更多的人跟我說:「真正的讀者,都有自己的判斷力」。事實證明,確實如此。

惡評風波過後幾天,全國各地的讀者陸陸續續都收到了書。大家在看過本書以後,紛紛找到我,對我說出內容一致的話:「書寫的不錯」。這句話,將我內心因為被惡評而產生的壞心情一掃而光。之前我在知乎也公開了幾次,我也保存了很多私聊的截圖,但暫時就不公開了。

正視差評

除了惡評,其實還有差評。比如你去翻一下淘寶或京東下面的評論,會發現有人說:「什麼爛書,開篇就有錯」。實話實說,對於這種差評,我是百分百的接受。因為確實有錯。

人無完人,孰能無過?我是第一次寫這麼厚的書。在寫書之前我並沒有預見或約束自己一定要寫多少字。我只是想把我覺得該寫的,都寫出來。結果一下就寫了百萬字(當然包括代碼)。

寫書的過程,也是很累的。到後期,我自己都有點麻木。有時候,為了寫好一句話,想半天。而且,我發現一個詭異的問題。當時寫的文字,自己閱讀幾遍,覺得非常通順達意。但是過幾天,或幾周再看,感覺寫的完全是狗P不通。甚至還有明顯的語病。

這就是人類的大腦。它是有缺陷的,只能通過反覆的篩查和修改來發現問題。再加上稿件交給出版社,還需要專門的排版人員去排版,這也增加了出錯的風險。編輯們也很辛苦,審稿三次。說這麼多,並不是想找藉口,而是想說明一個問題,這種事情是難以避免的。

而且這種差評,在我決定寫本書之前就已經預料到了。為了彌補這種可以預見的錯誤,我做了以下兩件事:

一、 創建Rusty風格的源碼倉庫。

因為Rust的文檔注釋功能相當強大,所以我就想到,直接把源碼創建為一個crate多好。發布到crates.io/crates/tao-of,就可以直接生成相關文檔 :tao_of_rust - Rust。並且可以一鍵點擊文檔中的示例,一鍵跳轉到Rust Playground,方便動手調試代碼。

另外一個好處就是,如果示例代碼有印刷錯誤、手誤,或者因為Rust版本升級而無法運行,我可以方便地修改這個倉庫源碼。書中也聲明瞭,讓大家以倉庫源碼為主,畢竟提供了這麼方便的功能。

二、打通溝通渠道。

2018年初,我開始為Rust社區提供「Rust日報」服務。每天梳理一些Rust的新聞,發送到Rust社區。這樣做有兩個方面的原因。第一個原因,是我自己也想了解Rust社區的動態,並且通過這個過程,挖掘一些學習資源。整理和分享,順手的事。第二個原因,就是為了建立一種渠道,在書出版以後,可以把我和讀者方便地聯繫起來。

事實證明效果很好。以隨書源碼的issues為勘誤列表,我創建了勘誤模板,大家在看到我在日報裏推送的消息,都踴躍地提交了勘誤。

這些勘誤,和「差評」的不同點在於:這些讀者都是認真看書的,他們接受書本的錯誤,對作者(我)寬容以待,並且是經過認真思考的,並且希望獲得準確的知識。一位讀者在豆瓣這樣評價: 「瑕不掩瑜」。因為本書的整體,大家都是認同的。

經過這樣的反饋,也方便我及時修正書中的相應問題。在後續的印刷版本或電子書中及時更正。

我一直認為,寫書就是和讀者的交流和溝通。通過這本書的勘誤,以及讀者羣裏的各種交流,我體驗到了什麼叫「羣體智慧」。寫書的過程,太漫長。再加上我自己的水平和認知也是有限的,所以對於一些概念的理解,難免也有問題。這些認真的讀者發現了,他們通過我構建的反饋渠道給我正面反饋。我根據這些反饋,再重新思考相應內容,又進一步加深了我對相應知識的理解。

斬獲殊榮

我的用心,都在書裏了,大家也看在眼裡了。下面是本書斬獲的一些殊榮。

預售第一個月:

  1. 開啟了第二次印刷
  2. 京東24小時新書榜第一、計算機總榜第六
  3. 京東計算機新書周榜前十
  4. 京東計算機新書月榜前十
  5. 京東圖書計算機類首頁熱門讀物推薦

預售第二個月(也是本月)

  1. 開啟了第三次印刷。
  2. 亞馬遜Kindle版電子書剛上線一天,即進入了新品銷售排行榜程序語言第一、互聯網技術總榜第八。
  3. 豆瓣評價 9.2分。

我在寫本書之前,就立下了一個小心願:「一定要寫出豆瓣評分9.0以上的作品」。這個小心願的標杆就是我之前翻譯的《Ruby原理剖析》的評分。其實,在《流浪地球》的惡評事件之後,我對豆瓣的評分已經很失望了。但至少,排除那一個惡評之外,評價的這幾個人中,都是認真看過書的。我的小心願,總算是得以滿足。

何謂之「道」

之前看到有的人說,中國人起個書名就愛起個「道」啊「禪」啊,都看膩了。但我其實更希望他問:「你為什麼要起《Rust編程之道》這個名字?」。

「道」,這個詞,出自老子的《道德經》。這本書蘊含了辯證邏輯思想,代表了中國的哲學智慧。「道」,就是指在宇宙萬物背後隱藏的那個規律。 這個規律包含了秩序,也包含了混沌。宇宙萬物的運轉,脫離不了「道」。

《Rust編程之道》書名中的「道」,就是指「Rust宇宙中的萬物」背後所遵循的那個東西。與「現實宇宙」不同的地方在於,「Rust宇宙」是人造的,而「現實宇宙」是神造的。(這裡的神,代表「自然」的鬼斧神工)。

所以,我在第一章開篇就這樣寫道:

你肯定有過夏夜仰望星空的時候,但不知道你是否思考過這樣一個問題:如何才能知道宇宙萬物星羅棋佈的規律?科學家們殫精竭慮地研究,就是為了探尋這個祕密。如果科學家們能和宇宙的設計者對話,就可以通過設計者的親口描述瞭解其對宇宙萬物的規劃,這樣就可以對研究宇宙萬物起到提綱挈領的作用,科學家們的工作會更有成效。但是,沒有這種「如果」。

一門編程語言就像一個小宇宙,語言中的各種語法概念就像一顆顆星辰。對於初學者來說,看這些語法概念與看星羅棋佈時產生的迷惑是相似的。幸虧編程語言是由人類創造的,編程語言的作者可以被找到,編程語言的源碼也可以被看到,甚至一些好的編程語言還會為你準備好非常豐富的文檔,供你參閱學習。通過這些信息我們可以瞭解到:一門語言緣何誕生?它想解決什麼問題?它遵循什麼樣的設計哲學?一門好的語言是有內涵哲學的語言,它表裡如一,有所想,有所為。

這就是我為什麼把書名定為《Rust編程之道》的原因。

Rust從誕生以來,一直就伴隨著一個標籤:「學習曲線高」。然而,在我開始學習Rust之後,我發現一個問題,其實並非Rust學習曲線高,而是我們的學習方法有問題。

最初,我只瞭解到Rust是一個混合範式的語言,我以為只是簡單的把OOP和函數式的概念加工一下,混起來。但深入瞭解以後,我發現並不是這麼簡單。Rust語言的混合範式,實際上是通過類型系統,將現有範式進行了有機地融合。一切都那麼地自然。

最初,我以為憑藉我十年編程的功力,學Rust不就是幾天的事嗎?然而,我又錯了。在我深入Rust以後才明白一個道理:不僅僅是未知的知識會形成我學習的阻礙,連我以往的經驗都會成為我的絆腳石。

Rust要解決的問題也非常明確:內存安全、高性能、現代化編程語言。

內存安全,還不能有GC,並且要求高性能,這就意味著Rust具有精細化操作內存的能力,而且還不容易產生未定義行為。Rust藉助類型系統,以及獨特的所有權機制,達成了這個目標。

那什麼是現代化編程語言?現代化意味著語言應該具有高度的表達能力。按往常的知識,高度抽象表達能力,就意味著性能的損耗,Rust如何做到呢?答案是:零成本抽象。同樣是藉助類型系統,幾乎所有的抽象都只在編譯期,編譯後的代碼將不包含任何抽象。

因此,我得出一個Rust的語言架構。Rust語言的類型系統,承上啟下,保證語言的一致性。上承所有權語義,下啟無GC的內存安全管理。

《Rust編程之道》就是按此語言架構來進行內容組織。希望可以幫助讀者把Rust中的概念結構化和層次化,形成系統的知識體系,達成精通Rust的目的。

寄語讀者

看本書的最佳實踐,其實我都寫在文前了。可惜我發現,很多人拿到書,都不看文前。

《如何閱讀一本書》中,對於看書學習的過程,有一個類比非常好。

你學滑雪的時候,是先學會一個個的分解動作,然後把這些分解動作,再歸併為一個整體,你才能快樂地滑雪。沒有人滑雪的時候,還在做一個個的分解動作。

看書學習也是這樣一個過程。書的作者(比如我),將一個整體性的知識,拆分一個個的分解知識(各個章節)。讀者首先要做的是,先對Rust有一個整體性的瞭解,然後再逐步學習分解知識,最後,再需要你自己,把學到的分解的知識,梳理為一個整體。這樣纔是你自己的知識。

其實第一章和第二章的目標,就是為了讓你從整體上去了解Rust語言。 多動手練習代碼,從語法上先把陌生感消除掉,然後再深入到後面的章節更好。在練習第二章代碼的時候,也不要過於深入到細節。要記住第二章的副標題所說的:好讀書,不求甚解。你不可能一遍學會Rust。

最後,希望大家都能精通Rust。

如果想要進讀者羣交流學習,可以加QQ羣:869289559。如果想要進微信讀者羣交流,可以通過掃描本書作者介紹下方二維碼申請加羣,也可以先進入QQ羣再申請進微信羣。

最後的最後,感謝大家的認可。我會再接再厲,繼續出好作品。

推薦閱讀:

相關文章