1.什么是数学
按照维基百科上的解释,数学没有准确的概念,它可以笼统地分为纯数学和应用数学。纯数学研究数量(Quantity)、结构(Structure)、空间(Space)、变化(Change),使用各种符号找寻规律,将各种猜想形式化,并证明其真伪。数学的基础包括了:数理逻辑、集合论、范畴论、计算理论。数量主要就是数字系统的建立,结构涉及组合、数论、图论、群论、代数等,空间涉及几何、差分几何、拓扑等,变化则是微积分、差分等式、分析。而应用数学则是研究数学问题的解答,于是也可以看作是计算数学,涉及了概率论、统计、密码学、优化、数学经济/物理/化学/生物等。
2.为何要学数学
2.1 你不用知道任何东西
从编程的角度,数学中很多东西的确是没有必要吃苦头去学。在翻译的文章《程序员如何学数学》中,作者戏谑到:“事实上,我觉得你不需要知道任何事情,只要你能保持活着就行了”。个人觉得本文提到的内容是每个程序员应该有的职业素养、科学素养。不管你是在职场做写着你以为普通的代码,还是在学校里做学问,相信用心练习领悟都会受益终身。本文总结了程序员应该关心的数学主要分支和基本的学习方法,但也只能称作数学和数学学习的相关“知识”,真正的修行正如老话所说:“师父领进门,修行在个人”。这些好的书籍、资料顶多只能将你带进数学殿堂的大门内,正式的修行在此才真正开始。
2.2 数学、计算、编程
我们经常说编程的本质是计算,即那本经典的算法书的标题:程序=数据结构+算法。那么数学与计算又是什么关系呢?最近写过一篇《X的奇幻之旅》,是一篇同名书《The Joy of X》的读书笔记。这本书中有一章与全书同名。本以为是全书最核心的一章,结果却什么没学到。
最近一直在思考计算在数学中的位置,突然犹如醍醐灌顶。代数乃至数学中最重要的两个活动:一是定义概念后用等式表示属性(变量)间关系,从而深入了解表示这个概念的数学对象;二是有了概念之后,为其设计计算过程,通常用于解决一个问题。两者都需要证明,前者证明等式所表达关系的正确性,而后者则证明计算过程的正确性。计算过程可以使用前者找到的规律来简化。也许作者并不完全表达相同的意思,但确实给予了灵感。
举个例子,我们提出一个关于数论的概念,比如质数,什么样的数是质数。然后我们研究它、找规律,可能得到一些等式,也比如得到一些结论,比如偶数只有2是质数,并加以证明。最后我们设计一个计算过程,比如计算得到一个区间内的所有质数,于是我们设计一个算法和数据结构。并利用前面找到的规律优化,最后证明其正确性。数学、计算、编程,三者和谐而统一。
2.3 天才闪耀时
在上面这一套过程中,计算过程实现后的反复使用,甚至部分推导也许可以用计算机来辅助。但找规律、下结论、设计计算过程、解决问题都是创造性的工作,否则早已被计算机所代替。然而,最展现人类思想伟大的可能要属概念和证明。为什么是这两个呢?
有人说数学是其他学科的基础和指导