这不是“编程需要数学吗?”问题
我一直认为,对于编程来说,会涉及到一些可怕的复杂数学(我在大学时只能达到中级代数,因为我对它很不好)。
然而,我刚开始作为开发人员的第一份工作,并且发现在基本算术之上没有大量数学(截至目前)。我也在这里读到一个问题,即数学更习惯于确保潜在的开发人员能够理解复杂的问题并解决它们。
所以我想有一种不同类型的编程需要高于代数的数学水平吗?我的猜测就像是视频游戏编程的几何和其他学科,你可以用3D创建形状并在环境中玩时空。还有什么需要高水平的数学?
编辑:哇,很多答案。其中一个让我想到了另一个类似的问题......比如像Photoshop这样的程序,在制作扭曲,裁剪,编辑和着色像图像之类的东西时会涉及什么样的数学(或整体工作)?
答案 0 :(得分:36)
我认为这个问题至少有两种答案。首先,有一些编程是来自数学很重要的领域的问题。其中包括:
然后有各种编程,其中目标不一定是数学的,但实现该目标的过程需要一些数学。其中包括:
等等。其中的各种需要各种水平和方面的数学。
答案 1 :(得分:9)
游戏和模拟是明显的答案。数学并不难,但显然存在。
例如,假设您想构建某种类型的小行星游戏。你需要弄清楚你的太空船的位置。那是一个载体。现在你希望船每一帧都朝某个方向的某个方向行进。你需要添加某种delta-x到x,delta-y到y,所以你的运动是另一个向量:。在小行星游戏中,你在你指向的方向上加速,所以每当你点击'推力'键时,你需要计算dx和dy的增量,或加速度矢量,
(是的,这是与微积分课相同的dx,但现在我正在用它构建机器人僵尸对手。)
但这不是全部。如果你现在就行动,我会投入一些触发器。通常,您将运动和加速度视为角度和距离(r和theta),但编程语言通常需要dx,dy格式的这些值。这里你将使用一些trig:dx = r * cos(theta)和dy = r * sin(theta)
但是,假设你想拥有一颗引力引起的行星?你需要以一种给你轨道行为的方式近似引力(椭圆轨道,射击改变轨道另一边的高度,等等。)如果你理解牛顿的万有引力定律,这是最容易做到的: f =((sqrt(m1 * m2))/ d ^ 2)* G.这告诉你每一帧向你的船上添加多少'行星'力。将这个值乘以从飞船到行星的标准化矢量,并将其添加为新的运动矢量。
信不信由你,我鼓励那些不喜欢数学的人参加游戏编程课程。他们常常发现数学可以(我敢说)当他们在涉及太空爆炸的问题上使用数学时会很有趣。
作为另一个例子,考虑优化声波。模拟波具有无限多个点。将它们全部存储在数字信号中是不可能的,因此我们将音频信号分解为大量的小段,然后测量每个段。如果我们想要一个完美的表示,抓住无限大量的无限小时间片。
画出来,你已经创造了黎曼和,积分的基本思想(实际上是微积分)
又一个例子: 我的一位朋友(一位生物学教授)正在尝试建立一个湖泊生态系统的“模拟城市”式模拟。他是一个不错的程序员,但他在各种计算中陷入了困境。他希望用户改变湖泊的使用情况(舷外发动机,捕鱼限制和倾倒限制),然后看看受影响的氮水平和其他关键因素。
他用嵌套条件和丑陋的布尔逻辑尝试了各种疯狂的if-then结构,但从来没有一个干净的解决方案。
我们获取实际数据,通过Excel运行,并找到一个趋势线,用一个简单的对数公式准确反映他的数据。
用一个简单的公式代替了数百行凌乱的代码。
答案 2 :(得分:7)
以下是一些一般性的地方:
还有许多特定的问题领域需要复杂的数学,但这更多地取决于程序的性质而不是一般的编程。像金融应用这样的事情就属于这一点。
答案 3 :(得分:6)
所有编程都需要数学。我认为具有数学背景的人和具有编程背景的人之间的区别在于他们如何处理和回答问题。但是,如果你提高你的编程技巧,你可能也会在不知不觉中提升你的数学技能(反之亦然)。
如果你抽象地看待编程和数学,你会发现他们的方法是相同的:他们都努力用非常基本的构建模块来回答问题。
Edsger W. Dijkstra写了一篇非常着名的文章,他试图回答你的确切问题。它被称为:On the Interplay Between Mathematics and Programming。
答案 4 :(得分:6)
任何类型的数值分析,如地球物理学或石油勘探。
我曾经为需要大量三角测量的事故调查员建立了一个工具。
在商业编程中,与数学算法不同。
答案 5 :(得分:4)
游戏编程(特别是3-D,正如你所提到的)有很多“更先进”的数学。就此而言,您正在为系统建模的任何项目(例如物理模拟)。
加密也使用不同形式的数学。
答案 6 :(得分:4)
机器人技术需要硬核矩阵,AI需要各种数学。
答案 7 :(得分:2)
我是数学专业的毕业生,我不得不说,我真正看过任何数学课程的地方(上面是非常基本的算术)是理解/简化逻辑语句,所以例如这些是等价的两个陈述:
(!something) && (!otherThing)
!(something || otherThing)
除此之外,您需要更复杂数学的唯一时间是您使用计算机图形学或某些基于数学的科目(例如财务或计算) - 在这种情况下,了解数学更多是关于理解您的主题而不是实际的编程。
答案 8 :(得分:2)
我从事计算化学工作。你需要大量的线性代数和对泰勒展开,积分,梯度,Hessians,傅立叶变换(一般来说,基础集上的扩展),微分方程等技术的一般理解。这不是非常复杂的数学,但你必须知道它。
答案 9 :(得分:2)
我研究的软件与CAD软件非常相似,并且掌握几何图形,至少需要计算几何图形。
答案 10 :(得分:2)
在金融领域有很多复杂的(ish)数学。除此之外,Trig for 3d我不能老实地想到其他的东西。
我确定有一些。
答案 11 :(得分:2)
数字信号处理和AI /模拟/代理等。
通过代码进行动画制作,尤其是当您尝试模拟真实物理时,也需要数学。
答案 12 :(得分:2)
许多看似非数学的行业,例如制药(例如生物信息学),农业,市场营销以及一般而言,任何“商业智能”都严重依赖于统计数据。系统性能,路由,调度,容错 - 列表继续......
答案 13 :(得分:1)
统计数据大量用于执行质量保证和质量分析的企业。我的第一份开发工作是在美国农业部的合同上;这些是标准的“业务线”应用程序,除了他们的业务线恰好涉及大量的统计分析!
答案 14 :(得分:1)
编程就是数学。 (很多时候数学很容易,但总是数学。)
答案 15 :(得分:0)
图像压缩和图像识别都使用傅里叶级数(包括经典正弦波系列和其他正交序列,如小波变换),这些理论通常在数学或工程专业的研究生课程之前都没有涵盖。
非线性优化,约束优化和使用隐藏模型的系统估计同样使用大量高级数学分析。
答案 16 :(得分:0)
计算机科学就是数学。编程是程序员的工作。它们是相关的,但这两个区域并不完全重叠,所以我看到了你的问题。
科学计算和数值分析显然需要线性代数,几何,高级微积分等可能的基础。整个算法,数据结构及其复杂性和性质的研究利用了离散数学,图论,以及微积分和概率。简单的JPEG标准背后有很多信息理论,编码理论,傅立叶分析......这些只是一些例子。
虽然计算机科学家甚至可以在不写一行代码的情况下工作一整天,而且世界上最好的程序员可以只知道一点数学,但事实是计算机执行算法。算法需要数学。我建议你看看Donald Knuth的“计算机编程艺术”,了解“简单”编程之下的内容。
答案 17 :(得分:0)
我获得了气象学硕士学位,我可以告诉你这个领域和其他应用物理领域,你将要做的编码类型需要巨大的数学量。你编码的很多东西都是方程时差。
然而,对于为游戏编写代码而言,您并不总是在代码中进行大量数学运算。游戏需要很多逻辑。数学进入的游戏编码部分就是你编写物理引擎和类似东西的时候。