可以提高计算机编程能力的数学主题或领域?[关闭]


14

通常,在算法和计算机编程方面,数学家或具有数学背景的计算机程序员都非常优秀。

我不是在说什么:

数学需要成为一个好的计算机程序员。数学是编程所必需的。好的数学家是好的程序员,反之亦然

我在说什么

我想学习一些数学,因为我相信它将使我成为一个更好的程序员。哪些数学领域/主题将帮助我成为更好的程序员?形式的答案math topic - corresponding cs area将不胜感激。

注意:我在StackOverflow上问过这个问题,它被宣布为题外话。我想在业余时间学习计算机编程一样的方法。提前致谢。


1
我很惊讶StackOverflow宣布这个问题是题外话。从我(已退休的程序员)的角度来看,这个问题应该是SO最重要的问题之一。
scaaahu

1
StackOverflow实际上更多地涉及特定的编程问题。这对CSEducator来说是最好的,并且可能对SoftwareEngineering有用。
纳特

1
以前我们曾遇到过这样的问题,它们都具有相同的问题:它们过于广泛和过于主观。唯一的共识答案是:全部
拉斐尔

@Raphael首先,我尊重Mod的决定。但是,我想代表OP提一个问题。无论如何,有没有改善这个问题,以便可以重新提出?如果没有改进的方法,那么OP可以问这个问题吗?(很明显,OP已经尝试了SO,我知道它可能不适合Academia SE,因为它与Academia没有密切关系。)
scaaahu

要求正式解决特定问题的问题就可以了。学习建议问题通常不适合SE格式;“基于意见”的关闭原因适用于所有网站!
拉斐尔

Answers:


19

因此,有许多与CS科学有关的数学领域,但专门用于编程:

  • 图论:这是最重要的。图和树无处不在。网络,地图,视频游戏中的路径。甚至解决Rubiks立方体之类的事情也可以建模为图算法,并使用A *进行求解。

  • 离散数学:除了图论之外,总体上了解这一领域是有帮助的。它充满了归纳证明,对于理解递归非常有用,这在编程中非常有用,尤其是在使用数据结构时。知道集合,计数,包含-排除,布尔逻辑等可以不时地派上用场。

  • 类型理论:毫不奇怪,了解类型理论有助于理解类型化语言中的编程,更广泛地讲,它有助于将类型用作确保某些正确性的一种方式。了解子类型化理论可以帮助您了解类Java语言中的协方差和协变。在学习诸如Haskell或Purescript之类的类型繁重的语言时,了解诸如参数多态性之类的知识显然会有所帮助,但是诸如Scala,TypeScript和Rust之类的语言在行业中正变得越来越普遍,类型是它们的核心。

    如果将其推向极致,则会得到诸如Coq,Agda和Idris之类的东西,这些东西可以用来证明程序的极其精确的正确性。

  • 可计算性和复杂性理论:了解问题何时是无法解决或难以解决的问题非常有用,因为您不会浪费时间为快速解决问题而绞尽脑汁。同样,了解逼近算法,固定参数易处理性或低基指数算法背后的一些理论,在您确实需要解决NP难题时可以提供帮助。

  • 自动机理论:许多问题可以用各种状态机建模,因此了解它们的性质很有用。

还有一些特定领域的区域:

  • 统计资料:如果您要进行机器学习或大数据,这是必须的。

  • 线性代数/向量calc:这两者对于机器学习,图形,模拟或图像/音频处理都很重要。

  • 格点理论:如果您要进行编译器或程序优化方面的工作,那么这个问题一直存在。定点无处不在!

  • 类别理论:不需要编码,但对类型理论中深深浸透的内容很有用。

编辑:不能相信我忘记了:

  • 密码术:如果您对安全性,哈希,数字签名等感兴趣,那么请确保学习一些数论,组论,场论,椭圆曲线论等。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.