数学基础当然是必不可少的,但是具体到高数和线代的话,那的确就很可疑了。
正如很多答案中指出的,计算机领域要处理的很多问题和离散的量关系更大。或者说元数学,数学思维比起具体的应用数学对计算机行业,或者托大一点儿对于一切理工科都是有着无与伦比的重要性的。
最简单的就是抽象的能力,抽象的能力可以让我们快速的总结和归纳相似和不同之处。这对于写代码来说是几乎致命的。你有更强的抽象能力,就能准确的找出需要抽象和复用的部分,然后你的代码就会比别人的更短小精悍,也更容易适应需求的变化。这对于程序员这个职业有着决定性的作用。
举一个具体的例子:
如果你有敏锐的数学思维和元数学能力,那么你可以直接从关系型数据库数据库的原理中总结出来关系代数的雏形,你可以敏锐的发现数据库运作的原理,看到SQL语句你能猜出来查询计划更能推断出何种查询计划理论上是性能最优的。
退而求其次,你数学思维能力一般,元数学没有接触。但是你学习了集合论和关系代数,你能一眼看出来关系数据和集合论中关系的关联,你能把查询计划中的步骤与关系代数完整映射,通过关系代数的知识,你也能推测出查询计划也能找到最优的查询计划。
最次,你啥数学基础都没有。只能背数据库原理和SQL语法,遇到问题没有办法解决只能到谷歌去搜索。随着年岁的增长,你渐渐的积累了一些经验,有了一些名气。你终于可以利用这些经验来对数据库进行性能调优,你还为你的经验总结了一些口诀便于你自己记忆。你一直认为这些总结提炼是你多年经验的精华,是你安生立命的法宝。直到有一天你遇到了第一种人,这人只是了解了一下数据库的基础知识,他就突然推导出了你的经验总结,还用你完全听不懂的名词描述,并且找出了更多的调优技巧,你数十年的经验在他面前简直不堪一击……
直到这一刻,你才意识到,原来,你从来都不是干这一行的料。
这,就是降维打击……
最后补充一点点个人的想法,不一定对
我觉得数学对于IT很重要其实很大程度上是个错觉。
说白了,真的,IT领域要用到的数学并不多,你临时抱佛脚去学呢其实也来得及。
为什么会产生这种错觉,是因为在这一行做到拔尖的数学都非常好。而且很多公司也喜欢用数学基础(譬如说我)来确定一个人的水准。
但本质上是因为:数学好的那些人,他学数学本来就快,本来就是享受,本来就效率更好,他的思维逻辑本来就是理性的,抽象的,数学化的。所以他不用刻意学数学就很好,数学基础就非常牢靠。而这种人学IT,学编程和学数学一样,本来就快,效率就比别人高。
也就是说,本质原因是:学习数学效率高并乐在其中的人,和学习计算机效率高并乐在其中的人本来就是重叠的。
后者我们很难检测也很难观察,或者说就算我们观察了,也能发现一个规律就是这些人数学特别好。
由此而推论数学很重要其实是有问题的。
如果你学习数学很痛苦,那说明其实你压根儿不是这一类人,强迫你自己学数学可能并没有什么好处。
为什么这个问题下总有人把算法和高数混为一谈?你们是不是还要来表演一下通过求解微分方程分析某算法的时间复杂度?
包括非ML的传统算法在内,CS的大部分方向依赖的是数理逻辑和图论之类的数学分支,具体到大学本科课程对应的也是离散数学,而不是高数。离散数学和高数,说是全无交集可能过了点,但绝对是完全不同的两门课程。
归根结底,数学!=高数,本科高数只是数学的一个小部分的分支而已,覆盖广度根本不足以覆盖大多数CS依赖的数学。高数和线代只是一部分方向(如ML,图形学)依赖的数学工具而已。归根结底,计算机本身的存储结构是离散的,只有在需要对现实中涉及到复杂的连续数据的问题进行建模的时候才会用到针对连续数据的积分等工具——如果你今后的工作只跟计算机系统本身打交道(比如最常见的CRUD类软件工程,以及体系结构,可计算性理论等相关方向),那么你大概率是用不到这些数学工具的——你需要的是另一类针对离散结构的数学知识。
对于本科生来说,高数和线代当然是重要的,但是过度拔高它们的定位,把它们跟数学,尤其是CS依赖的数学划等号,则是完全错误且不可取的。不要过分强调所谓“基础论”——真要站在计算机系统的角度来看待的话,AI也好,图形学也好,跟CRUD一样都只是上层应用而已,没必要分个谁高谁低——真正底层的System也好,理论也好,都依赖的是离散结构的数学,而非微分方程。