如果把一个待解决的难题类比为一把锁,那么,为了解决这个问题--也就是说为了打开这把锁,我们需要的是这把锁的钥匙。通常来讲,在生活中我们需要开一把锁的时候,“找到这把锁的钥匙”几乎成了我们的本能反应。当找不到这把锁的钥匙时,我们基本上在心里默认:我们无法打开这把锁。然而,使用钥匙并不一定是打开锁的唯一途径--开锁的师傅有各种精妙的工具来打开这把锁。同理,当碰到一个难题时,我们常常会困于解决此问题的“第一反应”,当卡在这个我们认定是“解决方案”的解决方案时,我们可能忘了去思考:或许,真正好的解决方案是另一个方案。所以,当陷于某个难题中没有进展时,应该停下来想一想:为了解决这个问题,需要的到底是什么?搞清楚需求,再想解决方案,效果可能会好得多。
一个例子:我需要在Wordpress搭建网站的导航栏中的条目中使用二级,三级菜单,并且,点击每个子菜单后,页面跳转至一个把这个子菜单下的所有同类文章汇总的一个文章列表页面。一开始,我发现可以通过构建很多的“页面(page)”来实现菜单的层级。但是在每次点击一个子菜单跳入到一个页面后,我不知道如何在此页面内构建一个文章列表。我卡在这里很久。后来,找一个同学帮忙,他鼓捣一会儿后给出了解决方案:把所有的使用“页面”来构建的菜单层级,改成用“目录(category)”来构建菜单层级,然后再把文章归在各个category下面,这样,在每点开一个子菜单之后,所以的文章就列在页面里了。后来我想:我需要的,是把文章列在一个子菜单内,至于这个子菜单是一个page还是一个category并不重要。由于我一开始是在按着page的思路走的,所以一心只想着怎么在一个page里把内容做出来,这就属于前面说的,想到了一个解决方案,然后认定要在这个解决方案的范围内解决,而忽略了问题的本质。
以上思考受启发于以下是TK教主的一段话:
正好前几天有个同事找我聊视野和思路的问题。我后来拿出一把锁打比方:多数人只知道拿钥匙开锁,这是一般用户;认真从外部观察过锁的人会想到通过拨锁舌也能开锁,这是比较好的程序员;在相应位置设计一个挡片阻止直接拨锁舌,这是漏洞防护;学过开锁的人,知道怎么通过拨弹子这种通用的方法把锁打开,这是一般的信息安全技术人员;把锁拆开,观察内部原理,这是逆向工程;用逆向工程技术全面透彻地分析某种锁的内外结构、运作细节,设计出甚至无人谈及过的开锁方法,这就是安全研究。然后我向他演示了一种我研究的方法,利用一个漏洞几秒钟就可以把锁打开。
网友评论