來(lái)自CU的文章,我覺(jué)得很有價(jià)值,大家都可以看看的:)
原文:http://bbs.chinaunix.net/viewthread.php?tid=880434&extra=page%3D21
不管是在現(xiàn)實(shí)中還是網(wǎng)上,總遇到一些人再問(wèn)一些奇怪的問(wèn)題。很多問(wèn)題讓大牛
們哭笑不得,總是推薦這些人看一些經(jīng)典的書(shū)籍。結(jié)果過(guò)了一段時(shí)間,其他人的
知識(shí)已經(jīng)滄海桑田,不少人成了大牛,大牛們已經(jīng)成了大大牛。這些人還在重復(fù)
著類(lèi)似的問(wèn)題。本人不是大牛,但是覺(jué)得大牛們?cè)诩夹g(shù)上幫助別人的同時(shí)還應(yīng)該
更多的傳播思維方法。如果大牛們沒(méi)有時(shí)間,那么小弟只好拋磚引玉,談一些不
成熟的見(jiàn)解,同時(shí)希望大牛們多提意見(jiàn),我再把你們的經(jīng)驗(yàn)總結(jié)起來(lái)一齊奉獻(xiàn)給
大家。
1)分層思考
在我的同學(xué)中有一個(gè)人算是經(jīng)典案例,他學(xué)習(xí)起來(lái)很用功,但似乎不管長(zhǎng)時(shí)間也
沒(méi)有氣色。并且常問(wèn)一些讓人哭笑不得的問(wèn)題。我花可長(zhǎng)時(shí)間也無(wú)法讓他明白學(xué)
校開(kāi)的課程到底和實(shí)際的開(kāi)發(fā)有什么聯(lián)系。有一天我突然發(fā)現(xiàn),我用如何處理以
太網(wǎng)偵來(lái)舉例子來(lái)說(shuō)明如何是用C語(yǔ)言的struct的使用他居然就輕易的弄懂了。之
后我總結(jié)出來(lái)的結(jié)論是:他在學(xué)習(xí)的時(shí)候總是嘗試一次弄清楚涉及的每一個(gè)細(xì)節(jié),
結(jié)果就陷入了無(wú)窮個(gè)疑問(wèn)中,每次都把自己弄的暈頭轉(zhuǎn)向。
這里引出了一個(gè)對(duì)于學(xué)習(xí)者最終要也是最基本的思考方法:分層。可以說(shuō)99%論
壇上的哭笑不得的問(wèn)題是因?yàn)闆](méi)有分層思考造成的。遇到這樣的人只能先教他們
學(xué)會(huì)如何的進(jìn)行分層思考,再向他們推薦學(xué)習(xí)資料。
練習(xí)分層思考其實(shí)非常簡(jiǎn)單,你考慮拓?fù)鋾r(shí),就不要考慮數(shù)據(jù)流程,考慮數(shù)據(jù)流
程時(shí)就不要考慮存儲(chǔ),考慮網(wǎng)絡(luò)間的協(xié)議時(shí),就不要考慮一臺(tái)機(jī)器上的數(shù)據(jù)是如
何處理的。只要忽略具體的細(xì)節(jié),每次只弄懂和問(wèn)題相關(guān)的最小的部分。等你全
部弄懂之后,再考慮層次之間的聯(lián)系。經(jīng)常假設(shè)“它就是那個(gè)樣子”,跳過(guò)一些問(wèn)
題也是好的方法,當(dāng)你發(fā)現(xiàn)跳過(guò)一些問(wèn)題會(huì)加速自己的理解時(shí),這些跳過(guò)的問(wèn)題
往往就是處于不同層次下的,甚至當(dāng)你發(fā)現(xiàn)一些問(wèn)題是屬于其他層次的時(shí)候,問(wèn)
題本身不復(fù)存在了。
分層思考在讀書(shū)的時(shí)候是很容易掌握的,因?yàn)榇笈兊臅?shū)本來(lái)就會(huì)用科學(xué)的方法
向你表述他的思想。難在讀代碼,或者在hacking幾乎沒(méi)有教材的技術(shù)的時(shí)候,需
要靈活掌握。
2)從整體到局部,從局部到整體
當(dāng)學(xué)會(huì)了分層思考后,掌握2)就變得十分簡(jiǎn)單了。在每個(gè)層次上,很多的問(wèn)題是
相互獨(dú)立的,將他們歸納出來(lái),如果有必要了解,逐個(gè)擊破。很多人會(huì)抱怨某某
東西很難,其實(shí)加上分層再劃分之后,逐個(gè)解決起來(lái)就容易多了。分層是為了獲
得綜覽,劃分局部是實(shí)際解決問(wèn)題的必要的步驟。
整體到局部的另一個(gè)好處是,實(shí)際上你獲得了某個(gè)技術(shù)的最小單位。這些最小單
位通常也會(huì)被其他的技術(shù)所采納。舉個(gè)例子,你了解LDAP時(shí)熟悉的FQDN、OID、
realm、BNF等等,在了解電子郵件,HTTP,Keberos的時(shí)候也會(huì)有用。事實(shí)上劃分
是再自然不過(guò)的方法,只是對(duì)于初學(xué)者,也許需要特別強(qiáng)調(diào)一下。
此外,有些局部的技術(shù)可能是不需要了解的,比如說(shuō)UPnP,可能你只有在解決實(shí)
際環(huán)境的問(wèn)題的時(shí)候才需要考慮,雖然它哪里都可以見(jiàn)到,但是你絕大部分情況
可以忽略它,無(wú)論是在考慮拓?fù)鋾r(shí),還是在分析代碼時(shí)。
3)創(chuàng)造和發(fā)現(xiàn)問(wèn)題
創(chuàng)造和發(fā)現(xiàn)問(wèn)題并不一定在你完全掌握了某個(gè)技術(shù)之后。而是在1)、2)的前提
下,能夠在學(xué)習(xí)的過(guò)程中提出建設(shè)性的問(wèn)題。這些問(wèn)題絕大多數(shù)會(huì)在學(xué)習(xí)的過(guò)程
中自然的獲得答案,少數(shù)會(huì)在論壇的討論中得到結(jié)論。如果還有剩下的,那么可
能你發(fā)現(xiàn)了技術(shù)本身存在的缺陷,恭喜你。
事實(shí)上創(chuàng)造和發(fā)現(xiàn)問(wèn)題的人很少出現(xiàn)“迷惘”,或者找不到“實(shí)踐的途徑和方法”的
情況。如果出現(xiàn)了這種情況,很可能1)、2)的條件都沒(méi)有具備。如果1)、2)
都具備了的話,才有下面的方法訓(xùn)練:
多問(wèn)“如果”。典型的就是在1)時(shí),先問(wèn)自己,如果是自己會(huì)怎樣設(shè)計(jì)?把這個(gè)問(wèn)
題從開(kāi)始保留到結(jié)束。
多問(wèn)“為什么”。配合“如果”,多問(wèn)別人為什么這么設(shè)計(jì),并且把讓這個(gè)問(wèn)題貫穿
到整個(gè)的學(xué)習(xí)過(guò)程。
多問(wèn)“哪些”,哪些東西是可以替換的?通常配合2),這樣可以發(fā)現(xiàn)實(shí)現(xiàn)同一目
的不同方法,很容易發(fā)現(xiàn)當(dāng)前協(xié)議的不足之處以及更好的解決辦法。
總結(jié)
事實(shí)上通篇的內(nèi)容可以歸納為:不斷的問(wèn)下面5個(gè)問(wèn)題:What(1)、Which(2、
3)、What if(3)和Why(3)。僅僅是自己的一點(diǎn)不成熟的經(jīng)驗(yàn),而且也寫(xiě)的比
較匆忙,漏洞很多。希望大家指正,也希望真正牛人們多多介紹自己的經(jīng)驗(yàn),我
會(huì)抽出時(shí)間來(lái)幫助你們整理,然后奉獻(xiàn)給大家。