我從寫技術部落格中收穫到了什麼?- J_Knight_

J_Knight_發表於2018-12-04

我是 J_Knight_,熟悉我的人都應該知道我是一名剛工作滿3年的非科班 iOS 開發者,而且一直堅持寫技術部落格快有2年半的時間了。

其實從去年開始就一直想分享我寫部落格的心得,但是一直也沒有找到合適的契機,剛好在今年年底前達成了掘金粉絲量過萬的小目標,索性就藉著這個機會分享一下我自己關於寫部落格的一些收穫,同時也算順便做一個階段性的總結。

這篇文章分為三個部分:

  1. 寫技術部落格的歷程
  2. 寫技術部落格的收穫
  3. 回答一些朋友(粉絲)的一些關於寫部落格的幾個問題

第一部分先簡單介紹關於我的部落格的一些資料:寫部落格的起始時間,使用的部落格平臺,部落格內容等等。

第二部分是本篇的重點,講解的從部落格中我的收穫有哪些。

第三部分羅列了幾個經常從一些朋友(粉絲)中聽到的關於寫部落格的問題以及我的回答。

寫技術部落格的歷程

在第一部分首先看一下我寫部落格的幾個階段,然後在該部分結尾統計一下我的部落格的一些資料。

寫部落格的幾個階段

我從寫技術部落格中收穫到了什麼?- J_Knight_

我在就業之前,自學 iOS 的時候開始寫部落格(當時只是寫一點學習筆記,質量很低),拿到第一份工作之後的半年多以後開始在簡書寫部落格,再經過大概一年多以後因為一個“眾所周知”的原因從簡書轉到了掘金平臺,再到後面也開始維護自己的個人部落格和公眾號。

從簡書轉戰到掘金的原因可以看我簡書的最後一篇部落格,簡書個人主頁地址以及其他主頁地址在本篇結尾提供。

寫部落格的內容按照時間順序大致分為六個階段:

  • 第一階段:學習筆記
  • 第二階段:原始碼解析
  • 第三階段:React Native
  • 第四階段:程式碼規範
  • 第五階段:資料結構和演算法
  • 第六階段:物件導向設計

第一階段

第一個階段的寫作內容集中在視訊教程的學習筆記以及讀書筆記以及一些關於iOS開發的比較小的知識點。在這段學習過程中帶給我的提升比較大的是《Effective Objective-C 2.0》和 《Objective-C 高階程式設計》這本書,以及一些關於程式設計師素質方面的書籍。有以下幾篇部落格:

《Effective Objective-C 2.0》總結:

《Objective-C 高階程式設計》總結:

讀書筆記:

上面這些部落格在掘金上釋出的時間比在簡書上面釋出的時間晚,因為大概是在簡書寫作一年多之後才開始在掘金髮布文章。

第二階段

第二階段的寫作內容集中在 iOS 各大主流框架的原始碼解析,原因是當時想通過看原始碼來提升業務水平。這階段的原始碼解析一共有以下幾篇部落格:

後來還發布了兩篇原始碼解析的文章,原因是當時業務上要求封裝一個網路框架和快取庫,所以就找了YTKNetworkYYCache的原始碼來學習,部落格地址:

通過學習YTKNetwork,自己後來也封裝了一個網路框架,開源在了我的GitHub倉庫中:

很慚愧由於今年事情比較多,所以這個庫從去年末釋出之後就一直沒有更新。但是優化的思路已經有了,明年可以逐步更新和維護。

第三階段

第三階段的寫作內容集中在 React Native,原因是當時公司任務上有 React Native 的開發任務,所以當時花了一些時間來學習。學習主要是通過一個慕課網上的實戰專案React Native技術精講與高質量上線APP開發來學習的,在學習過程中參考課程的講解,我自己將APP實現了一遍,放到了我個人的GitHub倉庫中:GitHubPopular-SJ(已經獲得該課程的慕課網老師的同意)

而且後面自己也封裝了一個純 React Natice 的 UI 元件,一份程式碼同時支援 iOS 和 安卓,現在在我的 Github 上有開源:react-naive-highly-customizable-action-sheet

兩篇部落格的地址:

第四階段

第四個階段的寫作內容集中在程式碼規範上面,原因是當時有小團隊了,感覺需要有一些規範需要實踐,所以就蒐集了一些關於程式碼規範的書籍和部落格,整理了一套自己的 iOS 開發程式碼規範。有以下兩篇部落格:

第五階段

第五階段的寫作內容集中在資料結構和演算法,原因是想提升自己的基本素質。因為畢竟是非科班,所以這方面不能落下。經過一段時間的學習和總結之後,開啟了資料結構&演算法 in Swift的系列:

本來打算把這個系列堅持寫下去的,但是由於面試和新工作的關係,這個系列的第二篇的後面就沒有更新了。

等現在連載的物件導向設計系列結束以後會繼續更新這個系列。因為目前來看,物件導向設計方面的學習任務的優先順序比較高,原因會在下面說一下。

第六階段

第六階段的寫作內容集中在物件導向設計方面。因為新公司的任務有很大一部分在SDK的維護和開發上面,所以這部分我想快速學習一下,這樣對後面的工作會比較有幫助。有以下幾篇部落格:

這個系列的所有Demo和UML類圖我也有在GitHub上維護:object-oriented-design

部落格資料

我從寫技術部落格中收穫到了什麼?- J_Knight_

以上就是關於我部落格的一些資訊,下面統計一下我在各平臺部落格的一些資料:

平臺 粉絲數 文章數 閱讀數 喜歡數 閱讀數/喜歡數
掘金 10043 27 131393 4534 28.97
簡書 4785 58 183642 3806 48.25

根據閱讀數/喜歡數這項資料可以大致看出在掘金上的部落格質量是高於簡書的。主要是因為在從簡書遷移到掘金的時候是挑選了在簡書上質量相對高的那部分文章;而且後面在掘金寫的部落格也逐步更加註重了質量。

寫技術部落格的收穫

我從寫技術部落格中收穫到了什麼?- J_Knight_

關於寫部落格給我帶來的收穫,我覺得由淺入深可以分為以下幾點:

  1. 粉絲和影響力
  2. 對知識的掌握
  3. 面試機會
  4. 語言的組織能力
  5. 做事力求做到最好的品質

前三點是比較直觀的,也是大多數人都比較容易看到的:

  1. 一個好的部落格往往有大量的粉絲,也增加了博主的影響力。
  2. 寫部落格也會加深對知識的理解,因為畢竟是自己組織語言然後給其他人講一次。
  3. 現在不少面試要求的加分項裡面都有“有技術部落格或GitHub“這一項。因此有部落格的話可能會給面試者多帶來一些面試機會。

相對於前三點,第四第五點是相對來說比較隱性的,但對我來說卻是收穫最大的兩點。尤其是第五點,給我帶來的”收益“遠大於上面四點的總和。

關於第四點:因為我希望自己寫出來的東西可以很容易被其他人理解(包括我自己),所以寫出來的東西我會不斷推敲和修改。就是在這樣長期反覆的過程中,我發現自己語言組織能力,描述事情的能力提升了很多,這些其實也是溝通能力的一部分,所以也對我平時在工作和生活中和他人的溝通有了比較大的幫助。

對於第五點我在這裡著重說一下:在寫部落格的過程中我養成了做事力求做到最好的品質。

一篇部落格寫出來,會花費博主的一些時間;看部落格的人同樣也是會花費一些時間。那麼既然雙方都在花時間,為什麼不讓這些時間變得有意義呢?因為一篇部落格可以寫的很精彩,也可以寫的很一般:寫的精彩,其實是雙贏;而寫的一般,其實大家都沒啥太好的收穫。

而且隨著我的粉絲量的增多,我對自己的文章的要求就越來越高:無論是文章質量還是給讀者的閱讀體驗上我都會花費心思去琢磨:如何可以給讀者高質量的知識,如何可以讓讀者很容易吸收我所寫的東西?因為可能後面能看到我的部落格的人會越來越多,而且我身上的一些標籤也不容許我對部落格質量的疏忽。

就拿我最近分享的設計原則的這篇文章來說:物件導向設計的六大設計原則(附 Demo & UML類圖)

物件導向設計的設計原則其實網上和很多書籍都有提及,如果我自己來寫的話我完全可以隨便摘錄一些文字再自己改一改放上去就可以了。

  • 但就算是用自己的話講的很明白,那為何不在每個設計原則裡面加一個實際的Demo更直觀地驗證一下呢?
  • 而且就算是有了理論和Demo,那為何不在每個Demo旁邊再加一個 UML 類圖讓人更清晰得看一下Demo中類和類之間的關係呢?
  • 最後,每個原則的使用都是有原因的,不遵循這條原則和遵循這條原則的結果可能是截然不同的,那麼為何不在每個原則的講解後面加上兩套 Demo 和 UML,一個是遵循該條原則的,另一個是不遵循該條原則的,好讓讀者可以更好地對比一下用和不用這個原則所帶來的不同影響是什麼呢?

所以,最開始我是想把這篇部落格寫成這樣:只有6個原則的理論性知識。但是後來隨著對自己的要求的不斷提高,最後把部落格寫成了這樣:6個原則的理論知識 + 12個Demo + 12個 UML 類圖 + GitHub開源object-oriented-design)。

原本這篇部落格的排期只有<2個星期,但是實際上從開始學習到釋出部落格經過了4個星期。因為當時我還不會畫 UML 類圖,於是就花了一點時間學了一下。而且大多數Demo的場景是根據看過的示例舉一反三出來的,也花了一點時間,因為我覺得只有自己想出來的才是自己的,自己理解好了,其他人看的也明白。

我相信我今後的部落格也會按照這個方式去寫:可能有一個最初的規劃,但是因為不斷迫使自己做到最好,會不斷地把部落格寫到更高的水平。

其實我也不知道養成這個品質的原因究竟是哪一個,可以說是為了粉絲量,提高影響力,也可以說是為了分享知識,也可以說是為了想自己學好,我覺得可能每個都有吧,但是這些可以歸納總結出一個點來:那就是對我和對粉絲(讀者)的負責。所以也可以說是這種對所有人的責任心養成了這個品質吧。

那麼為什麼說這個品質是我最大的收穫呢?因為這個品質不僅僅影響了我寫部落格這單單一個方面,它還在影響這我工作、生活的方方面面,包括現在,也包括未來

舉一個生活中的例子: 有我微信的朋友都應該都知道我在減肥,因為我在9月中旬的時候立了一個Flag:每瘦5斤就會發一張當時顯示當時體重的照片。現在是12月初,到現在經過了2個多月,這種照片我一共有4張了(包括第一張),也就是說我已經瘦了15斤了,而且還在變瘦,昨天稱了一下,體重是73公斤,比最初的體重82公斤少了9公斤,也就是18斤。所以說再過一週我應該可以再發一張照片了,紀念我瘦的第四個5斤。

看到我發了這幾張照片之後,陸續有很多朋友問我是怎麼減的。我在這裡簡單說一下:訓練以無氧訓練(舉鐵)結合 HIIT 運動的方式,時間比例大致為5:1(我幾乎從來不跑步,因為跑步的減脂能力很低效)。工作日的午餐晚餐基本都是吃沙拉,但都是高蛋白高碳水的沙拉,沙拉醬只用油醋汁,因為普通的沙拉醬熱量太高了。沙拉都是用的外賣訂的。從9月中旬到現在一共吃了100+頓了,偶爾週末會吃一點油膩的東西。但是每天的早餐一定是吃牛奶和全麥麵包,不會吃煎餅或者肉包那些帶油的東西。

如果按照計劃下個星期結束的時候我可以瘦到72公斤的話,那麼從減肥開始到目前為止就是用了11個星期(不到3個月)瘦了20斤,平均每個星期瘦了將近2斤,這個成績應該算不錯了。

因為我覺得既然是花時間做這件事情,就要做到最好:從運動的強度以及飲食的搭配都要做到最好。

  • 雖然是在運動,但是一日三餐還是老樣子,沒有規劃,這不算做到最好;
  • 雖然吃得很少,但是運動強度也很低,每天花費大量時間去低速跑步,這也不算做到最好。

畢竟工作比較忙,也需要時間和精力;運動也需要盡全力去做,以最短的時間達到最好的成果,早日練出更好的體質,對後面的工作也有幫助。

其他的一些例子就不舉了,總之我很高興寫部落格帶給我的這一個品質,這個收穫也是我最想分享給大家的,而不是其他表面上的收穫粉絲,影響力之類的,因為某個品質會影響做的有關的所有的事情。

回答一些朋友(或粉絲)的一些關於寫部落格的幾個問題

我從寫技術部落格中收穫到了什麼?- J_Knight_

在本篇最後,我來分享一下一些經常被朋友(或粉絲)經常問我的關於寫部落格的幾個問題,以及我的回答是什麼。

寫部落格應該很花時間吧,你如何平衡工作和學習的?

這個問題還有一個類似的問題就是“你是如何做到這麼高產的?”

其實高產倒談不上了,我只是一直在堅持寫而已,而且今年的部落格數量較前兩年來講還是比較少的。

關於這類問題我的回答有兩點:

  1. 寫部落格確實很花時間,但也不是很花時間。
  2. 因為我的部落格多數其實來源於工作內容相關的學習筆記。因此並不需要花費太多心思來去平衡工作和學習。

關於第一點:

  • 為什麼說寫部落格花時間呢?

這裡說的花時間,是指時間的總量:因為寫一篇高質量的部落格所花費的總時間確實很長:為了可以讓讀者有所收穫,你需要從內容,措辭,配圖,排版等多個方面下功夫,而這些地方都是需要花時間的。

  • 為什麼又說不是很花時間呢?

因為如果你可以善於利用碎片時間,就可以把大量的大塊時間分散掉,因此實際上是節省了時間。而且我的部落格基本都是來源於平時的學習,而平時的學習又是和工作相關的,所以邊工作邊學,其實部落格也就完成三分之一了。

下面舉一個我自己的例子:

其實我的大部分的部落格的原型就是我的學習筆記。既然是學習筆記,那麼就肯定不是一氣呵成的,它需要不斷地通過學習來積累,可能跨度上需要幾個星期。比如看一本書的時候,看過的章節可以記一下筆記,但是不會每天花費大塊時間來做這件事,堅持小步快跑,幾個星期就可以搞定一本書(或者第三方框架的原始碼)的筆記。

筆記做好了之後,就可以新增一些內容,將它轉化為部落格。新增的內容可能是配圖,遞進的語句,總結性的語句(這些也可以平時複習筆記的時候新增)。而這些操作可以不需要花費太多的精力來做,因為有關的內容已經通過筆記提煉一次了,你需要做的只是讓筆記變得更加容易被其他人理解

那麼既然不需要花費太多精力來做,你就完全可以利用碎片時間來做這些:比如排隊,等電梯的時間,等地鐵的時間,工作日的晚上休息時間,週末看完一場電影后的休息時間等等。 我為了可以隨時複習和修改筆記,將筆記放在了有道筆記和evernote裡面,所以即使在外面也可以不斷修改和提煉筆記和部落格。而且在平時走路的時候(確保周圍環境安全的前提下)也會反覆推敲自己寫的東西,看是否可以寫得更好等等。

我覺得善於利用碎片時間是時間管理上很重要的一環,這一點在大學時讀《暗時間》的時候對我就很有啟發,直到現在我對作者劉未鵬將人的大腦比作CPU的那段文字的印象仍然非常深刻。

劉未鵬先生是一位優秀的軟體工程師,這本書對我個人的影響非常大,也推薦大家來閱讀。

說了這麼多,其實上面的文字可以總結為兩點:

  1. 部落格來源於學習,而你的學習如果來源於工作上的學習和總結的話,那麼等你學完,總結完之後,部落格其實也就已經完成了三分之一了。
  2. 部落格並不是一氣呵成的,它需要反覆提煉,而且也不需要每次都花費大量的大塊時間來做,畢竟對於已經上班的人來說不會有太多大塊時間來學習。如果你善於利用碎片時間,就可以將時間總量打散,利用那些原本你要浪費掉的時間,從而起到節省時間的作用。

我覺得你的學習能力很強,學得很快;你的學習方法是什麼?

這裡首先需要澄清一個事實:

說實話我覺得我的資質還是很一般的,而且學習方法也不見得很高明。之所以會給其他人諸如這個問題的這種錯覺是因為我在背後其實是利用了大量的時間來學習,寫部落格的;也就是說在同樣的時間內,我相信那些資質更好的人會比我學得更好。

為什麼說我有大量的時間來學習呢?

因為這3年來在休息的時間基本沒有去遠一些的地方玩過,也沒有玩兒過什麼遊戲(吃雞隻玩兒過3局,LOL和農藥沒玩兒過),社交活動也不是很多,只是和特別熟的朋友以及家人聚過。因此雖然資質不及別人,但是學習的時間我相信還是比一部分人多的。

上面說的是時間,至於學習方法,我可以簡單介紹一下,因為其實本來我也沒有太高深的技巧。

我個人使用的一個學習模型可以參考下圖:

我從寫技術部落格中收穫到了什麼?- J_Knight_

根據上圖的流程指向大家應該知道各個節點之間的關係了,下面我分別介紹一下每個節點都做什麼:

選取學習主題

其實我個人覺得選取學習主題對於每個階段學習的重要程度是非常大的,因為它會決定你在短期之內的學習質量以及學習成果。

為什麼這麼說呢?

  • 因為如果學習主題選擇得過於難,那麼會很容易打擊學習積極性,會很難堅持下去;
  • 而如果選擇的學習主題過於簡單,雖然學起來很快,但是可能實際對技術上的提升沒有太大幫助(當然會有一些需要緊急學習,但是內容簡單的東西,這類事情優先順序比較高,即使是過於簡單也可以先學會)

因此,我認為在選取學習主題時:在優先順序差不多的幾個學習主題中選擇的話,你需要選擇一個相對於你現在的水平來說“比較難學會”的主題來學習。比較難就是說不簡單但是你還是可以搞定的。這樣一來,如果你完成了學習,不但可以在技術上有一小步的提升,還可以增強自信,帶著這份自信進入下一輪學習。及時短時間內完不成,你也可以慢慢來,因為畢竟對你來說並不是不可能,你不會輕易放棄。

收集多種高質量的資料

橫看成嶺側成峰, 遠近高低各不同

在學習主題定下來之後,你就需要選取相關的學習資料了。我個人的習慣是選取多種,高質量的資料。比如在學習設計模式的時候,我會找到很多講解的比較好的部落格,教程以及經典書籍同時一起看:

因為不同的人可能對同一個事物有不同的看法,所以通過閱讀,整理多個人對同一事件的描述可以讓自己更深刻,更多角度地理解這個問題,然後再結合自己的理解,就會理解的很快,也比較透徹。

高質量這一塊就不用多說了,選資料的時候肯定是選那些權威,口碑佳的內容。

做筆記

好記性不如爛筆頭

做筆記不僅僅是為了記錄知識,更重要的是知識資訊的質量。因為已經記錄下來了,後面可以反覆查閱和琢磨,不斷提高對知識的理解程度。

關於筆記的內容:

記筆記的時候不能一味地摘錄和複製貼上:雖然可以在開始的時候這樣做,但是後面一定要加上自己的理解,而且這些自己的理解所佔的比重應該在筆記裡面越來越多才是,因為只有自己說的才是你自己的。

關於做筆記的方式:

做筆記的方式有很多種,我個人比較喜歡有云功能的筆記軟體,比如有道筆記和evernote,這兩個都支援多端。平時在外面也可以在手機上面修改和閱讀。

複習,總結

溫故而知新,可以為師矣

很多時候可以通過複習來體悟出更多的內容,而且複習也可以避免忘記知識,一舉兩得。複習的時候無論是否有新的想法,都要嘗試自己是否還可以再總結出什麼新的東西來,這也可以幫助自己對知識理解的更好。

就比如之前學設計模式的時候,當時覺得自己對介面卡模式比較瞭解了,但是當自己假想一個場景並實現的時候就覺得自己對這些角色之間的關係理解的並不是很透徹。所以只能不斷去思考,動手去畫圖,才真正可以將一個假象的場景準確實踐出來。

實踐

實踐是檢驗真理的唯一標準

“不知道自己不知道”是比較危險的一件事情,有的時候我們可能會覺得這個知識點完全理解了,但是當到實際操作中可能會出現各種各樣的問題。 因此,在理論學習之後,需要去用實踐來驗證我們的理解是否正確。如果有這個條件最好,但是如果沒有這個條件,我們就需要建立條件去做。

反饋

不能只是實踐就結束了,實踐的結果要知道是對是錯。而且無論對還是錯都要總結一下原因是什麼,還有什麼可以改進的地方,總結之後放在筆記裡面,形成一個迴圈。

如何寫出一篇好(受歡迎)的技術文章?

我從寫技術部落格中收穫到了什麼?- J_Knight_

這個問題多數來自於一些準備打算寫部落格或者是一些已經寫部落格但是感覺寫出來的部落格受歡迎程度不如預期的朋友們。

如果將這個問題完全展開來說,我應該可以寫出非常多的內容,但是因為這一部分不是本文章要分享的重點,所以就不完全展開說了。

如果給我反饋表示感興趣的朋友比較多的話,我後面就會專門寫一篇文章分享一下,有這個意願的朋友可以在下方留個言。

那麼在本文中,關於這個問題我想說的是:文章的受歡迎程度很大程度上取決於你是否真的致力於把你的知識分享給別人

有些人寫部落格是寫給自己的,當做一種筆記來儲存;有些人寫部落格的目的除了寫給自己,還包括讓別人去看自己的文章。而無論是寫給自己還是寫給別人,一旦你的部落格放在了公開的平臺上面,其實就是在分享你的部落格,你的知識。

因此,如果你寫部落格只是寫給你自己的,你需要經常問自己:我真的理解自己寫的東西麼?

如果寫部落格還為了分享這第二個目的,你還需要經常問自己:讀者看自己寫的東西,會很容易理解麼,真的會有收穫麼?

其實我上文中也已經說過,我把部落格寫好的的動力來源是對讀者,對我自己負責。寫出一篇對自己,對讀者負責人的部落格,是對雙方都是有好處的。

有了這個中心思想以後,在行動上就會不斷鞭策自己寫出更好的文章,自然而然你部落格的質量以及受歡迎程度就會越來越高。

除了內容的質量之外,其實部落格的深度以及主題也影響著部落格的受歡迎程度。“陽春白雪,下里巴人”大家應該都聽過。即使是內容特別好,但是文章深度非常深,很少人能理解的話,可能受歡迎程度會很不如預期。但是這一點不與上面討論的點衝突。

最後還有一點就是所謂的標題黨:雖然內容比較差但是標題引人入勝的文章可能閱讀量會很高,但是這並不代表它真的受歡迎。我個人並不是很推崇這種方式,我還是比較喜歡和文章內容非常契合,中規中矩的文章標題的,大家觀察我的部落格應該可以發現我部落格標題的特點,一般是沒有多餘的字的。

OK,到這裡我的所有心得就分享完了,希望無論您看完這篇文章之後是打算寫還是不寫部落格都能會對您有所幫助。

我覺得在文章結尾還是要多囉嗦兩句:我這裡沒有說只要做技術的人就一定要有技術部落格,也不是呼籲所有做技術的人都去寫技術部落格。

因為每個人的自身情況不同,選擇什麼樣的方式也是自己的自由。但是無論怎麼樣,我們都希望自己所在的(技術)環境能更好不是麼?這也是我寫這篇文章的核心目的。

可以瞭解我的一些渠道

我從寫技術部落格中收穫到了什麼?- J_Knight_

下面是我的一些部落格平臺,GitHub,以及公眾號的連結,想進一步瞭解我,或是想看我的技術部落格的朋友可以從這些渠道進入。

我從寫技術部落格中收穫到了什麼?- J_Knight_

特別需要說的是公眾號裡面除了會發一些技術文章以外,還會有一些個人思考和技術&非技術的讀書筆記。

本篇已同步到我的個人部落格:我從寫技術部落格中收穫到了什麼 - J_Knight_

相關文章