Math 编程需要数学吗?

Math 编程需要数学吗?,math,Math,大学期间,我碰巧和一位朋友辩论高等数学是否对任何一位资深程序员都是必要的。他过去常常激烈地反对这一点。他说,程序员只需要高中或大学一年级的数学基础知识,而且几乎所有的编程任务都可以在不需要高等数学的情况下完成。然而,他认为算法是程序员的基础和必备资产 我的立场是,所有计算机科学的进步几乎完全依赖于数学的进步,因此,当程序员处理现实世界中具有挑战性的问题时,全面的数学知识将极大地帮助他们 我仍然无法确定哪一方的论点是正确的。你能根据自己的经验告诉我们你的立场吗?计算机科学!=程序设计 好吧,说真的

大学期间,我碰巧和一位朋友辩论高等数学是否对任何一位资深程序员都是必要的。他过去常常激烈地反对这一点。他说,程序员只需要高中或大学一年级的数学基础知识,而且几乎所有的编程任务都可以在不需要高等数学的情况下完成。然而,他认为算法是程序员的基础和必备资产

我的立场是,所有计算机科学的进步几乎完全依赖于数学的进步,因此,当程序员处理现实世界中具有挑战性的问题时,全面的数学知识将极大地帮助他们


我仍然无法确定哪一方的论点是正确的。你能根据自己的经验告诉我们你的立场吗?

计算机科学!=程序设计

好吧,说真的,我知道好的和坏的程序员都是英语和心理学专业的,还有一些是计算机科学专业的。作为开发人员,我钦佩的一些非常有名的人没有CS背景。例如,拉里·沃尔(Perl)是一位语言学家。 另一方面,了解您正在处理的领域有助于您,因为这样您至少可以看到您的数据是否有意义,并帮助您的客户/用户深入了解他们真正想要的内容。
是的,还有计算复杂性、高效数据结构和程序正确性的问题。这是你在计算机科学中学到的东西,在几乎任何领域都很有用,但这既不是必要的,也不是充分的。

虽然编程可能不需要高等数学(除非你具备编程高等数学的能力),但编程和数学的思维过程非常相似。你从一个已知的基础(公理,以前被证明的理论)开始,并尝试去一个新的地方。不能跳过步骤。如果您确实跳过了步骤,则需要填写空格。这是一个批判性的思考过程,使两者难以置信地相似

此外,数学家和程序员都在抽象中进行批判性思考。现实世界中的事物由对象和变量表示。从具体到抽象的转换能力也将这两个领域联系起来


如果你擅长其中一种,那么你很有可能擅长另一种。

当然,这取决于你想成为什么样的程序员,或者更好地取决于你的雇主希望你成为什么样的程序员。我认为微积分和代数是基础,统计和线性规划确实是一个很好的工具,放在你的公文包里,也许分析(导数,积分,函数…)可以不用。但是,如果你想知道事情是如何进行的(比如电子技术,或者一些非琐碎的算法),“高级”数学是你最好不要错过的东西。

我有数学学位,但我记不起在我的职业生涯中曾经要求过数学。这在训练我的思维进行逻辑思维方面很有用,但我还没有使用流体动力学、量子理论或马尔可夫链编写任何代码。(我想最后一个最有可能出现。)

大多数业务线开发人员在大多数情况下都不需要高等数学。有时,了解三角学会有所帮助,当然,能够理解足够的数学知识来实现数学上描述的算法也很重要——但除此之外呢?不


不要忘记,大多数程序员并不是在推进计算机科学——他们是在构建应用程序。我不需要了解先进的工程技术来驾驶现代汽车,即使通过先进的工程技术,汽车几乎肯定已经得到了改进。

我认为拥有先进的逻辑(离散)数学确实有帮助。这和集合论一样。在处理常见的计算机程序时,这些学科可以提供很大帮助。然而,我在大学里学的很多其他数学是微积分,据我所知,微积分的用途非常有限。由于90%的编程都是用非常简单的数学来编写商业应用程序,我想说的是,在大多数情况下,你只需要很少的数学知识就可以过得去。然而,对布尔代数、逻辑、离散数学和集合论有很好的理解可以让你达到下一个水平。

我所做的大部分编程都涉及到研究的物理模拟,包括电磁学、量子力学和结构力学。由于问题域与高等数学相关,如果不使用高等数学,我将很难解决它们


因此,您的问题的答案是——这取决于您正在尝试做什么。

数学对于某些领域的开发人员来说是必需的,但在其他领域几乎是无用的

如果你是一名游戏开发人员,并且必须大量学习物理,那么理解数学是至关重要的。如果您使用的是高级视觉控件,那么如果没有几何图形,您将无法完成很多工作。如果你打算做一些财务计算,掌握扎实的统计知识会很有帮助

另一方面,在过去的5年里,我只有2到3个项目需要任何数量的数学。其中只有一次谷歌搜索没有帮助

在一天结束时,即使是财务计算也常常是你的客户为你做的事情,并给你公式来实施


因此,如果你从事“应用软件”行业,你可能永远不会使用你的数学学位。如果你在学术界,软件数学是至关重要的。

如果你要写一种新的编程语言,高等数学知识是至关重要的。或者你需要编写自己的算法

然而,对于大多数日常编程(从网站到保险处理应用程序),只有基础数学是必要的

什么类型的编程
(x|y) & (x|z) & (x|foo)
x | (y & z & foo)
- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)