- 数学
一般而言,虽然经过了硬件到软件,软件底层到应用层的多层封装,对于不同层次(计算机体系结构的层次)程序员,其所位于的层次越高,数学的需求就越少。但是,数学是计算机科学的基础。从应用的角度来说,每个层次的程序员都会或多或少的使用数学知识来完成功能或者优化代码;从个人能力的角度来说,基本的数学素养是必须,请注意,是数学素养。比如说编写某个算法用于解决某个问题,使用理论证明的方式来说明算法的正确性,正确的计算出算法的时间/空间复杂度。我曾经向一位知名外企的面试官请教:数学在编程中的重要性,他的回答大意是:某种角度来说,编程是一种skill,但是数学是一种ability,它能让人以更高的深度去分析、思考和解决问题。
- 数据结构与算法
数据结构和算法是程序的灵魂,数据结构和算法不是独立的两个集合,他们是相互影响和渗透的(我认为至少基于现有的编程框架是这样的),根据具体的要求,数据结构或者算法需要搭配适合的另一方才能发挥最大的作用。因此,学习数据结构和算法,需要掌握其实现的细节和原理,掌握其适用的范围,掌握其优缺点,甚至有些