1. 程式人生 > >高效學習(一)源頭、原理和知識地圖

高效學習(一)源頭、原理和知識地圖

所有內容均來自左耳朵耗子的極客專欄

挑選知識和資訊源

如果你覺得用百度搜中文關鍵詞就可以找到自己想要的知識,那麼你一定遠遠落後於這個時代了。如果你用 Google 英文關鍵詞可以找到自己想要的知識,那麼你算是能跟得上這個時代。如果你能在社群裡跟社群裡的大牛交流得到答案,那麼你算是領先這個時代

資訊源特質

(一)應該是第一手資料,不是被別人理解過、消化過的二手資料。尤其對於知識性的東西來說,更是這樣。應該是原汁原味的,不應該是被添油加醋的。
(二)應該是有佐證、有資料、有引用的,或是有權威人士或大公司生產系統背書的資料。應該是被時間和實踐檢驗過的,或是小心求證過的,不是拍腦袋野路子或是道聽途說出來的資料。
(三)應該是加入了一些自己的經驗和思考,可以引發人深思的,是所謂資訊的密集很大的文章。

注重基礎和原理

(一)正所謂“勿在浮沙築高臺”。我說過,很多人並不是學得不夠快,而他們的基礎真的不行。基礎不行,會影響你對事物的理解,甚至會讓你不能理解為什麼是這樣。當你對事物的出現有不理解的東西時,通常來說,是因為你的基礎知識沒有跟上。
(二)舉個例子,如果你學習過底層的 Socket 程式設計,瞭解多路複用和各種 I/O 模型的話(select, poll, epoll, aio, windows completion port, libevent 等),那麼,對於 Node.js、Java NIO、Nginx、C++ 的 ACE 框架等這些中介軟體或是程式設計框架,你就會發現,無論表現形式是什麼樣的,其底層原理都是一個樣的。

使用知識地圖

(一)我自己發明了一種叫“聯想記憶法”的方法,比如,在學習 C++ 的時候,面對《C++ Primer》這種厚得不行的書,我就使用聯想記憶法。

我把 C++ 分成三部分。

第一部分是 C++ 是用來解決 C 語言的問題的,那麼 C 語言有什麼問題呢?指標、巨集、錯誤處理、資料拷貝…… C++ 用什麼技術來解決這些問題呢?

第二部分是 C++ 的面向物件特性:封裝、繼承、多型。封裝,讓我想到了建構函式、解構函式等。建構函式讓我想到了初始化列表,想到了預設建構函式,想到了拷貝建構函式,想到了 new……多型,讓我想到了虛擬函式,想到了 RTTI,RTTI 讓我想到了 dynamic_cast 和 typeid 等。

第三部分是 C++ 的泛型程式設計。我想到了 template,想到了操作符過載,想到了函式物件,想到 STL,想到資料容器,想到了 iterator,想到了通用演算法,等等。

(二)學習並不是為了要記憶那些知識點,而是為了要找到一個知識的地圖,你在這個地圖上能通過關鍵路徑找到你想要的答案