作者:編程隨想
原文地址:http://program-think.blogspot.com/2009/02/study-technology-in-three-steps.html
最近幾天有些網(wǎng)友在郵件里面問(wèn)我關(guān)于學(xué)習(xí)的問(wèn)題窍育。有好幾個(gè)人覺(jué)得工作了幾年卡睦,也學(xué)會(huì)了不少的類庫(kù)、框架漱抓、甚至語(yǔ)言表锻,但是感覺(jué)自己的能力沒(méi)有太大的提高。因此今天來(lái)說(shuō)一下我個(gè)人對(duì)這方面的體會(huì)乞娄,希望對(duì)大伙兒(尤其是新手)有幫助瞬逊。
先聲明一下,本帖子討論的三部曲是指你已經(jīng)選定了某個(gè)技術(shù)方向之后仪或,該如何學(xué)習(xí)确镊;至于如何選定技術(shù)方向,則屬于另一個(gè)話題范删,不在今天的討論之列蕾域。
我把學(xué)習(xí)歸類為三個(gè)步驟:What、How到旦、Why旨巷。經(jīng)過(guò)我對(duì)周圍同事和朋友的觀察,大部分感覺(jué)自己技術(shù)沒(méi)有提高的人添忘,都僅僅停留在What階段采呐。下面我把這三個(gè)步驟解釋一下。
第一步:WHAT
所謂的“WHAT”搁骑,就是搞清楚某個(gè)東東是什么斧吐?有什么用?有什么語(yǔ)法仲器?有什么功能特性煤率?......
舉例如下:
對(duì)于學(xué)習(xí)語(yǔ)言(比如C++、Java乏冀、Python)涕侈,大部分人都能夠掌握基本的語(yǔ)法和標(biāo)準(zhǔn)庫(kù),然后用它寫(xiě)一些小程序(諸如二分查找煤辨、冒泡排序裳涛、簡(jiǎn)單文件操作等)。
對(duì)于學(xué)習(xí)類庫(kù)(比如JDBC類庫(kù))众辨,大部分Java程序員都能明白JDBC主要包含哪些類端三,也能夠用JDBC進(jìn)行簡(jiǎn)單的數(shù)據(jù)庫(kù)查詢和增刪改操作。
由于這個(gè)步驟是最基本的鹃彻,假如你連這都做不到(可能你的理解力不夠好)郊闯,也別在IT界混了。
但是光會(huì)What是不夠的。僅僅停留在這個(gè)步驟团赁,導(dǎo)致了很多程序員只知其然育拨,不知其所以然。這就是目前大部分開(kāi)發(fā)人員的現(xiàn)狀欢摄。
第二步:HOW
所謂的“HOW”熬丧,就是搞清楚某個(gè)東西內(nèi)部是如何運(yùn)作的?實(shí)現(xiàn)機(jī)制如何怀挠?等一系列相關(guān)問(wèn)題析蝴。
舉例如下:
假如你在學(xué)習(xí)C++語(yǔ)言,你是否搞明白函數(shù)傳參數(shù)的實(shí)現(xiàn)機(jī)制绿淋?虛函數(shù)是如何實(shí)現(xiàn)闷畸?拋出異常時(shí)的棧回退是怎么回事吞滞?......
假如你在學(xué)習(xí)Java語(yǔ)言佑菩,你是否搞清楚GC如何實(shí)現(xiàn)?反射是如何實(shí)現(xiàn)裁赠?......
假如你在學(xué)習(xí)JDBC庫(kù)倘待,你是否清楚JDBC Driver的4種類型?不同游標(biāo)類型的實(shí)現(xiàn)機(jī)制组贺?事務(wù)的機(jī)制?......
在這個(gè)階段祖娘,你必須多想想類似這些問(wèn)題失尖。然后通過(guò)各種途徑(參見(jiàn)“關(guān)于自學(xué)能力”的幾個(gè)方法),把問(wèn)題徹底搞清楚渐苏。自然而然掀潮,你的提高就會(huì)比較明顯。而且如果碰到一些深層次的問(wèn)題(比如性能優(yōu)化)琼富,也就知道該如何去解決仪吧。
完成這個(gè)階段之后,你基本上就屬于該技術(shù)領(lǐng)域最優(yōu)秀的20%的人(根據(jù)二八原理鞠眉,80%的人不會(huì)去思考HOW的問(wèn)題)薯鼠。
第三步:WHY
一般來(lái)說(shuō),只有你把HOW的問(wèn)題想清楚械蹋,才開(kāi)始考慮步驟WHY出皇。
所謂的“WHY”,就是搞清楚某個(gè)東西為什么設(shè)計(jì)成這樣哗戈?為什么不是另外的樣子郊艘?這樣的設(shè)計(jì)有什么講究?
說(shuō)實(shí)在的,善于問(wèn)“為什么”有一定的天賦成分纱注?好像某個(gè)科學(xué)大牛曾經(jīng)說(shuō)過(guò)“提出問(wèn)題有時(shí)候比解決問(wèn)題更難”畏浆。一般來(lái)說(shuō),只有當(dāng)你深刻理解了某個(gè)東西狞贱,才能夠針對(duì)這個(gè)東東的設(shè)計(jì) 問(wèn)出一些問(wèn)題刻获。所以,我前面強(qiáng)調(diào)過(guò)斥滤,要先把HOW的問(wèn)題搞清楚将鸵,再來(lái)考慮WHY的問(wèn)題。
舉例如下:
對(duì)于C++語(yǔ)言:為什么C++沒(méi)有類似Java的finally關(guān)鍵字佑颇?為什么C++當(dāng)初沒(méi)有考慮GC顶掉?......
對(duì)于Java語(yǔ)言:為什么Java沒(méi)有類似C++的類析構(gòu)函數(shù)?為什么Java要同時(shí)提供String和StringBuffer兩個(gè)似乎冗余的類挑胸?......
對(duì)于Python語(yǔ)言:為什么Python不提供類似C++/Java的訪問(wèn)控制機(jī)制痒筒?......
如果你能夠自己問(wèn)出諸如上述的“為什么”問(wèn)題,并且能夠通過(guò)各種途徑找到解答茬贵,那你基本上已經(jīng)吃透這個(gè)技術(shù)了簿透,并且你已經(jīng)有可能自己去設(shè)計(jì)一個(gè)類似的玩意兒了。到這時(shí)解藻,你已經(jīng)踏上了通向技術(shù)高手的康莊大道老充。
由于本博客偏重IT方面,所以今天舉的這些例子多半都是IT相關(guān)的螟左,但是這個(gè)三部曲在IT以外的行業(yè)/領(lǐng)域其實(shí)也能適用啡浊,就看讀者自己的領(lǐng)悟了。