專欄《高效學習系列》精華筆記程序員
你聽別人講,或是本身看書,或是讓別人演示給你,這些都不能讓你真正得到學習能力,由於你是在被別人灌輸,在聽別人說。算法
只有你開始本身思考,開始本身總結和概括,開始找人交流討論,開始踐行,並開始對外輸出,你纔會掌握到真正的學習能力。編程
學習不是努力讀更多的書,盲目追求閱讀的速度和數量,這會讓人產生低層次的勤奮和成長的感受,這只是在使蠻力。要思辨,要踐行,要總結和概括,不然,你只是在機械地重複某件事,而不會有質的成長的。框架
應該怎樣進行深度學習呢?下面幾點是關鍵。機器學習
換言之,學習有三個步驟工具
我以爲這是任何人都是能夠作到的,就是看你想不想作了。性能
學習不只僅是爲了找到答案,而更是爲了找到方法。只有掌握解題的思路和方法,你纔算得上擁有解決問題的能力。學習
學習不只僅是爲了知道,而更是爲了思考和理解。在學習的過程當中,咱們不是爲了知道某個事的表面是什麼,而是要經過表象去探索其內在的本質和原理。測試
在學習的過程當中,咱們要不斷地問本身,這個技術出現的初衷是什麼?是要解決什麼樣的問題?爲何那個問題要用這種方法解?爲何不能用別的方法解?爲何不能簡單一些?……spa
擁有正確的學習觀念:學習不只僅是爲了找到答案,而更是爲了找到方法;學習不只僅是爲了知道,而更是爲了思考和理解;學習不只僅是爲了開拓眼界,而更是爲了找到本身的未知,爲了瞭解本身;學習不只僅是爲了成長,而更是爲了改變本身,改變本身的思考方式,改變本身的思惟方式,改變本身與生俱來的那些垃圾和低效的算法。
端正的學習態度和正確的學習觀念,是高效學習的第一步,擁有這二者必定可讓你事半功倍。
若是你以爲用百度搜中文關鍵詞就能夠找到本身想要的知識,那麼你必定遠遠落後於這個時代了。若是你用 Google 英文關鍵詞能夠找到本身想要的知識,那麼你算是能跟得上這個時代。若是你能在社區裏跟社區裏的大牛交流獲得答案,那麼你算是領先於這個時代了。
你的信息源要有下面幾個特質。
我說過,不少人並非學得不夠快,而他們的基礎真的不行。基礎不行,會影響你對事物的理解,甚至會讓你不能理解爲何是這樣。當你對事物的出現有不理解的東西時,一般來講,是由於你的基礎知識沒有跟上。
畫知識圖的方式可讓你從一個技術最重要最主幹的地方出發開始遍歷全部的技術細節,也就是畫地圖的方式。若是你不想在知識的海洋中迷路,你須要有一份地圖,因此,學習並非爲了要記憶那些知識點,而是爲了要找到一個知識的地圖,你在這個地圖上能經過關鍵路徑找到你想要的答案。
在學習某個技術的時候,可使用一個學習模板。只有把這個學習模板中的內容都填實了,我才罷休。這個模板以下。
基本上來講,若是你按照我上面所提的這 6 大點來學習一門技術,你必定會學習到技術的精髓,並且學習的高度在一開始就超過不少人了。若是你能這樣堅持 2-3 年,我相信你必定會在某個領域成爲煊赫一時的佼佼者。
我認爲,人與人最大的差異就是觸類旁通的能力。那些聰明的或者是有經驗的人觸類旁通起來真是太使人驚歎。
我以爲一我的的觸類旁通能力,能夠分解成以下三種基本能力。
在這方面,我對本身的訓練以下。
老實說,要得到這三種能力,除了你要很喜歡思考和找其它人來辯論或討論之外,還要看你本身是否真的善於思考,是否有好奇心,是否喜歡打破沙鍋問到底,是否喜歡關注細節,作事是否定真,是否嚴謹……
對本身的知識進行總結和概括是提升學習能力的一個很是重要的手段。這是把一個複雜問題用簡單的語言來描述的能力。
咱們把學到的東西用本身的語言和理解從新組織並表達出來,本質上是對信息進行消化和再加工的過程,這個過程可能會有信息損失,但也可能會有新信息加入,本質上是信息重構的過程。咱們積累的知識越多,在知識間進行聯繫和區辨的能力就越強,對知識進行總結和概括也就越輕鬆。而想要提升總結概括的能力,首先要多閱讀,多積累素材,擴大本身的知識面,多和別人討論,多思辨,從而見多識廣。
咱們須要注意的是,若是隻學了部分知識或者尚未學透,就開始對知識進行總結概括,那麼總結概括出來的知識結構也只能是混亂和幼稚的。所以,學習的開始階段,能夠不急於總結概括,不急於下判斷,作結論,而應該保留部分知識的不肯定性,保持對知識的開放狀態。當對整個知識的理解更深刻,本身站的位置更高之後,總結和概括纔會更有條理。總結概括更可能是在複習中對知識的回顧和重組,而不是一邊學習一邊就總結概括。
作總結概括的方法:把你看到和學習到的信息,歸整好,排列好,關聯好,總之把信息碎片給結構化掉,而後在結構化的信息中,找到規律,找到相通之處,找到共同之處,進行簡化、概括和總結,最終造成一種套路,一種模式,一種通用方法。
要訓練本身這方面的能力,你須要多看一些經典的方法論圖書,看看別人是怎樣總結和概括知識的。你能夠在一開始模仿並把本身的理解的知識給寫出來,寫博客會是一種很好的方式。另一種更好的方式是講一遍給別人聽。總之,你須要把你總結概括的知識公開出來,給別人看,接受別人的批評和反饋,這樣你才能成長得更快。其實,我也在鍛鍊這樣的能力。
書和文檔是人對人說的話,代碼是人對機器說的話(注:代碼中有一部份邏輯是控制流程的邏輯,不是業務邏輯)。因此,
所以,我認爲都比較重要,關鍵看你的目的是什麼了。
若是你想了解一種思想,一種方法,一種原理,一種思路,一種經驗,恐怕,讀書和讀文檔會更有效率一些,由於其中會有做者的思路描述。像 Effective C++ 之類的書,裏面有不少對不一樣用法和設計的推敲,TCP/IP 詳解裏面也會有對 TCP 算法好壞的比較……這些思惟方式能讓你對技術的把握力更強,而光看代碼很難達到這種級別。(如今你知道什麼樣的書是好書了吧 ;-))
若是你想了解的就是具體細節,好比某協程的實現,某個模塊的性能,某個算法的實現,那麼你仍是要去讀代碼的,由於代碼中會有更具體的處理(尤爲是對於一些 edge case 或是代碼技巧方面的內容)。
從學習的過程當中,咱們來分析一下看代碼和看書這兩個活動。人對新事物的學習過程基本都是從「感性認識」到「理性認識」的。
若是你是個新手,那應該多讀代碼,多動手寫代碼,由於你須要的是「感性認識」,這個時候「理性認識」你體會不到。一是由於,你沒有切身的感覺,即使告訴你 Why 你也體會不到。另外一方面,這個階段,你要的不是作漂亮,而是作出來。因此,在新手階段,你會喜歡 GitHub 這樣的東西。
若是你是個老手,你有多年的「感性認識」了,那麼你的成長鬚要更多的「理性認識」。由於這個階段,一方面,你會不知足於作出來,你會想去作更牛更漂亮的東西;另外一方面,你知道的越多,你的問題也越多,你迫切地須要知道 Why!這時,你須要大量地找牛人交流(讀牛人的書,是一種特殊的人與人的交流),因此,這個階段,你會喜歡讀好的書和文章。
然而,對於計算機行業這個技術創新能力超強、技術種類繁多的行業來講,咱們每一個人都既是新手,也是老手。
在閱讀代碼以前,我建議你須要有下面的這些前提再去閱讀代碼,這樣你讀起代碼來會很順暢。
閱讀代碼的方法以下。
對了,閱讀代碼你須要一個很好的 IDE。我記得之前讀 C 和 C++ 代碼時,有一個叫 source insight 的工具就大大提升了個人代碼閱讀效率。說白了就是能夠查看代碼間相互的調用 reference 的工具,這方面 Visual Studio 作得是很是好的。
若是你發現有些知識太過於枯燥,那麼能夠經過下面的方法解決。
我給你的建議是,一點一點學,一口一口吃。你可使用我前面說過的那些方法,注重基礎,畫知識圖,多問爲何,多動手,而後堅持住,哪怕你每週就學一個知識點,你一年也能夠學到 50 個知識點。只要你在進步,總有一天能夠把這些知識學到手的。
固然,你的目的不是學完這些知識,由於學無止境,你永遠也學不完,因此你在學習時,必定不要學在表面上,必定要學到本質,學到原理上,那些東西是不容易變的,也是經得住時間考驗的。把學習當成投資,這是這個世界上回報最好的投資。
帶着問題去學習,帶着要解決的東西去學習,帶着挑戰去學習,因而每當你解決了一個問題,作了一個功能,完成了一個挑戰,你就會感到興奮和有成就感。這樣,你也就找到了源源不斷的學習驅動力。
把你學習的心得、過程、筆記、代碼分享出來,找到和你一同窗習的人,由於一我的長跑很辛苦,有人同行就會好不少,就算沒有人同行,你的讀者,你的觀衆也會爲你鼓勵叫好,這些也是讓你持續前行的動力。
其它幾個實用的技巧:
推薦閱讀: