最近在《極客時間》上購買了 Winter 老師的重學前端這門課程,重新對自己的前端知識做一次查漏和補缺。(Winter 老師是誰?可以檢視這裡)在課程的開篇,Winter 老師提出了一種學習的方法:建立知識體系 以及 追根溯源。
建立知識體系相信大家都有自己的理解。特別是在前端這個知識點又多有分散的圈子裡面更是如此。一幅知識體系的導圖會不會讓人在學習中迷失方向,當然這麼龐大還在不斷擴張的導圖也會勸退不少人。
2015-2016 年的知識體系(引用自:WEB前端知識體系腦圖 )
而追根溯源的方法個人感覺則更為重要。所謂追根溯源,即是尋找一個技術的源頭、發明的背景、解決的問題以及發展的歷史。畢竟計算機是一門解決實際問題的學科,當中用到的知識和解決問題的方法都是有據可循的。如果能通過追根溯源瞭解一個技術被發明的原因以及演變的歷史,對我們理解和掌握這個技術都會有巨大的幫助。
之前在和小夥伴的交流中,小夥伴也有提出過這一學習方法。於是我自己也在複習物件和原型鏈的時候刻意嘗試了一下並寫了兩篇筆記。
發現這樣做確實對自己的理解有幫助,在反推了一下幾種模式的演變以及解決的問題之後,發現這幾種模式也更容易記住了(只要記住一兩種剩下的就可以推出來)。在加入新公司之後,有幸做過一次 JavaScript 基礎的技術分享,查了一下 JavaScript 這門語言發明的原因以及 ECMAScript 的變化過程,對之前不注意的坑又有了一個新的認識。可能這就是“知其所以然”的力量吧。
追根溯源的學習方法,雖然在學習的過程中會多花費一些精力在查詢資料和自己動手推演的過程,但是一旦把一個知識點從源頭“串”起來的話,那麼這個知識點上的大多數問題都不再會是問題了,而與之相關的知識點也能觸類旁通。
這一點在之前幫人面試前端的時候也有一些體會。一些年輕的面試者因為“生於” MVVM 的時代,對於操作 DOM 進行前端開發的“石器時代”並不瞭解。自然也就不熟悉最基本的 DOM 操作了。同樣地,還有前端模組化的變遷。如果沒有了解過引用 script
標籤需要講究順序的時代,可能對模組化、作用域隔離等的理解就未必深刻。而這些如果是從 JQuery 時代過來的前端開發者或者是瞭解過這段歷史的開發者的話,應該會理解起來非常方便(前提是有不斷的思考和學習)。
當然,對“源頭”不熟悉並不會影響我們日常開發。但只要想在前端方面深入,那麼 DOM 操作、瀏覽器原理是自然逃不掉的。那麼屆時,就會對我們自身的提高帶來阻礙。因為無論我們現在的框架有多麼便利、打包工具有多麼的方便,我們真正跑在瀏覽器上的仍然是“石器時代”的那些東西。
前端是如此,那麼推演到程式設計這門學科上,自然便是資料結構與演算法甚至是更底層的原理了。“想要技術上得到提高,就必須要了解計算機原理”這樣的話相信只要是開發者就一定聽過,我想這背後所說的就是要去追根溯源,把知識點“串”起來。如果我們可以以自己的方式,推演一遍的話,相信大部分的知識點肯定就能確實掌握了。正如老子在《道德經》中有說,“有道無術,術尚可求。有術無道,止於術。”