(原本想透過自己自學的歷程來分享一些經驗的,但發現自己廢話太多所以先寫了這篇文章)
 我不算是什麼自學達人有特殊的學習方式,我覺得最重要的只有毅力,其他小技巧或是別人的經驗都只是讓你少繞一點路而已,所以這篇文章只是提供一些個人主觀的意見,希望能對同樣在自學的朋友們有幫助

不要只看教材而不練習

工作上用不到的技能,如果光是看教材而沒有練習的話很容易忘記,變成浪費時間。試想考大學時就算反覆念同一樣一科考選擇題都不一定會對了,你現在有可能把一本書或是網路課程看過一遍就汲取到精華嗎

找到合適的 Mentor

有句話是這麼說的:「你不知道你不知道的事」,相信很多人在初學很多東西的時候,遇到問題想 Google 連關鍵字都不知道該怎麼下;mentor 就是來告訴你這些你不知道的東西,讓你可以很快地搞清楚問題的重點或是該去哪邊找答案,把時間真的花在解決問題上
 除此之外,經驗豐富的 mentor 還能勾勒出未來你可以發展的方向,以及一路上需要準備的技能(一個幫你畫技能樹的概念),讓你比起自己摸索少走不少冤枉路

不管如何都不要中斷

持續學習會有累加效果,這點我想在很多大大的分享裡面都有提過,帶來的效益應該不用我多說明。這方面我覺得自學得像是慢跑一樣,可以調整速率,甚至有時候可以到很慢,但絕對不要變成用走的甚至停下來,因為你會喪失前面累積的成長速度

評估不同學習方式

持續評估不同學習途徑,並以此持續調整當下採用的方式。以下是我個人的心得:

  • MOOC:需要一段時間(通常一到兩個月)都專心投入在上面,很難同時維持其他的學習途徑,此外工作忙的時候也會感到壓力很大。最好是事先規劃好一段時間針對某堂課程排開時間,才會達到比較好的效果以及不會半途而廢。另外買證書除了當證明之外,對我個人來說可以增加非常多學習動力XD
  • 書籍:書籍又分兩種,實作類的與非實作類的
  • 實作類的書通常會是要用單一範例來傳達一個完整觀念的,所以一定要整本書走完。不過我除了會照書上講的做以外,通常都會事先看內容敘述,跳過書本的範例自己先試著實作一次,把每一個段落都當成練習來寫。雖然幾乎每次寫出來的都不是最佳解甚至搞錯方向,但透過這樣才可以更深刻理解作者選擇那條途徑的用意
  • 非實作類的書通常是分章節講許多觀念,所以我不一定會整本翻完,但只要有看的地方都會盡量看到懂為止。我覺得只要有完整吸收到某部分的知識就很值得了,不求一定要把整本書看完
  • 網路文章:基本上閱讀文章應該很難作為加深一個領域的方式,畢竟內容太零散了,但很適合增加自己視野的廣度,比如了解不同的架構設計原理、蒐集對於某議題的不同看法或是一些 Coding 技巧等等。也就是說不用太執著於細讀每篇文章,應該著重於多看。而以這角度出發的話,多看電子報(例如湾区日报)或是一些網摘會是不錯的選擇,你甚至不用點進去就可以大概知道那篇文章的內容了。而我的習慣是看到文章(來源可能是電子報 or RSS feed 等等)就先掃一下大概內容,覺得值得收藏的就丟 Pocket,之後再來看(這邊推薦一個叫 reread.io 的服務,他可以幫你每天 archive Pocket 的文章然後寄到你信箱)。

找個專門集中精神的場所

人在特定的環境下會有對應的心態跟反應(例如進教室就想睡覺),所以可以找一個地方專門進行學習,像我個人就選了幾間咖啡廳作為專心寫程式或看書時去的場所,每次一進去就可以比較容易進入專心的狀態

持續調整學習心態

學習的路上不會一直都是維持一樣的強度跟成長幅度,當成長到一個程度之後,要再進到下一個階段的難度會以倍數成長
 例如我貢獻一般中小型的 open source 專案大概只需要十幾個小時就能寫完我要的功能;但是換成參與大型專案的時候,光是閱讀程式碼搞懂現有運作機制就花了三十幾個小時,更不用說後面的開始實作跟修正所花的時間了。所以說這時如果我還是用過去的心態來面對新的挑戰的話,很容易會耐不住性子或是覺得挫折就放棄
 換句話說,在學習的過程中要一直知道自己現在在哪個階段、下一步要跨到哪裡,而卡在中間的門檻有多高。這樣才能用正確的心態面對下一階段的挑戰,不會因為沒做足充分準備而感到異常挫折或卡關