我把學習歸類為三個步驟:What驰后、How肆资、Why。經(jīng)過我對周圍同事和朋友的觀察灶芝,大部分感覺自己技術(shù)沒有提高的人郑原,都僅僅停留在What階段。下面我把這三個步驟解釋一下夜涕。
★第一步:WHAT
所謂的“WHAT”也就是“What is it?”——這是最簡單的層次犯犁。在這個層次,你要搞清楚某個東東是【什么】樣子的钠乏?有【什么】用處栖秕?有【什么】特性?有【什么】語法晓避?……
舉例如下:
對于學習語言(比如 C++簇捍、Java、Python)俏拱,大部分人都能夠掌握基本的語法和標準庫暑塑,然后用它寫一些小程序(諸如二分查找、冒泡排序锅必、簡單文件操作等)事格。
對于學習類庫(比如 JDBC 類庫),大部分 Java 程序員都能明白 JDBC 主要包含哪些類搞隐,也能夠用 JDBC 進行簡單的數(shù)據(jù)庫查詢和增刪改操作驹愚。
由于這個步驟是最基本的,假如你連這都做不到(可能你的理解力不夠好)劣纲,也別在IT界混了逢捺。
但是光會 What 是不夠的。僅僅停留在這個步驟癞季,導致了很多程序員【只知其然劫瞳,不知其所以然】倘潜。這就是目前大部分開發(fā)人員的現(xiàn)狀。
★第二步:HOW
所謂的“HOW”就是“How to do?”志于。在這個層次涮因,你要搞清楚某個東西,其內(nèi)部是【如何】運作的伺绽?【如何】實現(xiàn)的养泡?……
舉例如下:
假如你在學習 C++ 語言,你是否搞明白函數(shù)傳參數(shù)的實現(xiàn)機制奈应?虛函數(shù)是如何實現(xiàn)瓤荔?拋出異常時的棧回退是怎么回事钥组?……
假如你在學習 Java 語言,你是否搞清楚 GC 如何實現(xiàn)今瀑?反射是如何實現(xiàn)程梦?……
假如你在學習 JDBC 庫,你是否清楚 JDBC Driver 的4種類型橘荠?不同游標類型的實現(xiàn)機制屿附?事務(wù)的機制?……
在這個階段哥童,你必須多想想類似這些問題挺份。然后通過各種途徑(參見“關(guān)于自學能力”的幾個方法),把問題徹底搞清楚贮懈。自然而然匀泊,你的提高就會比較明顯。而且如果碰到一些深層次的問題(比如性能優(yōu)化)朵你,也就知道該如何去解決各聘。
完成這個階段之后,你基本上就屬于該技術(shù)領(lǐng)域最優(yōu)秀的20%的人(根據(jù)二八原理抡医,80%的人不會去思考 HOW 的問題)躲因。
★第三步:WHY
一般來說,只有想清楚 HOW 之后忌傻,才能繼續(xù)去考慮 WHY大脉。
所謂的“WHY”,就是搞清楚某個東西【為什么】設(shè)計成這樣水孩?【為什么】不是另外的樣子镰矿?這樣的設(shè)計有什么講究?……
說實在的荷愕,善于問“為什么”有一定的天賦成分衡怀?好像某個科學大牛曾經(jīng)說過“提出問題有時候比解決問題更難”棍矛。一般來說,只有當你【深刻理解】了某個東西抛杨,才能夠針對這個東東的【設(shè)計】問出一些問題够委。所以,我前面強調(diào)過怖现,要先把 HOW 的問題搞清楚茁帽,再來考慮 WHY 的問題。
舉例如下:
對于C++語言:為什么 C++ 沒有類似 Java 的 finally 關(guān)鍵字屈嗤?為什么當初發(fā)明 C++ 的時候沒有考慮 GC潘拨?……
對于Java語言:為什么 Java 沒有類似 C++ 的類析構(gòu)函數(shù)?為什么 Java 要同時提供 String 和 StringBuffer 兩個似乎冗余的類饶号?……
對于Python語言:為什么 Python 不提供類似 C++/Java 的訪問控制機制铁追?……
如果你能夠【自己】問出諸如上述的“為什么”問題,并且能夠通過各種途徑找到解答茫船,那你基本上已經(jīng)吃透這個技術(shù)了琅束,并且你已經(jīng)【有可能】自己去【設(shè)計】一個類似的玩意兒了。到這時算谈,你已經(jīng)踏上了通向技術(shù)高手的康莊大道涩禀。
由于本博客偏重 IT 方面,所以今天舉的這些例子多半都是 IT 相關(guān)的然眼,但是這個三部曲在 IT 之外的行業(yè)和領(lǐng)域艾船,其實也能適用。如何舉一反三高每,就看各位的悟性了屿岂。
來源:https://sci10.com/
如有侵權(quán)請聯(lián)系我刪除,謝謝理解觉义!