作為IT業(yè)的一員,我們幾乎每天都有大量的知識(shí)需要學(xué)習(xí),有大量的技能等待我們?nèi)フ莆铡缀鯊奈覜Q定“獻(xiàn)身”程序員這一偉大事業(yè)之后,我就一直在考慮怎么提高自身的學(xué)習(xí)的能力(簡(jiǎn)稱(chēng)學(xué)習(xí)力),以下兩張圖作為我多年學(xué)習(xí)生涯得來(lái)的寶貴經(jīng)驗(yàn),拿出來(lái)和同學(xué)們分享。

如果你看到的第一張是埃及的金字塔,第二張是中國(guó)的太極圖,說(shuō)明我的圖片沒(méi)錯(cuò):第一張代表“知識(shí)的金子塔結(jié)構(gòu)”,第二張說(shuō)明了“理論和實(shí)踐的相生相克原理”。
一、知識(shí)的金字塔結(jié)構(gòu)。我把我了解的軟件知識(shí)分成了四個(gè)層次:思想,原理,技術(shù)和應(yīng)用,他們之間的關(guān)系就像金字塔一樣:
-
思想:目前我覺(jué)得能上思想的就兩個(gè):算法和面向?qū)ο蟆?/div>
- 原理:原理就有很多了,比如計(jì)算機(jī)組成原理,網(wǎng)絡(luò)連接的原理,操作系統(tǒng)的文件訪(fǎng)問(wèn)原理,GC的運(yùn)行原理等等。
- 技術(shù):這個(gè)就數(shù)不過(guò)來(lái)了,比如Asp.net技術(shù)啦,Ajax,WPF……這些統(tǒng)統(tǒng)是技術(shù)。
- 應(yīng)用:世界上所有機(jī)器上運(yùn)行的代碼,都算是應(yīng)用。
思想到應(yīng)用的劃分沒(méi)有高低貴賤,而只是抽象層次的不同。
學(xué)習(xí)的過(guò)程,就是通過(guò)某一個(gè)應(yīng)用,了解它所使用的技術(shù),進(jìn)而掌握其中的原理,最后,領(lǐng)悟其中的思想。這大概也就對(duì)應(yīng)了“了解”、“掌握”和“精通”這三個(gè)層次吧。所以學(xué)習(xí)力的高低,在于對(duì)高層次抽象的掌握能力。
舉個(gè)例子:設(shè)計(jì)模式這最近幾年很火,23個(gè)模式翻來(lái)覆去的有人在講。我不知道有幾個(gè)人認(rèn)真看了,又有幾個(gè)人能記得住,反正我比較懶,也比較笨。但是笨人有笨辦法,面向?qū)ο缶湍敲磶讉€(gè)概念:“繼承”、“派生”、“多態(tài)”,說(shuō)的再具體一點(diǎn),也就DIP,SRP這么幾個(gè)原則,大體看看每個(gè)設(shè)計(jì)模式中運(yùn)用了哪些概念和什么原則,下次在遇到類(lèi)似的問(wèn)題,估計(jì)就能把這個(gè)模式用出去。(PS:此處選擇性的忽略了模式在溝通上的意義,呵呵)。
所以要提高學(xué)習(xí)力,咱們看書(shū)就地多看些有深度的書(shū),什么“精通”啦、“速成”啦,就免了。孫子兵法、道德經(jīng)之類(lèi)的思想藏的太深,想用在代碼里咱沒(méi)那水平。像《敏捷軟件開(kāi)發(fā) 原則、模式與實(shí)踐》,《深入淺出設(shè)計(jì)模式》之類(lèi)的就剛剛好。
可是也千萬(wàn)別認(rèn)為思想就比應(yīng)用更重要,沒(méi)有應(yīng)用,要思想、原理、技術(shù)作甚?
二、理論和實(shí)踐的相生相克原理。
說(shuō)完抽象,再看看理論與實(shí)踐的關(guān)系,老祖宗的太極圖很形象的說(shuō)明了這個(gè)問(wèn)題,再看一下:白色代表理論,黑色代表實(shí)踐:

- 白色走到頭,和黑色接觸的就更多:實(shí)踐多了,更容易理解理論。
- 黑色走到頭,和白色接觸的也更多:理論的東西看多了,就可以更好的實(shí)踐。
- 白色走到頭,就會(huì)產(chǎn)生黑色:實(shí)踐的東西多了,自然會(huì)有理論產(chǎn)生。
- 黑色走到頭,就會(huì)產(chǎn)生白色:理論的東西多了,自然而然就會(huì)想去試試看。
所以我常用的方法是邊看書(shū),邊寫(xiě)程序,看完書(shū)就試著把學(xué)到的東西用在項(xiàng)目里。感覺(jué)這樣能把知識(shí)體系穿起來(lái),容易記,不容易忘;寫(xiě)程序?qū)懚嗔司突剡^(guò)頭來(lái)琢磨一下看看哪兒好哪兒不好,下次肯定會(huì)有進(jìn)步。