優秀的技術社區天天都會生產出很多幹貨內容,《XX 框架源碼分析》就是其中的一類。然而,這類文章每每叫好不叫座,人氣經常不如《手把手教你 XX》。真的是咱們太浮躁了嗎?本文但願用另外一種角度看待這個問題。git
中國的大學課堂以照本宣科而著稱,而各個學校本身編寫的大學教材也是出了名的枯燥無味。那麼,一本爛教材通常知足什麼條件呢?這裏隨便列出幾個:github
而後讓咱們對比一下,一篇冷門的《XX 框架源碼分析》又知足什麼條件呢?面試
看到了嗎,這徹底一一對應啊!非要說兩者有什麼不一樣的話,可能就是爛教材收錢而爛文章免費了吧。算法
能寫源碼分析文章的同窗,多半是有很多靠譜乾貨的,我也毫不是說源碼分析的文章都是垃圾。在此,咱們不妨換個問題考慮一下,即爲何中國的大學教材會遭人唾棄?框架
沒有對比,就沒有傷害。讓咱們看看高等教育發達的美帝,其本科理工教材的行文方式是怎樣的吧:函數
把美帝教材與天朝教材的編寫思路相對比,咱們就能夠總結出兩者在價值觀上的誤差了:源碼分析
這就是差異所在:許多【技術乾貨】和中國的大學教材同樣,並無把將知識傳達給讀者做爲第一訴求,而是花大量篇幅貼出代碼,告訴你【這個很複雜,我讀懂了!】。然而,即使是硅谷的白板技術面試,代碼量也不會超過 50 行,動輒幾十上百行美其名曰【完整示例】的源代碼,沒有讀過的讀者真的能在短短的幾分鐘閱讀時間裏看懂嗎?post
然而,拜【先贊後看】的商業互吹風氣所賜,沒看懂這類文章的新手同窗多半不敢把看不懂的責任歸結到文章的行文思路上,而只會自卑地認爲本身【水平不夠】。因而,新人們爲了提高水平,也投入到了源碼閱讀的大軍裏來,在歷經困難後終於得到了成長,寫出了一篇對一樣框架一樣源碼的一樣分析,想要屠龍的勇士也終於變成了龍。測試
因此,許多讓人感受晦澀的技術文章,其問題可能並不是出在所介紹的技術內容自己,而是出在更基本的行文思路上。除了上面說起的源碼解析類文章,相似的技術內容還包括:翻譯
然而只要稍稍轉變行文的價值導向,按照讀者的閱讀理解方式梳理一下,它們都很容易變成高質量、能讓讀者從中學到知識的乾貨:
價值觀上哪怕是簡單的改進,最終產出的內容每每都會有很大的不一樣。我我的的例子是:一樣是開發模擬器的總結,第一次寫 實現 Chip8 彙編模擬器 的時候,主題就是【我這個東西很厲害呢】,這時的內容就是典型的技術流水帳;而過了一段時間成長後,改進的 如何用 3KB 不到的 JavaScript 實現微機模擬器 就是一篇旨在分享,但願可以讓新人看懂的教程了。歡迎對照它們各自的行文方式,這樣就能對文章的可讀性作出評價啦。
上面介紹的是【轉換價值導向】的概念。對許多技術文章,理清思路就可以很大地改善閱讀體驗了,不過對於源碼解析類的文章,我的還有個大膽的想法:即它們的編寫難度可能並無標題看起來的那麼大,對新手向的讀者也缺少實際的用處。
這裏我提出一種算法,可以輕鬆地完成對任意框架的源碼分析:
throw
一個異常,運行框架來讓它報錯。三步搞定!雖然這個算法十分荒唐而無聊,但筆者確實見過一些文章,寫得就像是經過這個方式堆砌出來的同樣。代碼的藝術在於化繁爲簡,而這樣的內容倒是在化繁爲繁,讀起來難受也是再正常不過的了。
另外,因爲代碼天生的特殊性,最好的代碼閱讀器恐怕不是技術社區的 App,而是強大的 IDE。源碼分析的文章可以拿來下斷點調試、可以拿來 mock 測試、可以拿來看運行時變量內容嗎?有源碼自己就足夠了吧。
這就形成了一個尷尬的結果,即咱們在想要了解代碼的實現細節時,第一選擇每每不是其餘人寫的源碼分析文章。好比,在以前編寫 Chip-8 模擬器的時候,我發現語言文檔中的某一條指令語焉不詳。這時我首先想到去參考的,是前人實現過的 Java 版項目源碼,而不是找一篇《模擬器源碼分析》來讀。既然多數狀況下源碼自己已是 Single Source of Truth,二手材料的優先級還會很高嗎?
不過,對源碼的解析難道就一無可取了嗎?這個想法就更加錯誤了。閱讀源碼的能力絕對算是開發同窗的硬技能,那麼在什麼場合會用到對源碼的解析呢?我卻是發如今一個場合它很是適合:寫 Pull Request 描述的時候。
在向社區提交 PR 的時候,咱們通常會說明【要解決什麼問題、什麼代碼引發了問題、解決方案是什麼】的三部曲,這時候閱讀者都是已有背景知識的維護者,故而這些信息很是有助於 PR 的討論與合併。
回想一下,中國的大學教材也不是一無可取吧?它們在考前複習的時候可方便了呢。源碼解析類的文章就像是這樣的提綱,須要給已經讀懂過一次的人,才能發揮出最大的價值。
鑑於上文中看起來批評了很多內容,故而有必要在最後澄清本文的主題:
最後對於可能的質疑,做者我的的 Github 裏有很多槽點很高的玩具源碼,吐槽請不要客氣😅…