一直以来,教育者们都注重培养学生“解决问题”的能力,却忽视了培养他们“消灭问题”的能力。各种各样的竞赛,分数和排名,导致学生进入一种思想的枷锁:能“解决问题”的人,就是最厉害的人。然而,事实真是这样吗?
我只举一个很简单,却又很出名的例子。那就是很多人所“公认”的计算机科学界最重要的问题:“P=NP? ”。我至今不明白,为什么 Clay Math 会悬赏 100 万美元解决这样一个其实无关紧要的问题。到目前为止,我对此唯一的解释是:为了吸引眼球。每当有人声称自己解决了这问题,很多还没搞清楚什么是 P 什么是 NP 的记者,就开始信口雌黄,大发新闻,追踪报道。说这问题解决了,会给世界带来怎么怎么的,翻天覆地的变化。以至于到了今天,一个本来还有点意思的问题,在我心目中已经变成了一个天大的笑话。
我希望你能明白我在说什么。如果你知道 P 和 NP 的含义,根据一点点中学数学知识,就会发现一个显而易见的事实:P 不等于“容易”,NP 也不等于“困难”,P 等不等(价)于 NP,其实根本不关我们多少事。困难的问题仍然困难,容易的问题仍然容易,世界不会因此而改变。我说它“无关紧要”,就是这个意思。
这是为什么呢?P 的意思是 Polynomial(多项式)。什么是“多项式”?得到“多项式时间”的算法,真的那么重要,真的是合理的目标吗?中学生都知道,c n^m,当 c 和 m “常数”的时候,就是多项式。什么是常数?0,1,2 是常数,100 的 100 次方,摩尔,…… 都是常数。如果你学过基本的 recursion theory,可能就会知道 Ackermann 函数,是一个增长超级迅速的函数。当 x 和 y 都是常数的时候,Ackerman (x,y) 肯定也是常数。既然如此,那么 n^(Ackermann (100,100)) 是不是多项式呢?如果一个“P 时间算法”的复杂度可以是这样的“多项式”,P 等不等于 NP,真的还有意义吗?真的值得花费好几年(甚至一辈子)的心血去解决吗?这非常值得怀疑。
能随手解决“P=NP?”的人,我不得不说,他很“聪明”;但是如果他一心一意要解决这问题,他就是缺乏“智慧”。世界,也许最终就毁灭在这些有聪明而没智慧的人手上。智慧的人,从来不闷头闷脑的“解决问题”。他们会先问自己几个问题:
1. 这问题是否真的“存在”?
经验告诉我,很多问题,即使众人都认为它存在,其实也可能是不存在的。在这一点上不要相信任何人,不管他有多么的“权威”!
2. 如果解决了这个问题,会给我和他人带来什么实际的好处?
世界上不存在“永远”,也不存在“无穷”。如果一个“科学算命专家”花 100 年才能算出我的未来,那我还不如坐等“未来”的到来。所有的人,都不过是来这世界上做短暂的旅行。所以,问题的答案,应该能在合理的时间之内带来实际的好处。
3. 这问题是否可以在经过改变某些“设计”或者“思路”之后,不复存在?
这就是我所谓的“消灭问题”。很多问题的“存在”,其实是因为人们的“思维定势”。他们看不到问题的“根源”和因果关系,而是经常在下意识里假定某种“先决条件”的存在,然后坚定不移的相信由此“导致”的问题的存在。然后,他们开始埋头解决它,完全忘记了问题的来源。他们从来没有想过,如何消除这问题的前提条件。他们没有发现,一旦这些前提不复存在,问题就可以不解自消。
我发现,计算机科学界有很多很多这样的问题。研究了几十年,出了好几个图灵奖,结果到***才发现,辛辛苦苦解决的问题,其实换一个角度来看,或者稍微改一改设计,就不复存在了。
计算机科学,你的可悲,恐怕就在于此。