这不是"编程所需的数学吗?" 题.
我一直认为,对于编程来说,会涉及到一些可怕的复杂数学(我在大学时只能达到中级代数,因为我对它很不好).
然而,我刚开始作为开发人员的第一份工作,并且发现基本算术上没有大量的数学(截至目前).我也在这里读到一个问题,即数学更习惯于确保潜在的开发人员能够理解复杂的问题并解决它们.
所以我想有一种不同类型的编程需要高于代数的数学水平吗?我的猜测就像是视频游戏编程的几何和其他学科,你可以用3D创建形状并在环境中玩时空.还有什么需要高水平的数学?
编辑:哇,很多答案.其中一个让我想到了另一个类似的问题......比如像Photoshop这样的程序,在制作扭曲,裁剪,编辑和着色像图像之类的东西时会涉及什么样的数学(或整体工作)?
我认为这个问题至少有两种答案.首先,有一些编程是来自数学很重要的领域的问题.这些包括:
金融
科学研究,例如物理建模
工程实施,例如应力分析,化学工程
实验科学,例如物理学,心理学
数学本身
加密
图像处理
信号处理
然后有各种编程,其中目标不一定是数学的,但实现该目标的过程需要一些数学.这些包括:
游戏
优化过程
高复杂性系统,例如飞行控制软件
高可用性系统,例如工业过程监控和/或安全
复杂的数据转换,例如编译器设计
等等.这些中的各种需要数学的各种水平和方面.
游戏和模拟是明显的答案.数学并不难,但显然存在.
例如,假设您想构建某种类型的小行星游戏.你需要弄清楚你的太空船的位置.那是一个载体.现在你希望船每一帧都朝某个方向的某个方向行进.你需要添加某种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运行,并找到一个趋势线,用一个简单的对数公式准确地反映他的数据.
用简单的公式代替了数百行乱码.
这是一些一般的地方:
图像
加密
统计
压缩
优化
还有许多特定的问题领域需要复杂的数学,但这更多地取决于程序的性质而不是一般的编程.像金融应用这样的东西属于这个.
任何类型的数值分析,如地球物理学或石油勘探.
我曾经为需要大量三角测量的事故调查员建立了一个工具.
在商业编程中,与算术不同的是数学.
所有编程都需要数学.我认为具有数学背景的人和具有编程背景的人之间的区别在于他们如何处理和回答问题.但是,如果你提高你的编程技巧,你可能也会在不知不觉中提升你的数学技能(反之亦然).
如果你抽象地看待编程和数学,你会发现它们的方法是相同的:它们都努力用非常基本的构建块来回答问题.
Edsger W. Dijkstra有一篇非常着名的文章,他试图回答你的确切问题.它被称为:数学与编程之间的相互作用.