首先,无论是哪方面的程序员,都要大量的投资算法和数据结构。因为这是你的基本技能,就像棋手需要知道每个棋子的走法一样。在算法学习的过程中,你绕不过的就是衡量算法的效率,也就不可避免的学习Big O的知识。Big O,需要你了解函数和极限的一些知识,比如说,f(n) = O(g(n))是这样定义的,当n足够大的时候,你总可以找到一个常数c,使得c * f(n) >g(n)。除了效率,还有如何证明算法的正确性。这就要求掌握一些证明方法,比如反正法,递推归纳法。
其次,如果你遇到了性能方面的问题,需要降低延迟,增加吞吐的时候,你很有可能需要去设计高性能的队列系统,这时排队论的知识就显得尤为重要了。排队论要学好,概率论是基石。队列在计算机系统中随处可见,操作系统中的进程调度问题,基于队列解藕生产者消费者的架构问题等等。
接下来如果你对离散优化问题感兴趣,如说背包问题,旅行者问题,当你需要优化一个目标函数的时候,你往往会用到梯度下降法,而理解梯度下降法,对微积分要有很好的理解。更不用说在人工智能,机器学习领域,到处都得优化目标函数,降低预测误差,想走的远,是必须要有数学基础的。
然后再说一下,线性代数,特别是在人工智能里面,很多基本的模型都是线性的,你会随处看到矩阵的用处,单纯的只知道矩阵如何相乘是远远不够的,要理解的跟深入,矩阵是一个函数,用来转换矢量,既然是函数,就会具有很多函数的特点。
分布式系统中的鼻祖级论文,Lamport的时间,时钟,和事件的顺序,据他所说是他从相对论中的时间和空间的关系中得到的灵感。由此可见,不仅是数学,物理也很重要。