學(xué)習(xí)一項(xiàng)知識(shí),必須問(wèn)自己三個(gè)重要問(wèn)題:1. 它的本質(zhì)是什么。2. 它的第一原則是什么。3. 它的知識(shí)結(jié)構(gòu)是怎樣的。

pongba的知其所以然地學(xué)習(xí)(以算法學(xué)習(xí)為例)
中他提出了現(xiàn)有算法類書(shū)的講授者是自頂向下思維,理論和知道點(diǎn)都擺出來(lái),再做個(gè)細(xì)的推理與低階的知道做個(gè)銜接。但是都沒(méi)有講算法的思想是怎么發(fā)展而來(lái)的,數(shù)據(jù)思維的過(guò)程是怎樣的。“如果問(wèn)題求解是一部偵探小說(shuō),那么算法只是結(jié)局而已,而思考過(guò)程才是情節(jié)。”
那到底什么樣的才算是授人以漁的呢?波利亞的《如何解題》絕對(duì)算是一本,他的《數(shù)學(xué)的發(fā)現(xiàn)》也值得一看。具體到算法書(shū),那就不是光看text book就足夠的了,為了深入理解一個(gè)算法的來(lái)龍去脈前因后果,從一個(gè)算法中領(lǐng)悟盡量深刻的東西,則需要做到三件事情:
尋找該算法的原始出處:TAOCP作為一個(gè)資料庫(kù)是絕對(duì)優(yōu)秀的,基礎(chǔ)的算法只要你能想到的,幾乎都可以在上面找到原始出處。查到原始出處之后(譬如一篇paper),就可以去網(wǎng)上搜來(lái)看了。因?yàn)樽畛醯淖髡咄鶎?duì)一個(gè)方案的誕生過(guò)程最為了解。比如經(jīng)典數(shù)據(jù)結(jié)構(gòu)中的紅黑樹(shù)是出了名的令人費(fèi)解的結(jié)構(gòu)之一,但它的作者Sedgewick一張PPT,給你講得通通透透,比算法導(dǎo)論上的講法強(qiáng)上數(shù)倍。
原始的出處其實(shí)也未必就都推心置腹地和你講得那么到位:前面說(shuō)過(guò),算法設(shè)計(jì)出來(lái)了之后人們幾乎是不會(huì)去回顧整個(gè)的思維過(guò)程細(xì)節(jié)的,只把直指目標(biāo)的那些東西寫(xiě)出來(lái)。結(jié)果就又是一篇?dú)W幾里德式的文章了。于是你就迷失在一大堆“定義”、“引理”、“定理”之中了。這種文章看上去整個(gè)寫(xiě)得井井有條,其實(shí)是把發(fā)明的過(guò)程整個(gè)給顛倒過(guò)來(lái)了,我一直就想,如果作者們能夠?qū)⒄麄€(gè)的思路過(guò)程寫(xiě)出來(lái),哪怕文字多上十倍,我也絕對(duì)會(huì)比看那一堆定義定理要容易理解得多。話說(shuō)回來(lái),怎么辦?可以再去網(wǎng)上找找,牛人講得未必比經(jīng)典教材上的差。那倘若實(shí)在找不出好的介紹呢,就只能自己揣摩了。揣摩的重要性,是怎么說(shuō)都不為過(guò)的。揣摩的一些指導(dǎo)性的問(wèn)題有:為什么要這樣(為什么這是好的)?為什么不是那樣(有其它做法嗎?有更好的做法嗎?)?這樣做是最好的嗎?(為什么?能證明嗎?)這個(gè)做法跟其它的什么做法有本質(zhì)聯(lián)系嗎?這個(gè)跟這個(gè)的區(qū)別是什么?問(wèn)題的本質(zhì)是什么?這個(gè)做法的本質(zhì)又是什么?到底本質(zhì)上是什么東西導(dǎo)致了這個(gè)做法如此..?與這個(gè)問(wèn)題類似的還有其它問(wèn)題嗎?(同樣或類似的做法也適用嗎?)等等。
不僅學(xué)習(xí)別人的思路,整理自己的思路也是極其重要的:詳見(jiàn)《跟波利亞學(xué)解題》的“4. 一個(gè)好習(xí)慣”和“7. 總結(jié)的意義”。
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/pongba/archive/2008/07/07/2622713.aspx