计算机中的数学

法国工程师学位的我,后台开发六年有余。如今深深爱上了数学,感慨以前学得不够。

首先,无论是哪方面的程序员,都要大量的投资算法和数据结构。因为这是你的基本技能,就像棋手需要知道每个棋子的走法一样。在算法学习的过程中,你绕不过的就是衡量算法的效率,也就不可避免的学习Big O的知识。Big O,需要你了解函数和极限的一些知识,比如说,f(n) = O(g(n))是这样定义的,当n足够大的时候,你总可以找到一个常数c,使得c * f(n) >g(n)。除了效率,还有如何证明算法的正确性。这就要求掌握一些证明方法,比如反正法,递推归纳法。

其次,如果你遇到了性能方面的问题,需要降低延迟,增加吞吐的时候,你很有可能需要去设计高性能的队列系统,这时排队论的知识就显得尤为重要了。排队论要学好,概率论是基石。队列在计算机系统中随处可见,操作系统中的进程调度问题,基于队列解藕生产者消费者的架构问题等等。

接下来如果你对离散优化问题感兴趣,如说背包问题,旅行者问题,当你需要优化一个目标函数的时候,你往往会用到梯度下降法,而理解梯度下降法,对微积分要有很好的理解。更不用说在人工智能,机器学习领域,到处都得优化目标函数,降低预测误差,想走的远,是必须要有数学基础的。

然后再说一下,线性代数,特别是在人工智能里面,很多基本的模型都是线性的,你会随处看到矩阵的用处,单纯的只知道矩阵如何相乘是远远不够的,要理解的跟深入,矩阵是一个函数,用来转换矢量,既然是函数,就会具有很多函数的特点。你应该懂得如何证明 (矩阵甲 x 矩阵乙)x 矩阵丙 = 矩阵甲 x (矩阵乙 x 矩阵丙)

最后,说点我也没有搞明白的,分布式系统中的鼻祖级论文,Lamport的时间,时钟,和事件的顺序据他所说是他从相对论中的时间和空间的关系中得到的灵感。由此可见,不仅是数学,物理也很重要。

总结一下吧,当时是学生的时候,学数学不知道怎么用,只知道考试,回想起来 ,如果应用场景更清晰的话,我会投入的更多。

数学学习资源