爱问知识人 爱问教育 医院库

数学对计算机专业重要吗?

首页

数学对计算机专业重要吗?

数学对计算机专业重要吗?

提交回答

全部答案

    2017-08-05 15:00:45
  •   只说程序设计。
    我认为程序设计涉及到的数学,特点是具体、直观、离散、实用。因此Knuth的《具体数学》定位非常好(参考具体数学与离散数学的关系)。
    进而,程序设计用到的数学,和高度抽象化的现代数学关系不大。
      这体现在「无穷」「极限」「连续」「测度」等概念对许多程序员来说是脱离实际的定义,理解不了,甚至排斥。
    所以除非是理论计算机方向,一般程序员需要的「数学」其实是指具体的算法和技巧,可以算是「应用数学」。在此基础上,更重要的是工程思维,解决问题的能力。
      ###因本人阅历有限,接触到的专业知识有限,故以下内容信度有限。难免贻笑大方,见谅。
    ========之前答案的分割线========
    「对编程来说数学是它的灵魂」哪里扯淡了?对编程来说数学当然是它的灵魂,对简单的谁写代码不用数据结构?数据结构不是数学的内容吗?
    数学对于计算机专业很重要,你之所以会有「在编程中有用到数学了吗?」这样的疑问,是因为在最开始编程的时候编程中几乎所有关于数学的部分都对你屏蔽起来了,你只要会用就能完成一些工作。
      
    每天你打开电脑,电脑上的哪一个程序和数学没有关系?
    开机打开操作系统,进程管理、内存管理怎么样才是最优的,需要数学来计算吧。
    上上网,打开XX搜索,XX搜索怎么从浩如烟海的网络中找到你要的内容?需要数学来计算吧(图论、概率,线代…)。
      
    上网在线看视频,为了让你尽量流畅的看视频得编码吧,需要数学来计算吧(行程长度编码、离散余弦变换、线代…)。
    不上网了,打盘Dota,电脑怎么把3D模型显示出来,坐标系之间的转换、光线的模拟、材质的模拟需要数学来计算吧(空间几何、线代…)。
      
    小兵的人工智能,你点一下鼠标,英雄怎么从A地走到B地,寻路算法是数学吧(离散数学、线代…)。
    网上见到的眼花缭乱的照片的滤镜、phootshop的滤镜,需要数学来计算吧(卷积、线代。。。)。
    搜狗输入法为什么这么好用?当然是数学的功劳(概率论。
      。。)。
    动手写两行代码,编译器把你的程序代码翻译成机器码,编译原理是数学吧。
    等等、等等数不胜数,你写程序没有什么时候是离开数学的。
    有人会说:「这些东西都有人实现了,你只要会用就好了」之类的。
      是的,如果你仅仅只是随便写两行ToyProgram或者像一个生产线上的组装工人一样不断地把别人的类库加上简单的逻辑组装起来。你当然不需要太多的「数学」。
    但问题是如果你有那么一点点上进心想要写一些有一点点价值的东西、解决一点点尚未解决的问题的时,你会发现大多数情况根本没有现成的东西供你使用。
      这个时候你只有两个选择:要么默默的蹲在一遍祈祷世界的某个角落里某个人闲的蛋疼帮你写一个库,并且免费的送给你;要么就像个男人一样自己动手实现。在自己实现时,你会发现你能依靠的只有数学。第一个在电脑上显示出3D图形的人如果没有相当的数学功底,连矩阵是什么都不知道,可以么?
    别的不说,举一个我自己的例子。
      最近要做一个瘦脸的手机应用,有现成的第三方库吗?谁闲的蛋疼去写这个?人脸识别、面部变形的论文倒是不少,全都和线代、概率等等数学有关,没有数学知识能看得懂吗?况且,作为一个手机应用来讲在普通用户看来,瘦脸不过是个非常小的应用,或者是某个应用中非常小的功能而已。
      
    数学是编程的灵魂,不是说一点数学知识都不会就不能写出一行代码。就像我们说一个人的灵魂一样,并不是说人没有灵魂就活不下去这种虚无缥缈的论断。谈论编程的灵魂就像谈论一个人的灵魂一样指的是一些除了活下去以外,更加重要的东西。
    所以我觉得「数学」对于计算机专业是重要的。
      ###学机器学习的ConvexOptimization测度论和泛函是绕不过的,而ConvexOptimization可以说是机器学习的入门问题吧。但并不意味着要完整和深入的学习。从零开始完整的学习一个理论可以说是我国高等教育的一般性做法,而事实上如果仅仅只需要达到工程师的水平很浪费时间。
      但不学也不行,理论也要理解,不学好ConvexOptimization很多相关的论文都读不懂的。所以我在德国研究生阶段上的ConvexOptimization课是这么个形式,先半个学期老师给大家介绍测度论和泛函,搞清楚基础概念,理论介绍就算完了,在此之前学生都没学过。
      然后开始讲ConvexOptimization和相关算法,到了最后期末,我们已经能够证明一些简单的问题并看懂会用到ConvexOptimization的论文了,至此足矣。你要让我简述一下测度论和泛函,那我是说不出来的。并且就算是研究计算机视觉的博士和博士后,大部分数学功底都一般,绝对谈不上数学家,相关理论都是临时学的。
      他们终究是研究现实问题,数学只是工具,而且他们关注的领域很狭窄,只要学会了相关的理论,基本就通吃了。下文只是谈到了很多可能性,譬如微分几何用于三维表面分析,关注这一方面的研究者或者工程师(譬如做游戏的,搞3D渲染器的,做人脸识别的)只需要学好微分几何就行了,群论图论不需要懂。
      其实作为研究者需要学习的数学还是有限的,远远称不上是数学家。

    科学网-[转载]《和机器学习和计算机视觉相关的数学(fromLinDahua)》
    链接中的文章很详细
    (以下转自一位MIT牛人的空间文章,写得很实际:)
    作者:Dahua
    感觉数学似乎总是不够的。
      这些日子为了解决research中的一些问题,又在图书馆捧起了数学的教科书。从大学到现在,课堂上学的和自学的数学其实不算少了,可是在研究的过程中总是发现需要补充新的数学知识。Learning和Vision都是很多种数学的交汇场。看着不同的理论体系的交汇,对于一个researcher来说,往往是非常exciting的enjoyable的事情。
      不过,这也代表着要充分了解这个领域并且取得有意义的进展是很艰苦的。记得在两年前的一次blog里面,提到过和learning有关的数学。今天看来,我对于数学在这个领域的作用有了新的思考。对于Learning的研究,
    1、LinearAlgebra(线性代数)和Statistics(统计学)是最重要和不可缺少的。
      这代表了MachineLearning中最主流的两大类方法的基础。一种是以研究函数和变换为重点的代数方法,比如Dimensionreduction,featureextraction,Kernel等,一种是以研究统计模型和样本分布为重点的统计方法,比如Graphicalmodel,Informationtheoreticalmodels等。
      它们侧重虽有不同,但是常常是共同使用的,对于代数方法,往往需要统计上的解释,对于统计模型,其具体计算则需要代数的帮助。以代数和统计为出发点,继续往深处走,我们会发现需要更多的数学。
    2、Calculus(微积分),只是数学分析体系的基础。
      其基础性作用不言而喻。Learning研究的大部分问题是在连续的度量空间进行的,无论代数还是统计,在研究优化问题的时候,对一个映射的微分或者梯度的分析总是不可避免。而在统计学中,Marginalization和积分更是密不可分--不过,以解析形式把积分导出来的情况则不多见。
      
    3、PartialDifferentialEquation(偏微分方程),这主要用于描述动态过程,或者仿动态过程。这个学科在Vision中用得比Learning多,主要用于描述连续场的运动或者扩散过程。比如Levelset,Opticalflow都是这方面的典型例子。
      
    4、FunctionalAnalysis(泛函分析),通俗地,可以理解为微积分从有限维空间到无限维空间的拓展--当然了,它实际上远不止于此。在这个地方,函数以及其所作用的对象之间存在的对偶关系扮演了非常重要的角色。Learning发展至今,也在向无限维延伸--从研究有限维向量的问题到以无限维的函数为研究对象。
      KernelLearning和GaussianProcess是其中典型的例子--其中的核心概念都是Kernel。很多做Learning的人把Kernel简单理解为Kerneltrick的运用,这就把kernel的意义严重弱化了。在泛函里面,Kernel(InnerProduct)是建立整个博大的代数体系的根本,从metric,transform到spectrum都根源于此。
      
    5、MeasureTheory(测度理论),这是和实分析关系非常密切的学科。但是测度理论并不限于此。从某种意义上说,RealAnalysis可以从LebesgueMeasure(勒贝格测度)推演,不过其实还有很多别的测度体系--概率本身就是一种测度。
      测度理论对于Learning的意义是根本的,现代统计学整个就是建立在测度理论的基础之上--虽然初级的概率论教科书一般不这样引入。在看一些统计方面的文章的时候,你可能会发现,它们会把统计的公式改用测度来表达,这样做有两个好处:所有的推导和结论不用分别给连续分布和离散分布各自写一遍了,这两种东西都可以用同一的测度形式表达:连续分布的积分基于Lebesgue测度,离散分布的求和基于计数测度,而且还能推广到那种既不连续又不离散的分布中去(这种东西不是数学家的游戏,而是已经在实用的东西,在DirchletProcess或者Pitman-YorProcess里面会经常看到)。
      而且,即使是连续积分,如果不是在欧氏空间进行,而是在更一般的拓扑空间(比如微分流形或者变换群),那么传统的黎曼积分(就是大学一年级在微积分课学的那种)就不work了,你可能需要它们的一些推广,比如HaarMeasure或者Lebesgue-Stieltjes积分。
      
    6、Topology(拓扑学),这是学术中很基础的学科。它一般不直接提供方法,但是它的很多概念和定理是其它数学分支的基石。看很多别的数学的时候,你会经常接触这样一些概念:Openset/Closedset,setbasis,Hausdauf,continuousfunction,metricspace,Cauchysequence,neighborhood,compactness,connectivity。
      很多这些也许在大学一年级就学习过一些,当时是基于极限的概念获得的。如果,看过拓扑学之后,对这些概念的认识会有根本性的拓展。比如,连续函数,当时是由epison法定义的,就是无论取多小的正数epsilon,都存在xxx,使得xxx。这是需要一种metric去度量距离的,在generaltopology里面,对于连续函数的定义连坐标和距离都不需要--如果一个映射使得开集的原像是开集,它就是连续的--至于开集是基于集合论定义的,不是通常的开区间的意思。
      这只是最简单的例子。当然,我们研究learning也许不需要深究这些数学概念背后的公理体系,但是,打破原来定义的概念的局限在很多问题上是必须的--尤其是当你研究的东西它不是在欧氏空间里面的时候--正交矩阵,变换群,流形,概率分布的空间,都属于此。
      
    7、DifferentialManifold(微分流形),通俗地说它研究的是平滑的曲面。一个直接的印象是它是不是可以用来fitting一个surface什么的--当然这算是一种应用,但是这是非常初步的。本质上说,微分流形研究的是平滑的拓扑结构。
      一个空间构成微分流形的基本要素是局部平滑:从拓扑学来理解,就是它的任意局部都同胚于欧氏空间,从解析的角度来看,就是相容的局部坐标系统。当然,在全局上,它不要求和欧氏空间同胚。它除了可以用于刻画集合上的平滑曲面外,更重要的意义在于,它可以用于研究很多重要的集合。
      一个n-维线性空间的全部k-维子空间(k

    8、LieGroupTheory(李群论),一般意义的群论在Learning中被运用的不是很多,群论在Learning中用得较多的是它的一个重要方向Liegroup。
      定义在平滑流形上的群,并且其群运算是平滑的话,那么这就叫李群。因为Learning和编码不同,更多关注的是连续空间,因为Liegroup在各种群中对于Learning特别重要。各种子空间,线性变换,非奇异矩阵都基于通常意义的矩阵乘法构成李群。
      在李群中的映射,变换,度量,划分等等都对于Learning中代数方法的研究有重要指导意义。
    9、GraphTheory(图论),图,由于它在表述各种关系的强大能力以及优雅的理论,高效的算法,越来越受到Learning领域的欢迎。
      经典图论,在Learning中的一个最重要应用就是graphicalmodels了,它被成功运用于分析统计网络的结构和规划统计推断的流程。Graphicalmodel所取得的成功,图论可谓功不可没。在Vision里面,maxflow(graphcut)算法在图像分割,Stereo还有各种能量优化中也广受应用。
      另外一个重要的图论分支就是Algebraicgraphtheory(代数图论),主要运用于图的谱分析,著名的应用包括NormalizedCut和SpectralClustering。近年来在semi-supervisedlearning中受到特别关注。
      ###我在知乎的另一个问题里回答过(数学一般的人适合学习编程吗?)软件开发是管理复杂度的工作,而不是数学计算或者数学证明。数学工作在软件开发中是相当局部化的工作,因此可以转交给专家完成。软件开发和数学的关系类似画家和颜料化学家的关系。
    另外,数学是一个巨大的体系。
      有无数分支。就拿计算机科学的开创者图灵来说,他的TuringMachine和判定性理论关注于mathematiclogic。这在当年是一个非常小众的领域。你说数学大牛一辈子几乎不接触mathematiclogic也不是不可能。其实哥德尔提出不完备定理之后,很多数学家就对mathematiclogic失去兴趣了。
      可是他们也不用象有些知道了相对论的经典物理学家那样自杀,数学天地分外广阔。
    另外,很多计算机语言确实是有一定数学功底的人发明的,特别是逻辑学和一些语言理论。但是发明和使用是不同的。比如说,希尔伯特就想证明一些数学公理体系的一致性,可是太难了。
      可是欧几里德几千年之前就说:我就相信几何是一致的。然后就开始推定理了。推出来的定理也是美妙无穷。程序员,就是那个推定理的。###首先,计算机不等于编程。
    如果你不理解数学跟计算机有什么关系,建议去找本计算机方面的入门书籍好好看一下,然后你大概就能了解哪个层面跟数学相关性比较高,哪个层面跟数学没太大关系了,然后再根据自己计划发展的方向来决定要不要在数学上下功夫。
      
    推荐一本《ComputerOrganization,DesignandArchitecture》,作者SajjanG。Shiva(不了解这人,只是方便你找书)
    另外,单就编程来讲,不计划搞科研,只是找工作码程序什么的话,学不学数学确实关系不大,算法什么的,会用就行了。
      
    不过话又说回来了,对数学很白痴肯定也是不行的,离散什么的肯定多多少少要懂一些,只是不需要你很精通而已,基本上本科的数学知识就足够了。###反过来才成立:计算机对数学专业重要。
    做程序不需要什么数学背景,超强的程序员是因为他超强,而不是数学学得多好,即使像NP这种计算理论,好的数学基础也只是提供一把开门钥匙。
      好年份红酒好大部分不是因为年份好,更多是因为基本酿造得好,很多人搞不清楚这其中的区别。
    国内计算机应该更偏向于工程,需要:
    1。精准的抽象能力
    数学强调的不是精准的抽象,而是“唯一”的抽象
    2。
      对问题的理解
    直指待解决问题的本质,而不是在周边瞎晃,这和数学并不直接相关,各种行业都需要有这样洞察力的人才
    3。经济的解决方案
    明显带有工程性质,和数学思维没多大关系,需要考虑经济成本、权衡和选择,菜市场大妈具备这方面的一部分能力,她们明显不懂除了算术之外的任何数学
    4。
      迅速纠错
    世上没有bug-free的程序,重要的不是不出错,而是快速发现问题所在,找到根因,明显有很强的工程色彩
    据传莎士比亚吸毒,并以此作为他灵感来源的证据,很多人认为数学对计算机重要,就像吸毒对灵感重要一样。
      不要忘记了,世上吸毒的人无数,莎士比亚只有一个。###计算机专业里用到的最高深的数学,在数学专业的人眼里,也弱爆了!
    但不代表学计算机的这些人不能学好数学,这两个专业对逻辑、分析、演绎能力等人的基本素质要求是类似的。只是术业有专攻,既然专业是计算机,那么学习一定的数学基础也就够了。
      
    所以说数学对计算机专业重要,更体现在两点:
    1。计算机专业里很多的内容,是一直用到数学知识的,但也没有比其他理工类专业更多。@冯昱尧答案里提到的那些是对的,但我相信很多理工类、经济类专业都能列出这么多。
      数学作为最基础的学科,必然已经渗透到方方面面,对很多专业都是重要的。
    2。如果一个人数学不好,说明逻辑分析演绎这些能力可能不够强,那么学计算机也可能到不了最顶尖的水平。

    b***

    2017-08-05 15:00:45

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):