论数学对编程的影响(五)

直觉主义

Posted by tokenian on July 10, 2021

直觉是什么呢?举个例子

在某个风和日丽的下午,少男小明骑单车到海淀公园里玩耍。

清风徐徐,树影婆娑。小明行走在人行道上,越发的忧愁起来,因为夏天的燥热,因为万物生机勃勃。

前面的S形路突然出现了一个明眸少女,对着小明微笑,羞涩的把脸撇向右边,梨树上一只小鸟在鸣叫。

小明觉得吧,真是转角遇到爱,她目盼含春,语笑嫣然,我应该主动一点!!!

而事实上,少女转角时,看到了天空的白云,那么洁白纯净,如一匹白马。少女情怀总是诗,她不禁露出了微笑。结果一个花痴呆呆的望着她,被人爱慕往往令人欢喜,可怎么看这人有些猥琐,于是别过脸去。

小明的直觉会让他走向何方呢?

数学里关于直觉的讨论,最开始可以追溯到莱布尼茨,和牛顿齐名的微积分发明者。

他认为数学知识具有先验性,否则知识来源于感性经验。他认为,感觉对于人们的一切现实认识虽然是必要的,但是不足以向人们提供全部知识,因为感觉永远只能给人们提供一些例子,也就是特殊的或个别的真理。然而印证一个一般真理的全部例子,不管数目怎样多,也不足以建立这个真理的普遍必然性,因为不能提出结论说过去发生过的事情,将来也永远会同样发生。接着,他说明数学知识是天赋的。他说,全部算术和全部几何学都是天赋的和以潜在的方式存在人们心中的……而无须乎利用任何凭经验或凭旁人的传统学到的真理。摘抄自莱布尼茨数学哲学

莱布尼茨是不认同经验和直觉的,直觉或许只会给我们真理的一个侧面。

数学里的直觉主义是否定排中律的。对于一个判断命题,要么为真,要么为假,没有其他的可能性,这叫做排中律。直觉主义强调证明一个东西,你得把它构造出来,让人真真切切的感受到,是真是假都能构造出来,所以反证法是行不通的。

另外一个是双重否定,它本是逻辑主义的工具。我们写代码都知道,双重否定就是本身。b = !!b。敌人的敌人就是朋友。直觉主义认为不能使用它。

对直觉主义的一个很有力的佐证是四色定理的证明,用计算机把所有的可能性都穷举了出来,如果用人力是办不到的。

直觉主义不仅仅是构造主义,它更强调人的主观感觉,跟着经验走。所以它也被骂,不同的人经验不一样,千人千面,对于同样的问题不同人有不同的看法,到底是对谁错呢?解决同样的问题,程序员可以敲出不同的代码。

引导程序员写代码的思路是什么呢?还得是逻辑和直觉啊。对于问题的排查,老程序员比年轻的反应更迅速,理解更到位。写代码也是高级的比低级的更有质量,经验是锻炼出来的直觉。

目前编程是离不开人这个角色的,代码里有人性的存在。从代码里能嗅出各种味道,新手的生涩,老手的老练,还有逻辑混乱的,敷衍了事的,一丝不苟的。

直觉本是一种抽象的概念,用文字无法确切的说清楚。这东西需要自己去体会。