我希望人们可以花一些时间放在数学上面。
—— Shy

很久之前就想写这篇文章了,在我的人生中,数学给我带来了很多乐趣和自信,我一直很热爱数学这门科学。可是,就我所了解的周围人而言,我觉得大家并不喜欢数学,也很少去看数学相关的资料或者书籍。从数学爱好者角度来谈一谈感受,长时间不接触数学,其理性思维将会停留在简单、粗暴的阶段,导致面对一些复杂的事情时,很难更深层次的分析并有效解决。

前不久,微信朋友圈被两道题刷爆了,第一道题目是6008移动两根火柴得到的最大数是多少。

这道题目的解法各种各样,最常见的解法就是移动火柴让数字位数增加,比如变成81188,甚至还可以变成6171781,等等。另外,还有网友脑洞大开,直接变成指数617178的11次方;也有网友直接将最后的数字8去掉两根变成已,再把两根摆成亻,得到600亿。

在这之后,朋友圈又出现了黑白帽子等各种问题:

这一现象我解释为“数学贫瘠”,即平时因为很少时间接触数学,当出现一个有趣的数学题时,便会产生疯狂传播的现象。这类题目有个特点,解题过程有挑战,很大一部分人做不出来,而实际答案却简单、清晰、易懂,在数学技能较低的人群中,会形成很好的传播。因为这类题目,让那些平实不接触数学的人,突然觉得数学这么有趣,同时因为学会了解体技巧而感到兴奋。

这样就可以让大家真的觉得数学有趣了么?在疯狂的传播之后,这些话题便在朋友圈消失了,那些讨论并不会给人们带来数学兴趣,也不会因数学而提升自己的生活或者思考方式,不喜欢数学的人依旧不喜欢数学,也不会花时间去看数学方面的书籍和资料。所以,我很不看好数学题在朋友圈疯传这一现象,它只是人们打发无聊时间的一种消磨方式,仅此而已。

那么,什么才是真正的数学,我们如何才能通过数学来提升我们的思维能力呢?

我觉得,传统的数学课、背公式、做题用处都不大,这些只会让我们强硬的接触数学,最终厌恶数学,觉得数学很难。我们需要做的是从生活简单入手,找到数学真正的趣味点和价值,然后喜欢上数学。喜欢之后,我们在面对复杂问题时,也会很自然地去更多的思考,进而去学习更丰富的数学知识,这是一个争相循环的过程。


强者,强于将兴趣转换为学习动力,强于将学习融于现实。

之前听过不少人说数学没有用,数学反对派最常见的口头语就是,你看高中学的三角函数、导数等等,工作中哪有用到。这种观点是偏激的,真正的数学不是公式,而是思维。我举一个例子,提供一些思路,希望对大家有所帮助。

小时候不少同学应该都做过这类题,说一顿饭需要煮大米饭,炒鸡蛋和炒豆芽(这两道菜是我的最爱),煮大米饭要用30分钟,炒鸡蛋要用10分钟,炒豆芽要用10分钟。这顿饭一共需要多久时间?

答案是需要30分钟,很简单,煮大米饭时是锅在干活不需要我们,我们可以利用煮大米饭的时间去炒菜。这就是小时候,时间分配问题,意在教会小孩子时间累加和时间重叠的区别,即数学里的时间分配。

我相信,这道题现在拿来问大多数人,应该都能回答正确,但是很遗憾,这个数学知识大家其实并没有真正掌握。现实工作中,程序员负责开发一款软件,然后测试人员会进行测试,并将测试过程中出现的错误(即软件bug)整理成列表,程序员需要将这些错误修复,最终软件才能发布。而这个修复错误的过程,有些人的做法是,拿到这个错误列表,看一个修复一个,非常低效。

假设有5个软件问题分别为ABCDE:
A问题,程序代码问题,需要修改代码解决,花费30分钟
B问题,特殊图片无法显示,问题原因是图片格式处理有问题,花费15分钟修改处理流程
C问题,由于代码疏忽导致问题,修复时间2分钟
D问题,特殊文档无法显示,问题原因是文档格式处理有问题,花费15分钟修改处理流程
E问题,软件页面设计不合理,需要UI(美工)重新设计,花费80分钟,程序员将新的设计整合到软件中,需要15分钟

很差的程序员我们就不细说了,花费时间是30 + 15 + 2 + 15 + 80 + 15 = 157分钟,其中工作等待时间80分钟。

我们说优秀的程序员会怎么做:
1. 首先,花3分钟时间快速过一遍所有问题。
2. 找到相类似问题进行分类,B和D都是特殊格式问题,与分两次修复相比,统一修复可以减少很多重复工作,BD总计耗时20分钟。
3. 依赖其它部门同事的问题,提前告知相关同事,即先将问题E告知UI,在等待UI的时间里,去修复其它问题。

由于ABCD问题所需时间是30(A) + 20(BD) + 2(C) = 52分钟,完全可以在等待UI重新设计的时间内处理完,所以总共所需时间为:3(快速过错误时间) + 80 + + 15 = 98分钟,其中工作等待时间:80 - 52 = 28分钟。
通过结果对比,可以看出两种人的工作效率差距是极大的:

工作总时间 工作等待时间
普通员工 157分钟 80分钟
优秀员工 98分钟 28分钟

更深入的,我们还可以将问题从难易程度分类,将容易修复的问题归位一类,这类问题优先修复,修复这类问题后马上告知测试同事,可以让测试更早的进行确认工作,而不是等到bug都修完才进入确认工作,最终节省整个软件上线周期。

1. 普通程序员一件事情做好多遍,优秀程序员会整理归类减少重复工作。
2. 普通程序员规划时间采用累加,优秀程序员会利用重叠时间的方法提高效率。
3. 普通程序员无全局概念,优秀程序员会利用较少的时间了解全局从而节省过程中较大的时间。


在一定程度上,数学能力决定了一个人普通或优秀。

之前网上有一则新闻,新闻内容和专家、统计有关,当时看了下网友的评论,发现很多评论都是处于一种无知的情况下发表的,感慨颇深。

写在最后。。。

对于非纯数学相关工作领域的人们,也多花时间学一学数学吧,数学不只是公式,它是一种思维。