欢迎来到千里码话题版块。

我们会定期挑选程序员息息相关的话题让大家讨论:

1. 每个话题持续一周,话题结束后仍然可以继续讨论。点击查看所有话题

2. 用户投票的权重为自己当前的分数,权重会随着你的分数变化而变化。不能给自己的回复投票。

3. 关于话题的吐槽和建议,请移步话题吐槽专用讨论

4. 如果你有话题想拿出来给大家讨论,话题投稿请移步话题投稿专用讨论

5. 仅支持Markdown,不会Markdown请参考题目Markdown

更多请阅读帮助中心

奖励规则:

话题结束时发表得分最高的回复会以"优胜"的标记标出。发表该回复的用户会获得ikbc Poker3以及意见领袖徽章。

程序员应该掌握哪些数学知识? 已经结束

关于编程和数学之间的争论由来已久,有人认为,成为一名学好编程方面必须先精通数学,也有人认为,编程和数学关系不大,成为编程专家和数学功底没有太大的关系。

所以本期话题为程序应该掌握的数学知识,希望大家围绕程序员到底需不需要精通数学,需要掌握哪些方面的数学,到什么程度等相关问题进行讨论。

奥利奥   2016-09-26 03:22:09 提问 topic
8 个回答
cheyulin , Phd in CSE, HKUST
11 人赞同, 3 人反对

我的感受

对于数学的话,我本人到目前为止用的不多,虽然在大学[某985大学]的时候数学课考得还可以,数学物理相关课程:高数/现代/离散/概率论/大物都是90+的期末成绩。

用的最多的线性代数,也就是学机器学习(虽然后来因为作业太多退掉了)这门课的时候。逻辑演算/谓词演算/图论/概率论等则在学人工智能的时候用到 。但是我发现我对机器学习和人工智能都不感兴趣。。。然后就把这些数学放下了,日后需要时候再花较少的时间重新捡回。

网红们的观点集合

  • 数学和编程,从王垠(这个对编程语言设计非常熟悉)的人的角度来看,只要基本的数学功底(足够考上重点大学/学好离散数学)就具备数学基础,可以像王垠一样去了解lambda calculus和程序语言设计了。

  • Matrix67的Blog, 恩这个北大交叉学科文理综合科,拿Acm金牌的大神,则是把数学作为乐趣,然后利用手头的离散数学/图论/数论知识用很好的人机交互给我们这些程序员传递知识和快乐。

集思广益

程序员的定义太宽泛。从code monkey到algorithm guru都是程序员。印度软件外包公司里的实习生叫做程序员,dijkstra也叫程序员。但是dijkstra是计算机科学家,而那些实习生就不是。

计算机科学家都是数学家没错,但是计算机科学家通常熟悉的领域是数论、集合论、图论、可计算性理论这些离散的内容。如果你让10个计算机科学家解偏微分方程,非常有可能一半的人不会

2016-09-27 22:59:37 4条评论
Cinque Terre

elf

挨个踩1脚就有键盘拿.............
2016-10-03 03:19:16
Cinque Terre

dploop

送助攻
2016-10-03 07:56:16
Cinque Terre

cheyulin

cool...
2016-10-03 09:13:07
Cinque Terre

雪特 回复了 cheyulin

哈哈,我也对机器学习和人工智能不感兴趣~
2016-11-02 16:19:25
请先 登录 后评论
v2excoc
10 人赞同, 3 人反对

从码农职业诞生的时候开始,就分为两种人,一种是专注写底层,提供API的底层码农。另一种是用底层码农提供的API,来构建上层具体应用的码农。

两者知识架构体系,差别其实挺大的,在这信息化爆炸的网络时代,考验人的不是信息的获取能力,而是在有限的时间内,面对庞大信息如何去消化,把时间和精力,用在最有价值的事情上。

所以如果你是一个应用层的码农,调用一下中间件,日常和客户沟通各种脑洞需求,还真不需要学太多的数学知识,大学的高等数学足够了。反之,如果是底层码农,那对于算法的最优化,数学是必不可少的,尤其是游戏和图形领域。各种积分,卷积,四元数,PBR里,充斥非常多的算法优化,如果不懂数学公式,恐怕连最新的论文都看不了。

2016-09-26 10:24:47 2条评论
Cinque Terre

elf

挨个踩1脚就有键盘拿.............
2016-10-03 03:19:28
Cinque Terre

dploop

送助攻
2016-10-03 07:55:10
请先 登录 后评论
isaacpei , ifelse程序猿
5 人赞同, 6 人反对

够用就行

2016-09-26 13:01:01 7条评论
Cinque Terre

Bishop

不太赞同这种一句话就说个大道理的答案……
2016-09-30 16:02:42
Cinque Terre

driver

但是很多人都不知道够用是什么概念。
2016-09-30 17:37:57
Cinque Terre

犀利的逆袭

够用就行,怎么算够用,为什么够用就行?这种答案说了等于没说。 反对不是因为我反对这个观点,纯粹为了把这个回答拉回0分。 顺便呼吁各位用户慎用手中的投票,特别是高分用户
2016-10-01 23:53:49
Cinque Terre

goat

反对
2016-10-02 12:01:04
Cinque Terre

elf

挨个踩1脚就有键盘拿.............
2016-10-03 03:19:23
Cinque Terre

cheyulin

反对。。。。 ```cpp #include<iostream> using namespace std; int main(){ cout << "反对,哈哈。。。"<<endl; } ```
2016-10-05 13:19:56
Cinque Terre

1037337446@qq.com

学无止境~~~~~~~~~~~~~~~~~
2016-10-08 09:36:11
请先 登录 后评论
mickeyandkaka
3 人赞同, 3 人反对

吐个槽,说具体数学就够了的。。。你真的看完了么。。。,讲道理能看完我觉得远远超过程序员的标准了。

写业务代码确实很少接触到超过高中的数学知识。但是对于数据分析师,机器学习相关的还是需要比较多的。

So:
业务BOY,不做什么动画模拟什么的,就写单纯的业务逻辑,可能高中就够了。
业务BOY,做一些模拟,我猜大学高数,大物估计也够了。
机器学习、数据分析等这类我觉得比较高端的,需要有统计学,概率论,凸优化理论。

但是:数学不好的人很大程度上逻辑推理,思考会欠缺,基本是单纯做业务,也可能因为思路不清而埋坑。
总结就是,至少高数别挂的水平是要的把。

2016-09-27 14:21:13 2条评论
Cinque Terre

elf

挨个踩1脚就有键盘拿.............
2016-10-03 03:19:10
Cinque Terre

dploop

送助攻
2016-10-03 07:56:50
请先 登录 后评论
东云 , 科研的核心是处理数据
1 人赞同, 3 人反对

程序是为了解决实际问题或需求而存在的。

数学知识能够帮助程序员更好的解决问题,更深的理解问题,但需要多少以及需要哪些方面的数学知识都与实际待解决的问题或需求有关。

不理解相应的数学原理并不影响你使用相应的结论,你依然可以从已有的解决方案中选择最适合的一种。但是如果你希望发现、重新定义并解决新的问题,那势必需要更多的知识储备。

归根结底,程序是为了解决实际问题或需求而存在的。脱离了实际的问题或需求,再多的数学技巧也没有意义。同样,只要有需要,包括数学知识在内的一切知识都有必要学习。

PS:
可能有点偏题,权且抛砖引玉。
需要的各种知识是根据实际需要变化的,为了应对未来可能出现的新问题,我觉得这种问题可能并没有一个固定的答案。
如果非要给出具体答案,难道是一份各个业务方向的知识学习清单?

2016-10-02 21:57:51 2条评论
Cinque Terre

elf

挨个踩1脚就有键盘拿.............
2016-10-03 03:18:59
Cinque Terre

dploop

送助攻
2016-10-03 07:57:42
请先 登录 后评论
老司机
Bishop
16 人赞同, 4 人反对

在我的理解中,数学是一门语言,是一门对纷繁复杂的世界进行抽象总结的语言。每当人类漫步知识的海滩,倘若有幸偶拾几块色彩斑斓的贝壳,总是需要用一种语言来描述自己的发现,而数学就是几千年人类知识积累历程而积淀下来的一门语言。

学习一门语言,往往是为了理解这门语言所要描述的对象。举个例子,由于某些历史原因,英语成为了程序员交流的主流语言,为了理解英语所描述的程序员相关的话题,所以你需要掌握基本的英语用法和计算机相关的英语。当你能够看得懂英语技术书籍,能够听得懂英语技术讲座,能够用英语和同行交流的时候,你的目的就达到了——通过掌握这门语言,你能够畅通无阻地获取你感兴趣的信息。然而,你真的可以说你精通英语了吗?未必。看几本美国小说,或是玩几部面向欧美玩家的英语游戏,抑或是读几篇莎翁的大部头,你会发现你需要和这些领域相关的更深入的英语才行。

那么数学也是这样,当你需要去理解那些用数学语言描述的对象的时候,你就需要学习对应的数学。但是,这不是说,只有在当你用到的时候才去学数学。以我自己的经验,学习数学,能够提升自己思维层次和抽象能力。也就是说,语言本身,会影响使用者的思维1

实际中,具体问题具体分析,比如你现在工作主要是写业务逻辑的阶段,那就和数学没什么大的关系。做业务也没有就低人一等,以业务逻辑见长的专家,也大有人在。倘若你想做一些更抽象的东西,那恐怕就需要用到数学了,比如编写物理引擎,做图像处理,做机器学习等等。当然每个领域所涉及到的数学又是不一样的,我也未尝深入研究,就不再妄加评论。

2016-09-26 04:15:10 3条评论
Cinque Terre

elf

挨个踩1脚就有键盘拿.............
2016-10-03 03:19:34
Cinque Terre

dploop

送助攻
2016-10-03 07:54:36
Cinque Terre

丨银丨

ad
2016-10-11 14:04:31
请先 登录 后评论
aming
1 人赞同, 3 人反对

统计

概率

排列组合

2016-09-26 19:33:24 2条评论
Cinque Terre

elf

挨个踩1脚就有键盘拿.............
2016-10-03 03:19:05
Cinque Terre

dploop

送助攻
2016-10-03 07:57:09
请先 登录 后评论
OrangeMx
8 人赞同, 5 人反对

老王今天到我们公司报道了,我和主管说了一声,提前下班带着老王去了公司附近一家小馆子。茶过三巡,我说,是那边导师不行吗?他说,没有没有,导师人很好的。他顿了顿,可你也知道,理想终归只是理想。

“理想终归只是理想”,三年前我说这话的时候,万万没有想到,这话我还会再听到一次,而且还是从老王嘴里说出来。

我还记得高中时,物理老师在讲台上喋喋不休讲经典力学的简单题,就是简单的速度加速度,再加一点受力分析之类的。我觉得很无聊,就在下面看点其他的数学书和物理书。记得有一次,我发现往书里面吹气,书页会呈现出一种规律的震动。我问物理老师,这种现象该如何解释?物理老师也不知道,只是说,等你再多学点数学就知道了,我相信你这么聪明,总是能学到这种程度的。那时候我便常常想,多学一点数学,多理解一点这个世界。

大学终于开学了,不顾家里人的反对,我如愿以偿地成为了一名数学系的学生。一开始,只是按部就班地讲的微积分和线性代数,我觉得不过尔尔,便翘课去图书馆里面自己找书看。有一次读书读的太痴迷,竟坐到了一个女生的座位上,等我从书里面缓过神来,坐我旁边的女生才说,同学,你坐的是我的位置。我颇有些尴尬,不知道说什么好,因为我感觉我至少在这坐了一个钟头,那女生却问我,你在看什么呢?我便来了兴致,把我对数学的追求和理解吹了一番,不知不觉到了晚饭的时候,去食堂的路上,她眨着眼睛问我,你说了这么多,可又有什么用呢?我便给她讲了个故事:

“从前有个两个高中同学,毕业多年后再聚首,A问,老兄最近在研究什么呢?B说,研究一下人口问题,A看了看B的论文,笑着说,老兄你别唬我了,你这论文里面通篇都是圆周率,可圆周率和人口有啥关系呢?”

“还记得那天去食堂路上和你讲的故事么,其实是出自……”,想了想我便觉得好笑,于是从QQ上又把这段消息删掉了。所以,她最后还是不知道,这个故事出自哪里,虽然我和她在一起这么久。我和她讲过恋爱中博弈问题,可没想到,因为一些鸡毛蒜皮,我们俩的博弈矩阵的纳什均衡点最终定格在了分手上。

等我从恋爱回到课堂中时,课已经上到了微分几何,那个老师常常鼓励我们,要读研读博,做一个大数学家,这时候,老王便会抬头看一眼讲台,然后继续写他的数学问题。老王人很闷,但是说起数学,却总能聊上几个小时。有时会因为一个问题争论的不可开交,老王便会说我是民科。是啊,我的确是一个民科,因为老是翘课,最后的成绩勉强及格,很多知识学的也不够扎实,乱七八糟看了一大堆书,没有一个机会把这些dots串起来。

临近毕业了,数学终归还是没有学成,小时候的很多问题,也仍旧没有找到答案。老王拿了一个国外大学的Offer,我祝福他,我做不到的事情,就只有交给你去完成了。我想,会不会有一天。我看着老王的论文,也会不解,为什么人口和圆周率有关系呢?然后我又说,当然,我也会继续学习数学,看数学书,你也别太得意,说不定我这个民科还比你这个科班人员先悟道呢。这不过是我的一句自我欺骗,可老王却好像信以为真。说真的,可这个世界这么复杂,我毕竟没有什么天赋,那些看不懂又再看的符号和公式,那些弄不懂的道理,童年的理想,实现或者不现实,又能怎么样呢?

于是我便去面试了几家IT公司。学校校招,一个考官问我,排序有哪几种方法?我呵呵一笑,一口气报了十来种,他叫我写个快排,我觉得颇有几分无聊,提笔便写,和书上流行的实现代码不大一样,但性能是一样的。考官说我实现的有问题。我说没有,最后我把代码写到笔记本里,跑了几组数据,他才相信。然后他问我如何实现一个螺旋方阵,我想了想说,这是一个映射关系,至于怎么得到这样的映射关系……说完感觉他迷迷糊糊的。一个主管模样的人过来接着面我,我们便聊了聊我大学的故事,我说我对数学很感兴趣,讲了很多我看过的书,他问我那为什么要从事编程呢?我说,理想终归是理想,数学学了这么多,我也想换个领域……

稀里糊涂地就去了这家公司,进去便是写C,虽然并不怎么懂C,可C毕竟简单,没一会儿便精通了。之后就开始编写核心模块,有一次,线上有个BUG,我正在吃饭,我让他们把现象说了一遍,然后胡诌了一句,你们看看A文件的B行,是不是有个函数调用参数不对。瞎猫撞上死耗子,没想到还真是这里的问题,于是我成了他们眼中的技术大拿。我常常想,我学不懂数学和是不是他们学不懂编程一样,都是天赋问题呢?反正,程序员的薪水还是不错的。

老王说他要过来,说是家庭有经济压力,也是常理。我说隔壁有个组,做算法的,比较喜欢你这种人才,你的数学也有用武之地。然后我说,你也知道,可工作,肯定会干很多乱七八糟的杂活……老王说,我早有准备,不用你提醒。我和老王终归相继死在了探索世界的路途中,成了一个每天家长里短,和同事高谈阔论买房买车的大俗人。


故事讲完了,我总结一下:数学学过一点的人一般来说可以轻松掌握编程,编程可以当个备胎。可如果你急着找点钱,直接学编程也没啥大问题。当然,你能解决什么问题,你的思维层次,会极大的受制于你所掌握的数学工具。我建议就是,你觉得编程很简单,你觉得除了投资哪个小区的房子给儿子选哪个小学上以外还有精力的话,可以考虑看点数学书,提升一点自己的境界……

2016-09-30 05:59:08 4条评论
Cinque Terre

isaacpei

知乎即视感!                   
2016-09-30 14:11:13
Cinque Terre

elf

挨个踩1脚就有键盘拿.............
2016-10-03 03:18:51
Cinque Terre

dploop

送助攻
2016-10-03 07:58:03
Cinque Terre

xxhu

扯淡,非原创,没有核心,,,,,,,,,
2016-10-19 13:45:36
请先 登录 后评论

啦啦啦

回答
正在加载中

您未提交【码之初】的正确答案,暂不能回答相关问题。 如有疑问,请发起讨论