作为程序员优秀的必备数学?

时间:2009-01-12 06:54:29

标签: math

我只是想把数学看作程序员。当我进行游戏编程时,我会使用数学,主要是矢量数学和偶尔的三角学。

我的问题:你是否认为作为程序员必须知道的任何基本数学才能成为一名成功(并且令人敬畏)的程序员?主要是我发现编程只是逻辑,但有时可能会使用聪明的数学(不是特定算法)来解决常见问题。

15 个答案:

答案 0 :(得分:36)

我认为它可能比明显的“基本数学”更微​​妙。我已经完成了相当数量的图形编码 - 2D和3D,主要是非游戏,非常基于分形 - 并且在我在大学教过的数学上得到了很好的补充以及其他任何我的自我教育需要(像大多数程序员一样,我猜我的数学非常好) - 所以通常的线性代数,逻辑,基本微积分等 - 我从来没有感受到我所知道或可以自学的特别限制。

然而,有一次,我有机会与一个刚刚完成联合数学/计算学位的年轻人合作​​开发一个氛围引擎(一个模拟光衰和其他大气/光相互作用的引擎)。特别令我印象深刻的是他的熟悉度,其数学函数范围远远超过“普通”编码器 - 因此当需要特定行为时,他能够达到恰当的数学函数和实现这一点来解决手头的问题。他所使用的数学实际上都不是那么复杂 - 我在展示它时能够理解它很好 - 而是因为他知道他的数学词汇具有如此深度和广度,他能够毫不费力地在他需要的时候轻松地找到'le mot juste'而不是像我们大多数人一样四处寻找它。

所以我怀疑,当然在某些问题领域,并且可能选择范围比明显更广泛,对数学的熟悉程度高于常识,这将导致实施更好的算法。我们可能只看到工具箱中的工具存在问题,并且实际上没有意识到我们遗漏了任何我们没有的东西。

答案 1 :(得分:8)

我认为这主要取决于项目领域。

这就是游戏编程通常需要线性代数,四元数等知识的原因。

编程只是实现某一目标的一种手段,您需要知道多少数学与您需要了解健康行业的数量完全相同(如果这是您的项目域。)

从历史上看,计算机科学是应用数学的一个分支,我认为这就是为什么数学与编程之间存在着如此强烈的联系。我认为数学头脑作为程序员是好的,但我不确定数学知识在所有领域都是必须

答案 2 :(得分:7)

查看Math for Programmers一篇非常好的文章。

答案 3 :(得分:4)

阅读R.G.Dromey的书“如何通过计算机解决”。它将帮助您解决问题。

答案 4 :(得分:3)

除了游戏编程之外,基本的代数足以让你在其他任何事情上获得成功。

我仍然很享受学习微积分的时间。但我不确定为什么我必须参加这样一个深入的统计课程。

答案 5 :(得分:3)

基本的加法,减法,乘法和除法是首先想到的事情。

对模块化算术的理解当然有助于所有相关的身份,特别是在处理可能产生或快速超出基本整数类型容量的表达式或情境时。一个很好的例子就是将某些东西的模数提高到一个可笑的大功率(例如2 ^ 345%6789)。

了解如何在基数之间进行转换以及了解数字在基数中的表示方式。对于某些问题,三角函数和对数身份也非常方便。另外(并且我不确定你是否可以将其视为数学)了解逐位运算符的工作方式以及一般的布尔代数。

我偶尔发现,至少对微积分的基本理解可以在最不可能的地方应用(不是那么多的集成,而是明确的推导)。一个很好的例子就是'魔术'inverse square root function from the quake engine,这只是Newton-Raphson algorithm的一次迭代。

答案 6 :(得分:2)

我在学习期间学到了很多东西:

  • 基础代数
  • 线性代数(矩阵)
  • Descrete mathematics
  • 概率数学
  • 加密
  • 编码理论
  • 数学逻辑

那一刻我不喜欢它,但现在我很感激,因为这对我的工作很有帮助。

答案 7 :(得分:2)

  1. 线性代数 - 你需要这个物理,会计,真的最重要 商业逻辑。
  2. 逻辑 - 了解关联和分配规则 适用于布尔值已帮助我多次调试代码。
  3. 元组微积分 - SQL(与数据库交互的语言)是 基于元组演算;即使你只了解基础知识,你也是 到目前为止,在“现实世界”中的所有人都领先于他们所有的数据库 代码看起来很简单
  4. 就是这样。如果我知道Tuple Calculus对任何人编写或调试任何类型的数据库代码有多么重要,我会试着在高中自学。比我采用的任何C,C ++或Java课程更重要。

答案 8 :(得分:2)

至关重要,但只是在上面提到:图论。

答案 9 :(得分:2)

我很惊讶没有人提到abstract algebra。列表,字符串连接,函数(!),函数链等等的概念都源于此。

答案 10 :(得分:1)

Concrete Mathematics有一些很好的数学概念,如果你想要另一本书的想法,可以通过各种方式应用于计算机科学。

答案 11 :(得分:1)

根据我的经验,基本数学如下:

0.- Floating point arithmetic
1.- Linear Algebra
2.- Vector (possibly Tensor) Analysis
3.- Linear Algebra
4.- Linear Algebra
5.- Linear Algebra

如果您了解线性代数,它也会有所帮助。

答案 12 :(得分:0)

Depends中

与数据结构,性能和优化有关的任何事情都需要数学才能获得非常好的结果。换句话说,健壮的数学是大多数核心编程库的基础。

一般来说,我们大多数人都在较高的水平工作,我们只需将所有这些预建系统连接在一起,对我们来说,数学是可选的,但不是必需的。

弗吉

答案 13 :(得分:0)

好吧,我认为一个优秀的程序员必须知道一些涉及逻辑,基本微积分,代数和概率的重要数学主题。

我们有很多重要的事情要知道,甚至对数也很重要,例如评估算法的复杂性,即使在学术课程中通常也没有涉及的一个重要领域是浮点数的算法,想象一个大的管理系统在证券交易所交易,你不能近似任何事情,你必须管理和估计错误,每天数百万次操作每百万错误可能会导致一个大问题....

答案 14 :(得分:0)

这实际上取决于你在做什么。

我做过的大多数事情都不需要乘法。甚至超级复杂的程序。实际上,甚至乘法也很少见。它通常只是加法和减法...

现在,如果你开始做图形,特别是3D图形,你需要一些数学。幸运的是,互联网上有一些优秀的教程。你绝对不需要大学学位,而只是在这里和那里阅读教程和编写一些实验,学习矢量数学和3D图形的所有这些。