霍春陽(Hcy),Vue.js 官方團隊成員。專注于 Web 研發領域,是 Vue.js 3 的核心貢獻者之一,Vue.js 文檔生成工具 Vuese 的作者,技術社區活躍者,曾撰寫大量頗受好評的技術博客。
經過一年的準備,霍春陽的新書《Vue.js設計與實現》正式出版了!預售一周就已重印,刷新了近兩年的圖書重印記錄。?
坊間流傳著很多有關他的傳奇經歷,很多人對他的經歷都非常好奇。今天這篇文章讓大家走近霍春陽,了解一個真實的他,一個喜歡把事情做到極致的人,一個喜歡“留下點什么”的開發者。
大家好,我是霍春陽(Hcy)。
很開心的和大家分享一個消息:我的新書《Vue.js 設計與實現》出版了。
從 2021 年初開始準備這本書,到今天正式出版,很開心一切都能夠按部就班的進行,雖然中間因疫情原因耽擱了一些,但整體上是在軌的。這里必須要感謝出版社里各位盡職盡責的工作人員,尤其是王軍花老師。
借著這個機會我想和讀者分享一些關于本書和我,以及 Vue.js 的一些事情。就從為什么要寫這本書開始吧。
為何要寫這本書?
這確實也是值得我本人深思的一件事兒。我想從兩個方面來闡述我寫這本書的原因:
“干一行,愛一行”
“留下點什么”
知乎上有一個問題:“你做程序員真的是因為熱愛嗎?”。我回答了這個問題,感興趣的朋友可以在這里了閱讀完整的回答:你做程序員真的是因為熱愛嗎?
大意是,恰好寫代碼這事兒能賺錢。而我是屬于那種“干一行,愛一行”的人,它講的是一種職業精神,即無所謂做哪個行業,但只要確定了一個行業,那么就能全身心的投入,并能夠因為這種投入和達到的成就讓你真正的愛上這個行業,即所謂的“干一行,愛一行”。
從小我就有一個特殊的習慣(也許是怪癖),我也不知道是從什么時候、什么原因讓我產生并保持這種習慣。這個習慣是:“留下點什么”。
小時候家里有一臺黑白電視機,每天播放的內容大概會在電視劇、廣告、動畫片之間反復。然后突然有一天我就想,如何能證明我看過電視的內容呢?
為了能夠證明這一點,我就會根據電視劇、廣告、動畫片這幾個欄目對電視的內容進行分類并寫在紙上,一旦電視切換了播放內容,我就會在紙上對應的分類后面畫一道豎線。
這樣一來,紙上的豎線就能夠證明我看過電視了,而這些豎線就是我看電視這件事情“留下來”的東西。這會給我一種莫名的“充實”感。
類似的事情還有很多。例如,每年秋收的時候家里用水稻脫粒機對水稻進行脫粒處理,脫粒后的水稻會被灌進編織袋中,由于脫粒的計費方式是按照最終水稻的袋數來算錢的,因此每灌滿一個編織袋都會記一次數量。
計數方式也很有意思,由于“正”字的筆畫數量正好是 5,兩個“正”字就代表 10 袋。當時,我最喜歡的事情就是拿著粉筆在黑色木板上幫大人們記數。因為這種行為很符合“留下點什么”的審美。
再如,小時候玩游戲機(插游戲卡的那種),無論什么游戲,我都喜歡在游戲結束之后拿筆和紙記錄下局次,輸贏結果等,以便代表我確實玩過這些游戲,而記錄下來的這些內容,就是我玩游戲這個行為“留下來”的東西。
回到這個問題本身,我為什么要寫這本書?
很簡單,我想“留下點什么”,以證明我確實為 Vue.js 做過貢獻。我很享受寫這本書的過程,它讓我感到很“充實”,留下了一些東西的那種充實。
以寫代碼為職業,“干一行,愛一行”的性格讓我更加敬業,并成為 Vue.js 的團隊成員。如果還能“留下點什么”,那這種“誘惑”對我來說簡直無法抗拒。若是“留下的這些東西”還能夠為讀者、為 Vue.js 社區帶來一些幫助的話,那真的是完美了。
而更加慶幸的一點是,真的有很多讀者私信我并表達了對這本書的期待。在一定程度上,我個人覺得我也非常適合編寫這么本書,其中一個最大的原因是:我認為我能與絕大部分讀者產生共鳴。
通常來說,學習一項技術只需要掌握其核心思想即可,而無需事無巨細地深入細節。這樣的學習方式有一定好處,但同時會給人一種“虛”的感覺。
就像上學時學習操作系統課程一樣,如果你不跟著課程完成對應的實驗,實際修改一下操作系統的代碼,而只是學習一些進程、線程、文件系統、虛擬內存的抽象概念,雖然能夠在一定程度上理解,但始終覺得不踏實。
同樣的,學習前端框架也是一樣的道理。基于這個原因,這本書則照顧到了兩個方面。
一方面,它從全局視角介紹了框架設計及其各個方面的權衡;另一方面,也從具體的代碼出發,真正地將功能實現,并在此過程中讓讀者能夠切身感受并學習其中的難點和解決方案。
我的確花費了很大精力編寫本書,共 500 頁,希望它的內容不會讓你們失望。同時由于我的水平有限,有任何疏漏望不吝指出。
Vue.js 3 仍然在更新,
這本書會過時嗎?
這其實是一個好問題,也是我愿意強調的一個問題。簡單來說,答案是:不會。
這本書并非一本“源碼解讀”書籍,而是建立在筆者對 Vue.js 3 的理解之上,以由簡入繁的方式介紹 Vue.js 3 中各個功能模塊的設計與實現。同時輔以足夠的“細節”,旨在幫助讀者能夠更輕松、更自然地理解 Vue.js 3 的框架機理。
舉個例子,本書在介紹 Vue.js 3 中基于 Proxy 實現的響應系統時,并沒有照貓畫虎地照搬 Vue.js 源碼中的實現,并基于此反推代碼的運行機制。
而是會從 ECMAScript 的規范入手,詳細地闡述 JavaScript 對象的本質,以及創建代理對象(Proxy)的內在原理,并基于此從 0 開始,一點一點地構建整個完善的響應系統。
這樣做的好處在于,讀者能夠了解代碼的發展路徑,真正的做到知其然并知其所以然。
再如,在模板編譯的章節中。本書同樣帶領讀者從 WHATWG 的規范入手,詳細地介紹了文本模式的概念以及其對解析器的影響。
在編寫模板編譯器的過程中,還會涉及到字符引用的解碼,這些內容都需要從規范入手才能真正地理解“為什么”。幸運的是,本書會帶領讀者閱讀并理解相關的規范。
因此,我認為這本書是不會過時的。尤其是書中介紹的方法論,任何代碼的背后都需要有一個“原因”來支撐。
這個“原因”是多樣性的,它可能是某一個規范(如 ECMAScript 規范或 WHATWG 中關于 HTML 的解析規范),也可能是某個瀏覽器的 Bug,更可能是工具或語言的 limitation。
如何為 Vue.js 社區做貢獻?
為 Vue.js 社區做貢獻的方式是多種多樣的,我們歡迎任何種類的貢獻,無論哪一種貢獻,都值得給予足夠的尊重。
對于這本書而言,我也將其定義成是為 Vue.js 社區做貢獻的一種方式,旨在幫助大家更好的學習并使用 Vue.js。
社區里存在著各種各樣的角色,并非一定要以提交代碼的方式才算貢獻。在一定程度上來說,深度使用 Vue.js 并提供有意義的反饋信息甚至要比提交代碼的貢獻還大。而社區內也的的確確存在這樣的角色,并且 Vue.js 團隊也非常歡迎并尊重他們。
社區的強大與否,很大一部分由生態決定。曾有一段時間我專注為 Vue.js 3 的核心做貢獻,這也是我有信心完成這本書的最重要原因之一。
Vue.js 的核心將仍然由尤大領導,我本人未來會在 Vue.js 的社區項目建設和探索方向做更多的嘗試。正如我給自己立的 2022 年的 flag:
基于這個目標,現在已經有了一些小的成果。為了解析 Vue SFC 中的<style>塊,我開發了?Telecss
再來一張圖書的照片:
最后,感謝為這本書寫推薦序/語的各位大佬,以及所有支持這本書的讀者,非常感謝,感恩~
希望我像按約定完成這本書一樣,也能在 2022 年底按約定完成這個 flag。同時我也有一些新的想法,希望能夠順帶著完成。為 Vue.js 的社區多樣性添磚加瓦,大家一起加油!!!
文末福利
小伙伴們,可以在本文留言區留言任意內容參與抽獎~
抽獎規則:在我的公眾號留言超過3次的小伙伴中隨機抽1位。
其余留言再隨機抽1位。
另外源碼共讀提交5次及以上筆記的小伙伴群里(僅30多人)抽1位。
截止時間:3月7日晚8點
獲得新書《Vue.js設計與實現》包郵送。
中獎小伙伴,我會聯系兌獎。也可以提前掃碼加我微信 ruochuan12 以防失聯。或者發送源碼兩字參與源碼共讀。