背景:
作為一名程序員,我們身邊的技術時刻在更新換代。
就拿Web來說,最開始只有HTML、然后才有了CSS,再之后才有了Ajax等等。 現在整個Web開發的知識積累量已經非常龐大。這么多需要學習的知識一擁而上,很容易讓我們不知所措,不知從何學起,就像一只無頭蒼蠅。
最近一直有其他實驗室同學來找我請教如何入門一個新領域;同時也發現自己室友整天抱着一大厚本《Python基礎教程》一頁一頁得翻(之前抱着一本QT相關的大部頭在看,現在放棄了,又找了一本····研究生啊,就這么學習技術嗎?還不如滾去看論文。。。),發現許多同學在這方面有很多疑惑,故此分享並總結。
那么對於想自學接觸新領域,如何系統的入門並深入一門新領域呢?下面我想針對自己近一年學習新技術的方法做一個總結。
本科的時候,我也會像大多人一樣,接觸一門新技術時,買來一本網上推薦的書籍,從頭一股腦兒的往后看。開始幾天還好,剛接觸的好奇心與興奮勁兒促使你專心看書。而且可能一天結束,自己獲得很多滿足感,自認為收獲滿滿。自己就這樣持續一周,以這種方式忘我地學着。等着這股興奮勁兒過了,學習效率也越來越低,慢慢地,就會拿出手機來玩兒,到后來越來也不想看,覺得書里寫的真沒意思。逐漸地,自己就不想碰這本書了。(即使最后自己堅持看完這本書,感覺自己學了這么多,但是怎么還是什么都不會啊···)
自省一下可能覺得,只看書效果並不好,就從網上找來相關技術培訓視頻來看,這個過程可能比看書興奮勁兒更持久一下,因為視頻里教的案例程序,自己運行出來的話,是很有成就感。就這樣跟着教學視頻天天學、天天練。學個過程可能很有樂趣,但是看完教學視頻之后,才發現自己只能開發出視頻里教過的程序,只要改變一下,就立刻不會了。(好多培訓班就是在制造這種假象,給你講的時候,講的很有意思,演示的實例也很有趣,培訓完之后讓你覺得什么都會了。其實培訓班教的知識並不深入,只是淺顯的表面開發,底層原理甚至都不知道。自己很反感程序員速成班!)
后來,上了研究生后。導師交給我一個爬取“歷年各高校在全國各省市各專業的錄取分數線”的任務,任務很緊。 在這之前,我甚至不知道爬蟲是什么,用什么語言開發,怎么去爬取數據。因為時間緊、任務重,我查閱相關資料了解了一下爬蟲是什么,用很短時間過了一下爬蟲的講解視頻,網上找了幾個python爬蟲示例程序,自己運行並分析了一下源碼。
然后就改造程序,實現對一個頁面內高考數據的爬取,之后拓展至大量頁面;又發現頻繁訪問目標網站,會彈出驗證碼,需要打碼;有時還會導致IP被封禁;后來又發現需要爬取動態頁面;需要建立多線程來提高爬取策略。就這樣我每天都在自己的原始程序上添磚加瓦,最后實現了一個自動化的高效爬蟲。而整個過程下來,也將網絡爬蟲技術從頭到尾學了一個遍,關鍵問題自己該遇到的都遇到並解決了。
這個過程,自己不僅系統並全面的了解了爬蟲技術,也對Python有了基本掌握。在完成這個任務之后,我找了相關書籍,將網絡數據爬取的知識系統的學習了一便,並知道了之前為什么要這么做,解決了自己很多的疑惑。同時也將python中一些常用的自己沒遇到的基礎知識補充了一下。 (整個過程很高效、也很有成就感。)
在這之后,我便用這種“以用促學”的方法來學習新的領域技術。包括最近在學的區塊鏈技術也是如此,我先對區塊鏈的整體有了個大概了解,知道了里邊一些專有名詞,及用到的技術。然后在對區塊鏈的開發有個基礎了解。建立了這個框架之后,我再分別去攻克其中的核心原理。最后再准備開發一個自己想做的Dapp(已經想好,學一點進行一點)。
今天在看公眾號時,發現已經有人系統地總結過類似的學習方法【輪次知識樹學習法】。自己學習方法與之相似又不太一樣,下面根據前人的方法對自己的學習方法做一個總結分享:
[此方法不可能適合所有人,僅作為沒有自己的學習方法的同學借鑒,如有更高效方法,歡迎分享!]
總結:「以用促學知識樹學習法」
1. 以用促學:
首先先對一個技術有個大概的了解,至少知道其是干什么的,整體原理是什么。
再確定一個開發項目,一邊查找網上資料一邊拼命實現!(不要擔心自己一點基礎沒有,如何開發呀? 別擔心,網上很多資料,哪里不會查哪里。千萬不要抱着一本大部頭去一頁一頁地讀,你需要做得是不會哪里查哪里!)。這樣,根據一個具體的開發任務,使我們對整個知識體系有個大概的了解。然后再具體分析項目背后的技術。
2. 分析項目:
作為初學者,我們不奢求一次吃個胖子。我們需要根據以上項目,分多次來學習。(實際上你想一口吃個胖子,也是不可能滴!)
第一遍看全局,知道有哪些東西,每一部分都是干什么用的,哪些重要,哪些不重要。
第二遍重原理,從最核心的原理出發,一步一步嘗試以最短的路徑走通整個流程,完成核心任務。
這樣下來,每次的學習難度降低了不少,而我們對知識的理解卻深入了很多。
3. 梳理知識樹:
對項目有了全局了解,知道其開發過程、及用到的相關技術之后。我們需要在理解本質和原理的基礎上,梳理出一顆知識樹。在這棵樹上,我們應該可以清晰的看到哪些知識是核心、那些知識是周邊,我們為什么要學它、學了它能用到哪些地方。務必注意:知識點並不是平等的,我們一定要抓住關鍵知識,不能眉毛胡子一把抓!
另外,每個人的知識樹可能不一樣,這棵樹會隨着你的理解進行調整。初學者往往很難立馬建立起來完整的知識樹,這時候可以借助網上一些學習路線圖作為樣本。
梳理出知識樹后,我們相當於用一根繩,將這些知識分門別類的串了起來。哪些知識干什么用,變得清清楚楚。
把那些周邊知識先扔一邊,重點攻克那些主干知識,就能從中殺出一條血路來,等主干知識鞏固好了,再慢慢回來補周邊知識。
(20180621更新)補充一點:
上邊自己沒說太清楚。
到了這個過程,大家還是要認真看書的,並非萬事大吉了。因為上邊過程學到的知識還是片面的。到了這個過程,還需要拿起書來看!
不僅是查漏補缺,還是對知識的系統化、全面化。
到這里再看書,我們就能夠對不同知識點的權重有了認識,知道哪些關鍵,那些次要。突出重點,提高學習效率!
有一個系統全面的基礎很重要!
4. 回顧提升:
我們對領域知識有了系統的學習之后,需要再回過頭來,回顧下之前的項目。對之前的項目有一個重新的審視,我們會發現,之前實現的許多方法可能很低級、或是項目存在可以優化的地方,這就是一個總結提高的過程。
第三遍補周邊,把之前做的方案拿出來,看看哪些地方可以優化,哪些地方能做得更好。
【 時間倉促,如有錯誤,歡迎指正! || 歡迎留下您的評語! 大家一起探討、學習區塊鏈!】
【 轉載請注明出處!http://www.cnblogs.com/X-knight/】