编程需要多少数学知识?

开发 开发工具
逻辑思维能力通过学习数据结构和算法,做数据结构的习题可以得到有效的提高, 抽象能力需要在实践中不断的练习、积累经验。 对于初学编程的同学,从现在就开始努力提升吧!

1.从高考题谈起

昨天大学同学群里发了一个链接, 点开一看,原来是当年参加高考的数学试卷, 于是饶有兴趣的又看了一遍, 让我感到震惊的是,很多试题连题目都看不懂了!

比如这道题:

再比如这道题:

天呐, 这都是些什么啊, 我当年到底是怎么考上大学的?

再联想到大学学的微积分,线性代数, 离散数学, 除了一些基本概念之外,也忘的差不多了。

数学这么差 , 竟然在计算机行业待了10多年, 到底是怎么混的?

2.编程中的数学

于是我马上回顾了下编程中用到的数学知识, 好像少的可怜。

计数的能力: for循环中经常用, 小学生都会。

数字的加减乘除 : 每种编程语言都会内置支持, 都不需要你自己算

余数和模: 偶尔会用得到

集合运算 : 交集、并集、差集 , 编程中用的不多。

布尔运算: AND , OR, 非

各种进制: 二进制、十进制、十六进制

还有哪些? 我想不起来了, 欢迎补充。

当然这和我从事的编程领域有极大关系, 如果我做的不是Web开发, 而是搜索,游戏, 安全,算法,人工智能等, 那对数学的要求估计就开始飙升了。

其实计算机的基础是数学, 只是我们一直在应用层编程, 体会不到罢了。

比如说我们日常使用的计算机,绝大部分都是所谓冯诺依曼结构(参见文章《冯·冯诺依曼计算机的诞生》) ,这个结构可以说是图灵机这个概念机器的具体实现,而图灵机就是一个纯数学的东西啊 ,没有图灵机这么伟大的抽象作为数学基础, 现代的计算机是制造不出来的。

(如果对图灵机和数学感兴趣 可以看看《图灵的秘密》这本书 》

再比如说密码领域需要很多数论的知识,RSA算法就涉及到大素数的分解;

我们常用的Mysql, Oracle 等关系数据库的底层基础是离散数学的笛卡尔乘积;

通信系统中很重要的一个原理就是傅里叶变换。

编译器会用到有限状态机;

数据的压缩会用到各种数学的算法;

项目管理中的进度管理,甘特图数学基础就是图论。

.....

总之,数学在计算机科学(如果能称之为科学的话) 扮演着非常重要的角色, 是整个学科的基础。

3.不拼数学拼什么?

具体到应用层编程, 尤其Web开发、企业信息化开发, 整天折腾的是框架和类库, 用不到这么多高大上的数学知识, 那到底拼的是什么?

想想编程中常用的数组,如果是一维数组,做个循环和遍历, 每个人都能轻松应对。 如果要用数组来表示二叉树,就需要把一个树形结构对应到线性结构,那难度立刻上升。

如果在编程中需要自己实现链表, 就会发现把各个节点的链接关系维护好, 需要把指针(引用)调来调去,挪来挪去, 实在不是一件容易的事情。

这样的能力就是逻辑思维的一种体现。

我们在做系统设计的时候,经常需要总结、分析现实需求, 找到容易变化的部分和相对稳定的部分, 把他们封装起来,形成核心的概念, 支撑起整个系统, 这是一个抽象的过程,虽然用不到多少数学知识, 但是思维的过程也极不容易。

逻辑思维能力和抽象能力的差别, 能够区分出程序员的优秀和平庸。

一个优秀程序员写出的代码, 接口清晰,容易扩展,易于维护; 一个差程序员写出的代码, 思路混乱,完全是一些计算机语句的堆砌, 别人看不明白, 过一段时间自己都看不明白了。

数学系的同学在这两方面恰恰是长项, 想想看, 数学系同学们整天折腾这么多“枯燥的”抽象概念, 再去看编程这样大部分都是具体化的实现, 简直是分分钟搞定! 这可能是数学系的转到编程领域很厉害的原因吧。

逻辑思维能力通过学习数据结构和算法,做数据结构的习题可以得到有效的提高, 抽象能力需要在实践中不断的练习、积累经验。 对于初学编程的同学,从现在就开始努力提升吧!

【本文为51CTO专栏作者“刘欣”的原创稿件,转载请通过作者微信公众号coderising获取授权】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2012-07-27 09:25:40

2021-01-06 15:29:54

数据科学数学知识数学工具

2021-02-22 17:25:19

数据科学数据技能可视化

2018-05-11 09:43:55

2022-05-24 10:49:43

分布式程序员系统

2018-03-22 19:48:47

前端HTML5数学知识

2017-08-15 17:06:55

前端HTML5手势原理

2021-03-09 10:24:46

数学计算机系统架构师

2021-03-09 10:47:56

系统架构师算法工程师人工智能工程师

2021-07-27 15:40:13

计算机奥运 技术

2015-08-05 10:15:12

数学编程

2020-04-29 13:45:42

机器学习ML数据科学家

2017-02-27 14:24:12

机器学习深度学习数学

2018-05-09 15:22:08

人工智能程序设计数学

2022-10-27 14:24:45

触敏技术

2020-10-16 16:09:15

Java技术开发

2022-06-29 16:37:15

算法JS数组

2023-09-27 09:00:02

SpringBoot并发编程

2012-06-26 09:47:23

大数据

2018-07-04 14:28:02

点赞
收藏

51CTO技术栈公众号