数学对于编程有多重要?

只是一只鱼

这个要分情况来看。

初级的编程不要太多深奥的数学知识,更多是一种逻辑思维的理解,对于各种规则的运用。这个时候编程有点像工具或者搭积木的感觉,很多初中甚至小学的变成天才,其实也没有太高深的数学知识,但是照样玩得转。

但问题是,编程,或者说计算机科学,发展到最后,则几乎要很大程度上地依赖数学。

有一位Facebook员工跟我讲,决定一个程序员上限的有两条:一个是代码的感觉,另一个是数学的水平。

严格意义上来说呢,编程搞到最后也是两条出路:工程型和学术型。

工程型的比如说大家都在上淘宝,为什么你点开一个图片,就打开了一个链接?那是web工程师的功劳,再比如你看很多手机页面设计的美轮美奂,那或许是一个兼具工业设计和编程能力的人的成果。

工程型的程序员,其实没有多少创新,他们其实就是把已知的一些编程技术熟练的掌握,要说数学知识,会在处理一些技术难题的时候用到。

还记得facebook创始人马克扎克伯格创办撕破脸时,借鉴的一个公式吗?那就涉及到统计数学的一些原理。

另外一种就是学术型的编程。这个就厉害了,搞的东西会非常深奥,某种程度上就是在研究数学和计算机的结合。

举个例子,每年双十一,全国有好几亿人在短短的几分钟内涌入淘宝买东西,你想想看,如果发生在现实中,一个大楼估计都要被压塌,这么大的数据流量,如何保持系统不崩溃,没有差错?

这就涉及到非常高深的数学理论。而阿里巴巴,腾讯的高薪养的那些科学家级别的人才,就是成天和数学打交道。

当然了,普通人的话,不需要学到那么高深,一个年薪五十万的程序员,大概掌握以下知识就可以了:

  • 《算法竞赛入门经典(第二版)》:把书啃透,然后把书上每道题在OJ上AC了。
  • 《机器学习》(周志华):把书上每个算法实现,每个公式推导一遍。
  • 《UNIX环境高级编程》:很多人都缺少的对操作系统的深入了解。(补充:我觉得光看这本书是比较片面的,前两点像是在修炼内功,那么这一条就是在修炼外功。而这本书作为起点是一个还不错的选择。)
  • 光搞数学也不行,英语还要好,托福 100+:跟进前沿paper,与国外同行交流

但是这几条绝对不是明面上这么简单,前面说了,你在研究编程的同时,还要对数学涉猎有一定广度和深度。

比如现在最火的人工智能,大家都晓得吧?要搞清楚人工智能的最厉害的书《机器学习》,你就需要对微积分,线性代数,概率论,数理统计,甚至是随机过程都有一定的基础。

清华学神韩衍隽跟我说:他编代码的感觉不是很好,所以就走学术型编程道路,现在一大半时间都是在研究数学。


综上所述,如果你只是想找个基础的编程工作,并不需要对数学有太深了解;但是如果你想搞一些前沿的东西,那么光编程还不行,还要补补数学的课。


佩子临

数学是一切科学的基础,也是计算机科学的基础。

不仅一切算法基于数学,而且没有数学,是无法编程的。

编程中的加减乘除运算基于数学。

编程中的if/else判断是数学的逻辑判断。

编程中的进制转换是基于数学。

数据库的left join等也是运用了数学中的集合。

光这些基础的,可能有人不以为然。再看一道编程题。

给定表达式[x/2] + y + x * y, 其中x,y都是正整数。其中的中括号表示下取整,例如[3/2] = 1 , [5/2] = 2。
有些正整数可以用上述表达式表达出来,例如正整数2,当取x = y = 1时,可以把2表达出来 ( 解释下:当x=y=1时, [x / 2] + y + x * y = [1 / 2] + 1 + 1 * 1 = 0+1+1 = 2 );
有些数可以有多种方式表达,例如13可以由 x = 2 y = 4 以及x = 3 y = 3来表示;
有些数无法用这个表达式表达出来,比如3。
从1开始第n个不能用这个表达式表示出来的数,我们叫做an,例如a1=1 a2=3,给定n,求an。
输入:n值 1<=n<=40 输出:an % 1000000007的结果(因为结果较大,输出an %1000000007的结果)

这道题可以说不懂梅森质数,大数取模(a^n mod b)是不可能做出来的。

数据结构中的图论等等基于数学,一切算法皆基于数学

“高等数学在数学计算机科学基本用不上”,这句话可以说大错特错。说出这句话的,要么压根就不是编程人员,要么就是连编程的大门都找不着。

就拿现在最火爆的人工智能来说,先看最简单的近邻算法。

再看决策树

再看贝叶斯

再看梯度上升/下降。

svm

可以说,没有高等数学,连人工智能的门都找不着,如何编程?

数学不是异常糟糕的语言,更不是落后的语言,相反,数学是最简洁最优雅的语言。

编程不过是数学实现的一种工具。

如果想在编程路上走,尤其想在人工智能这条路走,请好好啃数学

个人编程多年,一如老老实实啃数学。


IT老友

借用名人的一句话:任何一个学科如果没有发展到能与数学紧密联系到一起的程度说明该学科发展还不完善。


电子维修

对于很多业务代码搬运工,都是if else的存在,比较少感受到数学的存在、感受到算法的存在重要性。

这就是为什么很多人会问,面试面算法有啥用? 对于这种问题一般都看的回答了,如果你相信,先去学了,再来问为什么。

当然,其实我们职场很多岗位确实不需要那么多的要求,能实现业务代码就好,这就是国内面试喜欢问你做过什么项目,遇到什么问题,怎么解决,学到什么,诸如此类的问题。


编程教育布道师

数学知识可能高中就差不多了。但数学思维,多少都不会多,推理归纳,这可能就是码农和程序员的区别了,最后拼到底就是这些内功了。


听书问道

数学只是提供编程思路。中学数学足够了。我最多用到圆周率和三角函数。比如算GPS坐标距离。

但高等数学真没有用到过。

另外,计算机是只会加法的。太高级的公式并不会使程序速度变快。


mbing1

数学并不是万能的,但没有数学就是万万不能的。任何科学技术的发展都离不开数学。凡涉及到数量计算的都是数学的范畴。小到数量的累积,大到天体计算。我的语文老师说:语文是一切科学之父。数学老师接过话茬说:数学是一切科学之母。话虽是玩笑,但也不能不说有道理。古人从数羊开始进行了记载,不同的文明承载了不同的文化,形成了不同的文字和语言,我们既不能片面地否定数学的功能和作用,也不能狭义地理解数学的本质和影响。任何事物都要一分为二地看待。如果没有数学,我们仍然每天吃树皮甚至被冻死、饿死或因疾病夭折。任何事情不能走极端。我想说的是:不要因贫穷(知识的贫乏)影响了你的想象力。

应该讲,没有数学就不可能有像现在这样的生活。没有数学就不可能使人类社会向前发展。计算机是一门应用科学,它包含的不仅是数学,还有很多自然科学类别。从应用上讲,数学是一种公共语言,它可以用最简单的数字通过组合,形成非常微妙的语言,通过计算机的逻辑排列可以制作完成各种绚丽多彩的世界。数学是计算机的基础,计算机使数学向前发展。就这样。能看懂本短文的都是高人,看不懂的,只能说你还有很大很大的提升空间。欢迎大家来喷。


手机游客1234567890

数学并不是计算机科学的基础

  很多人都错误的认为,计算机科学是数学的一个分支,数学是计算机科学的基础,数学是更加博大精深的科学。这些人以为只要学会了数学,编程的事情全都不在话下,然而事实却并非如此。

  事实其实是这样的:

  • 计算机科学其实根本不是数学,它只不过借用了非常少、非常基础的数学,比高中数学还要容易一点。所谓“高等数学”,在计算机科学里面基本用不上。
  • 计算机是比数学更加基础的工具,就像纸和笔一样。计算机可以用来解决数学的问题,也可以用来解决不是数学的问题,比如工程的问题,艺术的问题,经济的问题,社会的问题等等。
  • 计算机科学是完全独立的学科。学习了数学和物理,并不能代替对计算机科学的学习。你必须针对计算机科学进行学习,才有可能成为好的程序员。
  • 数学家所用的语言,比起常见的程序语言(比如C++,Java)来说,其实是非常落后而糟糕的设计。所谓“数学的美感”,其实大部分是夜郎自大。
  • 99%的数学家都写不出像样的代码。

  数学是异常糟糕的语言

  这并不是危言耸听。如果你深入研究过程序语言的理论,就会发现其实数学家们使用的那些符号,只不过是一种非常糟糕的程序语言。数学的理论有些是有用的,然而数学家门用于描述这些理论所用的语言,却是纷繁复杂,缺乏一致性,可组合性(composability),简单性,可用性。这也就是为什么大部分人看到数学就头痛。这不是他们不够聪明,而是数学语言的“设计”有问题。人们学习数学的时候,其实只有少部分时间在思考它的精髓,而大部分时间是在折腾它的语法。

编程是一门艺术

  从上面你也许已经明白了,普通程序员使用的编程语言,就算是C++这样毛病众多的语言,其实也已经比数学家使用的语言高明很多。计算机科学并不是数学的一个分支,它在很大程度上是优于数学,高于数学的。有些数学的基本理论可以被计算机科学所用,然而计算机科学并不是数学的一部分。数学在语言方面带有太多的历史遗留糟粕,它其实是泥菩萨过河,自身难保,它根本解决不了编程中遇到的实际问题。

  编程真的是一门艺术,因为它符合艺术的各种特征。艺术可以利用科学提供的工具,然而它却不是科学的一部分,它的地位也并不低于科学。和所有的艺术一样,编程能解决科学没法解决的问题,满足人们新的需求,开拓新的世界。所以亲爱的程序员们,别再为自己不懂很多数学而烦恼了。数学并不能帮助你写出好的程序,然而能写出好程序的人,却能更好的理解数学。


网罗大事小事

我感觉,数学对于业务层代码帮助不大,但是对于涉及算法、高速数学计算部分还是很有帮助的,业务层一般用到数学的不多!但是不代表不重要,也不代表非常重要!编程的逻辑性强,但不一定和数学有关系;我个人认为数学不等于逻辑,逻辑也不等于数学。


鹏城程序猿

数学对于编程异常重要,或者说对任何学科都是异常重要。数学是一种形式科学。

这体现在方方面面。首先数学是编程的基础,受过正统计算机教育的人都知道,离散数学、数据结构、算法和可计算性的知识都是编程必不可少的,而这些都是数学。如果你连O(logN)这些都搞不清楚,你肯定不是一个优秀的程序员。也许很多人不知道,递归的数学解释就是数学归纳法。

其次,数学是很多计算机应用的基础。数值计算是计算机科学的一个分支,包含LU分解、有限元分析等,这些都要深厚的数学功底。人工智能中,你必须知道梯度、vector calculus才能理解什么是反向传播算法。计算机图形学中,无时无刻不用到矩阵向量的概念。例子太对了,不胜枚举。

如果你是没有经受过正统的科班教育的码农,那也许你会觉得数学不重要。可如果你是一个计算机专业毕业的程序员,你就会觉得数学无比重要!


分享到:


相關文章: