太長不讀
我寫了一本關(guān)于React+TDD的英文書,你可以從這里免費(fèi)獲得。在我寫這篇文章的時(shí)候,讀者大約是1000+。雖然讀者不算多,但是通過一些渠道收集到的反饋還算不錯(cuò),已經(jīng)超出我自己預(yù)期很多了。如果你讀完覺得還不錯(cuò),而且愿意幫我宣傳一下我會(huì)非常感激,如果你想要做一些修訂甚至翻譯的話那就更棒了(有一個(gè)俄羅斯小伙在幫我翻譯俄文版,不過我對他的進(jìn)度不是很有信心)。
緣起
實(shí)話實(shí)說,寫這本書純屬意外之舉,最開始的時(shí)候?qū)τ趦?nèi)容和形式是完全沒有計(jì)劃的,更不用說用另外一門語言作為載體了。應(yīng)該是在2017年年末的時(shí)候,我在客戶的無線部門做一個(gè)網(wǎng)管產(chǎn)品的Web化,人員能力提升顯然是Web化的核心了 -- 畢竟功能需要開發(fā)人員一行行去實(shí)現(xiàn)。當(dāng)時(shí)該部門中的大部分開發(fā)同事的Web技能都比較薄弱,一些有經(jīng)驗(yàn)的同事則每日被業(yè)務(wù)需求纏身無法顧及能力構(gòu)建,因此引入外部的培訓(xùn)來填補(bǔ)這個(gè)空缺。
這個(gè)看起來是Web開發(fā)101的培訓(xùn)還有一些其他需求,比如用戶故事拆分、自動(dòng)化測試和TDD等等敏捷開發(fā)的基本內(nèi)容。我為團(tuán)隊(duì)設(shè)計(jì)了一些循序漸進(jìn)的例子作為培訓(xùn)的素材,并在后來的幾輪迭代中進(jìn)行了內(nèi)容的刪減和補(bǔ)充。培訓(xùn)的結(jié)果還是不錯(cuò),有一半以上的同事對Web開發(fā)產(chǎn)生了興趣,有人則開始意識到自動(dòng)化測試(以及TDD)可以減少回歸測試的工作量。
正如你所料,這個(gè)培訓(xùn)的一個(gè)副產(chǎn)品就是這本書的原型了。在培訓(xùn)結(jié)束之后我正好有了幾周不再項(xiàng)目的時(shí)間,我用這些時(shí)間將內(nèi)容變成一個(gè)教程:從一個(gè)簡單的例子,逐步完善成一個(gè)前端應(yīng)用。其中涉及了諸如Tasking,ATDD,用戶故事等。
寫作過程
初稿
原型是很容易的,素材是現(xiàn)成的,只需要將其以符合邏輯的方式連接起來即可。比如我想要描述通過TDD的方式開發(fā)一個(gè)應(yīng)用的全過程,那么首先我需要講清楚我們要做一個(gè)什么應(yīng)用,此外我需要說清楚如何用TDD來完成這個(gè)應(yīng)用。根據(jù)經(jīng)驗(yàn),人們喜歡循序漸進(jìn)的方式來閱讀,先做一個(gè)簡單需求,然后逐步增強(qiáng),并在過程中將學(xué)到的內(nèi)容應(yīng)用,然后推廣到后續(xù)需求的開發(fā)中,并通過實(shí)現(xiàn)更加復(fù)雜需求習(xí)得我想要傳遞的知識/技巧。
- TDD的101(通過例子來說明Tasking和測試驅(qū)動(dòng)的過程)
- 介紹demo應(yīng)用,搭建應(yīng)用所需的環(huán)境
- 設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡單需求
- 實(shí)現(xiàn)一個(gè)更復(fù)雜的需求
- 循序漸進(jìn)……
編輯初稿的過程中,正好有個(gè)掘金小冊的編輯聯(lián)系我有沒有意向?qū)憘€(gè)小冊子。雖然后來由于篇幅和主題的選擇問題沒有繼續(xù)合作,但是和編輯溝通的過程幫助我很好的梳理了草稿的結(jié)構(gòu)。
英文版
在草稿寫完之后,我找到幾個(gè)同事做了快速的評審并做了一些修改。到了2018年3月,我開始準(zhǔn)備到澳洲工作,既然英語會(huì)是我接下來幾年的主要語言,那么提升英文能力就成了優(yōu)先級很高的事情。而學(xué)習(xí)語言的竅門就是:沒有什么比實(shí)際使用一門語言更能提升語言能力的了。
于是我開始嘗試把草稿翻譯成英文版。開始的時(shí)候我還會(huì)保持雙語版本的同步,到后來帶寬不足的時(shí)候就只能把精力放到英文版上了。第一個(gè)完整的英文版發(fā)布于2018年5月,后面雖然陸續(xù)有些小的修改,主體部分沒有太大的變化。
到了澳洲之后,讀了很多英文原版的書籍/文章之后,發(fā)現(xiàn)了書中很多的語言錯(cuò)誤,又在一個(gè)假期里集中修改過一輪,可讀性有了一些提高。
重構(gòu)
到了2019年的9月,經(jīng)過了近1年2個(gè)純React的項(xiàng)目后,我對與React及其生態(tài)的理解,以及在應(yīng)用TDD(特別是和傳統(tǒng)上認(rèn)為的TDD很難在復(fù)雜/時(shí)間不允許的項(xiàng)目上實(shí)施)的認(rèn)識上都有了新的發(fā)展。于是又將其中很多章節(jié)重寫了,比如丟棄了pupeeteer改成cypress,采用react-testing-library而不是enzyme等等。另外,結(jié)構(gòu)上也做了重新整理。
由于這些顛覆性的修改,我將其重新命名為Mastering Test Driven Development with React,并聲明其為前一個(gè)版本的第二版。
到了2020年4月,由于COVID-19在澳洲的肆虐,我們開始全面WFH。一方面突然有了很多時(shí)間,另一方面我意識到線上溝通時(shí)英文在有些時(shí)候還是會(huì)變成障礙,于是我又花費(fèi)了一些時(shí)間來提升英文。于是又開始了一輪的re-wording。
在你今天閱讀這本書的時(shí)候,你大約會(huì)驚嘆于英文表達(dá)之地道,語法之準(zhǔn)確以及用詞之精準(zhǔn)。這些都和我的英文水平沒有太大關(guān)系。在5月的一天,一位澳洲同事Hannah Bourke寫郵件給我,表示她通讀了這本書,非常喜歡其中的講述方式和實(shí)例以及節(jié)奏,她表示愿意幫我近一步潤色。她通過PR的方式重新整理了本書的語言(目前已經(jīng)完成了70%),由于Hannah本身就是前端Dev,所以很多表達(dá)方式也被重寫為更容易被讀者理解的方式。
一些收獲
關(guān)于英文寫作
語言的學(xué)習(xí)是個(gè)漫長而痛苦的過程,同樣的內(nèi)容,要從一門語言中的表述要翻譯成另一門語言需要的更多的是重寫而不是literal translation。從到澳洲工作開始我就開始刻意的用英文寫作,還嘗試把一些文章翻譯并投稿給英文版洞見。
通過這些練習(xí),我覺得我至少不再懼怕這件事情本身。英文表達(dá)當(dāng)然有不地道的地方,但是讀者也不是語言學(xué)家,大多數(shù)時(shí)候他們都可以準(zhǔn)確無誤的get到你的意思。即使有些復(fù)雜概念無法一次理解,通過評注或者提問等等,總是會(huì)搞清楚的。
關(guān)于自信構(gòu)建
在這本書的寫作過程中,我個(gè)人最大的收獲應(yīng)該是:當(dāng)你制定了一個(gè)目標(biāo),不論這個(gè)目標(biāo)開始開起來有多么的不切實(shí)際,一旦你開始細(xì)化這個(gè)目標(biāo)并逐步實(shí)施,你就已經(jīng)離這個(gè)目標(biāo)不遠(yuǎn)了。當(dāng)然,和每個(gè)任務(wù)一樣,事情走到最后可能會(huì)和最開始的目標(biāo)并不完全契合,但這大約是我們無法掌控的那部分了,就隨他去吧。
文/ThoughtWorks 邱俊濤
更多精彩洞見,請關(guān)注微信公眾號:ThoughtWorks洞見
