我在第一篇的描述中,有提到我之前的自學過程
從 2011/3 買下 C Programming Language 開始自學
中間讀了 Prmier C++,到 2012年9月13日 星期四 寫下一篇 虛擬函數+動態連結
應該算是學到一個不錯的段落。
花了 20 個月左右的時間。讓自己學會一個語言並且深度還夠深。
這個速度,當時的我並不覺得有什麼特別的,一直到我進了一間軟體公司之後才發現,原來這樣的程度已經算是不錯的了。
這一篇,就來說說自學的習慣與自學的方法。
在過去的國民教育裡,已經證明了我自己一次唸八科無法取得好成績,在我尚未理解這門課教給我的東西時。下一堂課又給我新的東西了。這樣的步調讓我對於學習感到消化不良,也許我學習無法一次面對這麼多樣。
所以,我自己發現,我在大學暑修時,一次只學一門課,我可以心有餘力的邊聽課,邊看另一本書。而且還可以抓對重點並且完成學分,而教授並不會因為暑修而讓難度降低。
但是一次只做一件事,確實會讓人的所有精神力全神貫注的進入一個領域,而且可以做得很好
在好想工作室的 web camp 中,mentor 不見得是對的。(笑)
只是用來倚老賣老的傢伙而已,有問題問 mentor 只是要知道還有沒有什麼是我不知道但老掉牙的東西。
真正新的、正確的東西,要靠自己尋找
我前面有說過喝符水的對話,在「求真」的過程,是一種信仰。
相信辦得到,是一種信仰
因為當未知的問題尚未被證明時,唯一依靠前進的就是信仰的力量。
然後往前進的是一種反覆驗證的方法。
找好書單、看聖經本的書、看規範、找官網文件、github 的 readme、issue tracker,都是必要的。
找課程、看 blog 主要是要引導你到上述的那些東西。看 MDN 就做得很好。
慎選教材是自學者重要的第一步,不會選就走最難而最短的路,看規範以及想辦法看規範。
算命與中醫,都算是可以反覆驗證的事情。但是它們嚴格算起來,不算是科學。那科學是什麼呢?
「科學」不好以簡短文字加以準確定義。一般說來,科學涵蓋三方面含義:
- 觀察:致力於揭示自然真相,而對自然作用由充分的觀察或研究(包括思想實驗),通常指可通過必要的方法進行的,或能通過科學方法——一套用以評價經驗知識的程序而進行的。
- 假設:通過這樣的過程假定組織體系知識的系統性。
- 檢證:藉此驗證研究目標的信度與效度。
能夠經得起懷疑並能夠再次證明的,就是科學。
科學的精神就是: 「在不該懷疑的地方懷疑,懷疑之後進行假設,並且證明懷疑的真假」
只要是發生在網頁前端的世界,唯一真相一定存在於某個地方,而且沒有什麼是解不掉的問題,一定是自己不懂它。
在知識之海定位自己位置的魔法,就是科學精神。讓自己容易尋找對與不對的界線,並且知道目前的位置是真的,還是假的,也是好的學習習慣帶給自己的。
所有的問題,都可以用規範來解釋。
所以要看規範,它是在這個技術世界裡的唯一真相,規範會更新, mentor 有空才會更新。
要了解消失的一百年,只有看歷史本文
所以最新的不一定會在 mentor 腦袋中出現,規範會。但是 mentor 會告訴你「看規範、去相信規範、不要相信 mentor」這樣就可以懷疑不該懷疑並重新驗證,在學員反覆驗證我的過程,我也會學習到新的東西。
以規範為終點,以 blog/stack overflow... 為終點
而反覆的問答與討論的過程,除了可以學習到新的知識之外,還可以解決混合而複雜的問題,將問題分成多個面相,可能可以推測的方向,再使用規範來解釋,與規範不同的時候也要找到瀏覽器的 issue ,不然至少還有 stack overflow 的討論過程。
每個可靠的討論,都會有資料來源或出處,這樣一來就又可以再往深入探索。
最終也許會找到瀏覽器程式碼 (不一定看得懂),但也許可以找到別人的解釋,這習慣不斷的累積起來,會讓你避免遇到到不必要的問題
一些混用問題,就會在正確的觀念當限制之下避開,也會在正確的觀念下引導你寫出高明又精巧的程式碼。
走了一次這麼紮實學習的體驗,這樣的甜頭一定會想用在其它的學習上,一再的一再的學會別的東西,而且有效率。
有一次 Howard 找了幾個他覺得都是不錯的工程師來聊聊,一般的碼農工程師,很難成為好的工程師,而我們各別都怎麼成為現在這個樣子(好的工程師)的呢?
我記得,大部份的人都是「找到一個好的前輩帶我」或「找到一個好的同事帶我」,輪到我,我說「看書」。
那時我好像明白好的工程師的源頭是怎麼產生的了。
先看書並且分享給其它的工程師,就可以量產好的工程師