如果把一個待解決的難題類比為一把鎖,那么纤怒,為了解決這個問題--也就是說為了打開這把鎖糯而,我們需要的是這把鎖的鑰匙。通常來講肪跋,在生活中我們需要開一把鎖的時候歧蒋,“找到這把鎖的鑰匙”幾乎成了我們的本能反應(yīng)。當找不到這把鎖的鑰匙時州既,我們基本上在心里默認:我們無法打開這把鎖谜洽。然而,使用鑰匙并不一定是打開鎖的唯一途徑--開鎖的師傅有各種精妙的工具來打開這把鎖吴叶。同理阐虚,當碰到一個難題時,我們常常會困于解決此問題的“第一反應(yīng)”蚌卤,當卡在這個我們認定是“解決方案”的解決方案時实束,我們可能忘了去思考:或許,真正好的解決方案是另一個方案逊彭。所以咸灿,當陷于某個難題中沒有進展時,應(yīng)該停下來想一想:為了解決這個問題侮叮,需要的到底是什么避矢?搞清楚需求,再想解決方案囊榜,效果可能會好得多审胸。
一個例子:我需要在Wordpress搭建網(wǎng)站的導航欄中的條目中使用二級,三級菜單卸勺,并且砂沛,點擊每個子菜單后,頁面跳轉(zhuǎn)至一個把這個子菜單下的所有同類文章匯總的一個文章列表頁面曙求。一開始碍庵,我發(fā)現(xiàn)可以通過構(gòu)建很多的“頁面(page)”來實現(xiàn)菜單的層級。但是在每次點擊一個子菜單跳入到一個頁面后圆到,我不知道如何在此頁面內(nèi)構(gòu)建一個文章列表怎抛。我卡在這里很久。后來芽淡,找一個同學幫忙,他鼓搗一會兒后給出了解決方案:把所有的使用“頁面”來構(gòu)建的菜單層級豆赏,改成用“目錄(category)”來構(gòu)建菜單層級挣菲,然后再把文章歸在各個category下面富稻,這樣,在每點開一個子菜單之后白胀,所以的文章就列在頁面里了椭赋。后來我想:我需要的,是把文章列在一個子菜單內(nèi)或杠,至于這個子菜單是一個page還是一個category并不重要哪怔。由于我一開始是在按著page的思路走的,所以一心只想著怎么在一個page里把內(nèi)容做出來向抢,這就屬于前面說的认境,想到了一個解決方案,然后認定要在這個解決方案的范圍內(nèi)解決挟鸠,而忽略了問題的本質(zhì)叉信。
以上思考受啟發(fā)于以下是TK教主的一段話:
正好前幾天有個同事找我聊視野和思路的問題。我后來拿出一把鎖打比方:多數(shù)人只知道拿鑰匙開鎖艘希,這是一般用戶硼身;認真從外部觀察過鎖的人會想到通過撥鎖舌也能開鎖,這是比較好的程序員覆享;在相應(yīng)位置設(shè)計一個擋片阻止直接撥鎖舌佳遂,這是漏洞防護;學過開鎖的人撒顿,知道怎么通過撥彈子這種通用的方法把鎖打開丑罪,這是一般的信息安全技術(shù)人員;把鎖拆開核蘸,觀察內(nèi)部原理巍糯,這是逆向工程;用逆向工程技術(shù)全面透徹地分析某種鎖的內(nèi)外結(jié)構(gòu)客扎、運作細節(jié)祟峦,設(shè)計出甚至無人談及過的開鎖方法,這就是安全研究徙鱼。然后我向他演示了一種我研究的方法宅楞,利用一個漏洞幾秒鐘就可以把鎖打開。