認真談談如何建立知識體系
時間:2021-10-20 16:48:23
手機看文章
掃描二維碼
隨時隨地手機看文章
[導讀]經常會有同學問我:“我感覺我的知識非常凌亂,該如何讓自己的知識成體系?”今天我們就來好好盤一盤這個問題。話不多說,發(fā)車!深度VS廣度每個人在想要開始認真學習的時候,一般都會在網上搜索,需要看哪些書,學習哪方面的知識,然后會找很多視頻教程,或者買很多書,信心滿滿,打算大干一場。其實...
經常會有同學問我:“我感覺我的知識非常凌亂,該如何讓自己的知識成體系?”今天我們就來好好盤一盤這個問題。話不多說,發(fā)車!
深度 VS 廣度
每個人在想要開始認真學習的時候,一般都會在網上搜索,需要看哪些書,學習哪方面的知識,然后會找很多視頻教程,或者買很多書,信心滿滿,打算大干一場。其實有關計算機體系的基礎知識面掰掰手指也就幾種:計算組成原理、操作系統(tǒng)、計算機網絡、數據結構。基本上非科班出身的小伙伴都會缺少對基礎知識面的學習,這個是基石,需要補上。當然科班出身的沒學好的也很多,也需要補。然后還需要學習:關系型數據庫、非關系型數據庫、常見框架、常見中間件。這一點我相信大部分人都會學。比如MySQL、Redis、Spring、SpringCloud、RabbitMQ等等,因為這是日常工作上經常會使用的東西,所以都會主動去學。還有一些語言我就不提了,這屬于工具,工具用的溜編碼效率才會高,但是也不能僅僅浮在語言表面,像 Java 你好歹也得了解下 JVM,比如看看周志明老師的《深入理解Java虛擬機》。以上提到的這么些點都需要我們去學習。然后問題就出現了:每個點都淺嘗輒止還是死磕到底?我建議的選擇:雨露均沾,也就是先廣度再深度。其實不僅僅是計算機領域,在很多其他領域也都一樣,你需要把你的知識面鋪廣,你才能有機會走的更遠。當你不知道一樣東西的時候,你打破腦袋都想不到它。無中生有?不存在的!同理,只有當你了解方方面面的知識,在遇到一個問題,或看一段奇怪的代碼,你才能聯想到那個知識點,才會有豁然開朗的感覺。比如我之前寫的 Dubbo 源碼里面的一段奇怪代碼,把一個 state 從 switch 里面抽出來單獨成一個 if 判斷:沒有相關的知識你想不到這會涉及到字節(jié)碼的實現:if 和 switch 字節(jié)碼層面實現的不同。然后再深入到 CPU 的分支預測。沒錯,就這一段代碼穿過了 JVM 到達了 CPU 執(zhí)行層面的優(yōu)化思想。你要是不知道這些,你壓根就不會想到這種寫法。所以我們優(yōu)先廣度。前幾天看周志明老師直播的時候,周老師提到了金字塔理論。也就說我們的底部要廣,頂部才會尖,先廣才能尖。有了廣度知識的支撐,我們才有能力且更加高效、快速地深入。究其原因是因為計算機體系的知識點是連通而不是分散的,你寫的程序必定運行在硬件之上,必定受操作系統(tǒng)管理,必定要運用到各種數據結構與算法,絕大部分會涉及到網絡通信。所以我們不是無腦廣,我們是選擇性的廣。當你廣到一定程度會有一種感覺,一種從上到下通透的感覺。然后你才有能力去選擇一個方向深入研究,最終成為上面金字塔般的大神。
更高效的學習
明白了先廣度學習之后,我們再來聊聊如果高效的學習。系統(tǒng)的學習我推薦看書。但經常有同學說,為啥每次我看完一本書,然后就沒有然后了,啥都沒記??!我拋磚引玉,介紹下我的看書方式。我看書會看多遍。第一遍快速瀏覽雖說看目錄可以得知書籍的大概知識點,但是幾個字不可能涵蓋一章的所有知識,所以我會快速的過一遍,知曉這本書講述了哪些重要的知識,到哪個深度,一些重要的點我會先把書頁折起來,電子版我會記錄書頁。看完第一遍后,如果對我而言是畢竟陌生的知識點,我肯定會讀第二遍。但一些畢竟熟悉的知識點我會判斷是否值得繼續(xù)看第二遍。
第二遍開始做筆記如果選擇看第二遍,我就會開始仔細的讀,同時會記錄筆記。我不喜歡把筆記記錄在書上,因為這樣之后復習還得翻一遍書,效率很低。我喜歡在在線文檔上劃分出各個知識點,然后會將不同書籍對同一個知識點的不一樣的理解記錄在一起,這很有意思,因為每個作者理解的角度都會有所不同,可以讓你從更多的角度去理解這個知識點。并且在復習的時候,我可以針對某個知識點快速找到所有相關的知識,這不香嗎?好了,沒有第三遍,我一般讀兩遍這本書就不看了,因為精華都被我記錄在筆記上了,復習的時候我只要針對筆記看就行了,舒服舒服。所以記錄筆記很關鍵。