王垠:“解决问题”与“消灭问题”

开发 项目管理
一直以来,教育者们都注重培养学生“解决问题”的能力,却忽视了培养他们“消灭问题”的能力。各种各样的竞赛,分数和排名,导致学生进入一种思想的枷锁:能“解决问题”的人,就是最厉害的人。然而,事实真是这样吗?

一直以来,教育者们都注重培养学生“解决问题”的能力,却忽视了培养他们“消灭问题”的能力。各种各样的竞赛,分数和排名,导致学生进入一种思想的枷锁:能“解决问题”的人,就是最厉害的人。然而,事实真是这样吗?

我只举一个很简单,却又很出名的例子。那就是很多人所“公认”的计算机科学界最重要的问题:“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. 这问题是否可以在经过改变某些“设计”或者“思路”之后,不复存在?

这就是我所谓的“消灭问题”。很多问题的“存在”,其实是因为人们的“思维定势”。他们看不到问题的“根源”和因果关系,而是经常在下意识里假定某种“先决条件”的存在,然后坚定不移的相信由此“导致”的问题的存在。然后,他们开始埋头解决它,完全忘记了问题的来源。他们从来没有想过,如何消除这问题的前提条件。他们没有发现,一旦这些前提不复存在,问题就可以不解自消。

我发现,计算机科学界有很多很多这样的问题。研究了几十年,出了好几个图灵奖,结果到***才发现,辛辛苦苦解决的问题,其实换一个角度来看,或者稍微改一改设计,就不复存在了。

计算机科学,你的可悲,恐怕就在于此。

原文链接:http://blog.sina.com.cn/s/blog_5d90e82f0101jbgr.html

责任编辑:林师授 来源: 王垠的博客
相关推荐

2014-12-26 10:23:21

谷歌

2022-09-02 16:07:02

团队问题

2013-05-21 09:47:15

编辑器IDE程序员

2010-05-06 17:07:34

Unix命令

2011-06-29 18:02:58

Qt 中文 翻译

2013-01-30 15:07:59

Shell

2009-07-28 12:35:37

querystring

2009-08-13 17:25:18

C# Convert类

2013-03-08 10:00:01

2016-06-15 10:08:29

云计算

2012-10-30 15:31:17

2010-05-06 17:13:18

Unix命令

2011-06-30 14:16:25

QT 中文 乱码

2012-10-31 10:47:05

VMware

2009-12-28 14:15:06

ADO连接

2021-10-15 10:16:48

电脑重启电脑硬件

2013-03-29 10:02:37

编译器语言编译开发

2013-06-19 09:42:27

工作经历程序员开发经验

2012-08-13 09:40:12

语言编程语言程序语言

2015-02-02 10:13:43

程序员
点赞
收藏

51CTO技术栈公众号