编程需要数学吗?

时间:2008-10-01 12:35:38

标签: math

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

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

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

71 个答案:

答案 0 :(得分:111)

为了回答你提出的问题,我不得不说,“不,数学不是编程所必需的”。然而,正如其他人在这个帖子中提出的那样,我认为理解数学和能够“算法思考”之间存在相关性。也就是说,能够抽象地思考数量,过程,关系和证据。

当我大约9岁时,我开始编程,并且说我在那个阶段学到了很多数学,这将是一个很大的延伸。然而,通过一些努力,我能够理解变量,for循环,goto语句(原谅我,我是Vic 20 BASIC,我还没有读过任何Dijkstra)和基本的坐标几何将图形放在屏幕上

我最终继续完成纯数学荣誉学位,辅修计算机科学。虽然我主要关注分析,但我也研究了相当多的离散数学,数论,逻辑和可计算性理论。除了能够将统计学,概率论,矢量分析和线性代数中的一些想法应用于编程之外,我研究的数学很少,直接适用于我的本科学位课程以及之后的商业和研究课程。

然而,我坚信数学要求的正式思维方法 - 仔细推理,寻找反例,建立公理基础,发现概念之间的联系 - 在我处理大型复杂的编程项目时,已经是一个巨大的帮助。

考虑运动员为他们的运动训练的方式。例如,足球运动员无疑将大部分训练时间花在基本的足球技巧上。然而,为了提高他们的整体健康水平,他们也可能会花时间在健身房骑自行车或划船机,做重量等。

学习数学可以比作重量训练或交叉训练,以提高你的心理力量和编程的耐力。你必须练习基本的编程技巧,但学习数学是一项令人难以置信的心理训练,可以提高你的核心分析能力。

答案 1 :(得分:56)

虽然编程可能不需要高等数学(除非你编程高级数学能力),编程和数学的思维过程非常相似。你从一个已知事物(公理,以前被证实的理论)的基础开始,并尝试到达一个新的地方。你不能跳过步骤。如果您跳过步骤,则需要填写空白。这是一个关键的思维过程,使两者非常相似。

此外,数学家和程序员都在抽象地批判性思考。现实世界的东西由对象和变量表示。从具体转换为抽象的能力也链接了两个字段。

如果你擅长一个,你很可能会擅长另一个。

答案 2 :(得分:39)

计算机科学!=编程

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

答案 3 :(得分:29)

我想我会成为第一个说你需要数学的人。正如其他人所说,数学对于某些发展方面并不重要,但批判性思维和结构化分析的基础非常重要。

更重要的是,数学对于理解调度程序,优化,排序,协议管理以及计算机的许多其他方面等许多基础知识非常重要。虽然从计算水平涉及的数学并不复杂(其主要是高中代数),但理论和应用可能相当复杂,因为通过微积分对数学的充分理解将是非常有益的。

你能不能没有它,绝对,你不应该让一个不那么全面的数学知识阻止你,但如果你有机会,或倾向我会尽可能多地学习数学,微积分,数字理论,线性代数,组合学,实际应用,所有这些都在广泛的计算机科学中具有实践和理论应用。

我认识那些在围栏两侧都非常成功的人(那些没有专注于数学的人,以及那些为了物理或数学而去学校的人),但在两组中他们都喜欢数值问题并且学习算法和数学理论。

答案 4 :(得分:26)

我有数学学位,但我不记得在我的职业生涯中一次要求数学。它在训练我的思维逻辑思维方面很有用,但我没有使用流体动力学,量子理论或马尔可夫链编写任何代码。 (我怀疑,最后一次是最有可能出现的。)

大多数业务线开发人员大多数时候都不需要高级数学。有时知道三角学可以提供帮助,当然能够理解足够的数学来实现数学上描述的算法可能很重要 - 但除此之外?全息

不要忘记大多数程序员都没有推进计算机科学 - 他们正在构建应用程序。我不需要了解先进的工程技术来驾驶现代汽车,即使该汽车几乎肯定已通过高级工程改进了

答案 5 :(得分:14)

我认为拥有高级逻辑(离散)数学确实可以提供帮助。这与设定理论一起。在处理常见的计算机程序时,这些学科可以提供很多帮助。然而,我在大学里学到的很多其他数学都是微积分,据我所知,微积分的使用非常有限。由于90%(或类似的东西)的编程是用非常简单的数学做商业应用程序,我想说在大多数情况下,你可以通过很少的数学知识来获得。但是,对布尔代数,逻辑,离散数学和集合论的充分理解可以真正让你达到下一个层次。

答案 6 :(得分:14)

我会反对这里说“是”

我从土木工程改为编程(混凝土糟透了!)。我的数学背景包括通常的第一年的东西,第二年和第三年的微积分(Diff EQ,体积积分,系列,傅立叶和拉普拉斯变换)和数值分析课程。

我发现我的数学计算机编程非常缺乏。我缺少完整的离散数学和逻辑领域,而且我只能生存,因为有大量的教科书库,维基百科和沃尔夫勒姆。大多数高级算法都基于高级数学,如果不进行广泛的研究,我就无法开发高级算法(基本上相当于半个课程的工作量。)我当然无法提出新的算法,因为我只是不喜欢没有数学基础作为巨人的肩膀可以站立。

答案 7 :(得分:14)

这取决于你在做什么。如果你做了很多3D编程,那么3D几何知识肯定是必要的,你不同意吗? ;-)如果你想创建一个像JPG这样的新图像格式或像MP3那样的新音频格式,如果你无法理解余弦或傅里叶变换,你也会很丢失,因为这些是基于最有损压缩的基础。如果你很了解你的数学,很多其他问题都可以得到更好的解决。

还有许多其他编程任务,你会发现它们不需要太多数学。

答案 8 :(得分:13)

如果你发现这个主题足够引人注目,那就继续学习吧。剩下的就会自然而然。

答案 9 :(得分:9)

是的,没有必要使用高级数学 - 如果你是商业编程 - 现成的软件。

然而,当处理诸如以下的硬核时:

  • 计算要控制的轨迹 机器人
  • 创建类似AI的应用程序 支持不确定性和自动化 推理
  • 使用三维动画和图形

一些高级数学知识可能会派上用场。并不是说它们是“超越世界”的问题。

我不得不创建一个软件来试图“预测”办公室所需的纸张数量(而这只是为了找出估算值的最佳方法)。

你必须要小心,因为在使用高级东西时很容易迷失 - 我的一个朋友使用图灵来存储动态菜单的状态只是为了正确显示它 - 哼哼。也许他在想象中走得太远了。

答案 10 :(得分:8)

什么类型的编程?

根据我的商业经验,我不需要高等数学,但这在很大程度上取决于你所在的领域。

计算机图形学需要大量的高等数学。许多学术计算机编程都需要高等数学。

所以说,擅长数学的人和擅长编程的人之间往往存在相关性。

我希望这个如愿的回答有所帮助。

答案 11 :(得分:6)

根据我的经验,编程需要数学,你无法摆脱它。整个编程基于数学。

问题不是黑白分明,而是更加丰富多彩。问题不在于你是否需要数学,而是需要多少。更高水平的数学将为您提供更多工具,并为不同的路径打开思路。

例如,如果您只知道加法和减法,则可以编程。当需要乘法时,您将不得不执行许多添加。乘法简化了重复添加。代数允许人们在将数学实现到程序之前简化数学。线性代数提供了转换图像的工具。布尔代数提供了减少所有if语句的机制。

不要忘记数学,逻辑和哲学的兄弟。逻辑将帮助您有效地使用caseswitch语句。哲学将帮助您理解编写您正在修改的代码的人的想法。

是的,你不需要太多的数学来编写程序。某些程序可能需要比其他程序更多的数学更多的数学知识会比那些理解力较差的人更有优势。在这些时代,人们需要获得这些工作所能获得的一切好处。

答案 12 :(得分:6)

我同意克里斯的观点。我也会说“是”。但这取决于您的市场,如上所述。如果您只是创建一些基本的“现成”应用程序或编写工具来帮助您的日常工作......那么数学就不那么重要了。

工程定制软件解决方案需要大量解决问题和批判性思维。当存在数学背景时,绝对增强的技能。我在数学方面辅修了我的计算机工程学位,并且我对我所有的数学导向背景都很有信心,为什么我今天就在这里。

这是我的2美分,我从上面的内容可以看出许多人不同意。我鼓励所有人都认为我不是说你没有数学背景就没有这些技能,我只是说这些技能是具有这种背景的副作用,并且可以积极地影响软件。

答案 13 :(得分:6)

我已经专业编程了8年,因为我12岁就是一个爱好。

数学没有必要,逻辑是。虽然数学是非常有用的,但是说它没有必要就像说要杀死一个人,没有必要使用枪,你可以用刀。嗯,这是真的,但那把枪让它变得容易多了。

有几个最低限度,你应该已经满足。您需要了解基本的代数表达式和符号,以及常见的计算机等价物。例如,您需要知道指数是什么(3到3是27),并且常见的计算机表达式是3 ^ 3。代数的常用符号确实在语言之间发生了变化,但其中许多使用了一种统一的方法。其他人(看着你的LISP)没有。您还需要了解操作顺序。

您需要了解算法思想。首先,然后这个产生这个用于此计算。你有可能理解这一点,或者你没有理解这一点,如果你不理解,这是一个相当困难的障碍;我发现这是你得到的东西,而不是你能学到的东西。相反,有些人并没有“获得”艺术。他们不应该成为画家。此外,CS课程中的学生无法弄清楚为什么这不起作用:  x = z + w;  z = 3;  y = 5; 并不是说他们不理解加法,而是他们没有理解明确表达的要求。如果他们理解,电脑也应该,对吧?如果你看不出上面三行的错误,那么就不要成为程序员。

最后,你需要知道你的编程领域下的数学是什么。会计软件可以停在基本代数上。如果你是编程物理,你需要知道物理(松散)和三维几何中的数学(欧几里德)。如果您正在编程架构软件,则需要了解三角函数。

这比数学更进一步;无论您编程的域名是什么,您都需要完全理解基础知识。如果您是编程语言分析软件,则需要了解概率,统计,语法理论(多种语言)等。

通常,某些领域需要或者可以从您认为无关的知识中受益。例如,如果您正在编写音频软件,则实际上您需要了解三角函数来处理波形。

幅度也会改变一切。如果您正在对1000个项目的财务数据集进行排序,那么这并不重要。但是,如果它是1000万条记录,你会从实际了解矢量数学中获益,并深入理解二进制级别的排序(系统如何按字母顺序排序?它如何知道'a'小于'b “?)

你会发现,作为一名程序员,你的一般知识库将会爆炸,因为每个项目都需要在直接的编程领域之外进行更多的学习。如果你对自我学习感到娇气或懒惰,并且不喜欢每周花费10多个小时从事“家庭作业”的想法,那就不要成为程序员。

如果你喜欢思考练习,如果你喜欢学习,如果你能想到抽象的东西,比如没有计算器的数学或没有画板的设计,如果你有生活和爱好的广泛品味,如果你是自我批评的,可以抛弃'偏爱'的想法,如果你喜欢完善事物,那就成为一名程序员。不要把这个决定建立在数学上,而应该是逻辑思考和学习的能力。那些是重要的;数学只是副产品。

答案 14 :(得分:6)

某些领域的开发人员需要数学,但在其他领域几乎没用。

如果您是游戏开发人员并且必须经常使用物理学 - 对数学的理解至关重要。如果您正在使用高级视觉控件 - 没有几何图形就无法做很多事情。如果您打算进行一些财务计算 - 那将非常有助于掌握统计数据。

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

在一天结束时,甚至经常进行财务计算也是客户为您做的事情,并为您提供实施方案。

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

答案 15 :(得分:5)

数学的基本概念是以下,算法的设计,理解,实现和使用。如果你不能做数学,那是因为你不能做这些事情,如果你不能做这些事情那么你就不能成为一个有效的程序员。

常见的编程任务可能不需要任何特定的数学知识(例如,除非您正在执行3D图形或物理模拟等任务,否则您可能不需要矢量代数和微积分),但基础技能组是相同的,并且在一个领域缺乏能力将与另一领域相应的能力缺乏相匹配。

答案 16 :(得分:5)

具有可靠数学(不仅仅是算术)或逻辑背景的人将很好地应对算法,变量使用,条件推理和数据结构。

  • 不是每个人都可以设计UI。
  • 不是每个人都可以制作高效的代码。
  • 不是每个人都可以清楚地评论和记录。
  • 不是每个人都可以做一个好的算法

数学将帮助你达到一定的目的,但仅限于某一点。

答案 17 :(得分:5)

当然,这取决于你想成为什么样的程序员,或者更好的是你的雇主希望你成为什么样的程序员。我认为微积分和代数是必需品,统计和线性编程确实是公文包中的好工具,也许分析(衍生,积分,函数......)可以不用。但是如果你想知道皮肤深层的东西(例如电子产品,或者一些非平凡的算法),那么“高级”数学就是你最好不要去的地方。

答案 18 :(得分:5)

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

但是,对于大多数日常编程 - 从网站到保险处理应用程序 - 只有基本数学必要

答案 19 :(得分:5)

Math是用于创建程序的工具箱。我推荐Cormen的算法导论。它涉及更“肮脏”的东西。

- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)

答案 20 :(得分:5)

我不认为高级数学知识是一个优秀程序员的必要条件,但根据个人经验,我认为对高级数学有更好掌握的程序员也会成为更好的程序员。这可能仅仅是由于更具逻辑性的思想,或者由于他们解决数学问题的经验而更符合逻辑的前景。

答案 21 :(得分:5)

我所做的大部分编程都涉及物理模拟研究,包括电磁学,量子力学和结构力学等。由于问题域具有与之相关的高级数学,因此我很难在不使用高等数学的情况下解决它们。

所以问题的答案是 - 这取决于你想要做什么。

答案 22 :(得分:4)

我不认为更高的数学是成为优秀程序员的必要条件 - 因为它总是取决于你编码的是什么。

当然,如果你是3D图形编程,你需要矩阵和东西。作为商业软件的作者,您可能需要统计数学。

但作为一名专业程序员近10年(另外10年的业余爱好者),“更高的数学”并不是我需要的。在大约99.8%的情况下,它只是在一些智能组合中的加,减,除和乘法 - 在大多数情况下,它是关于算法,而不是数学。

答案 23 :(得分:4)

你生成了很多回复,但我没有全部阅读。我在这个中间,你不一定不需要数学才能成为一名程序员。 linux中的汇编程序与设备驱动程序相比没有或多或少复杂,也不需要数学。

在任何形式或形式中,你都不需要参加或通过数学课程。

我同意解决编程问题的思维方式与数学解决方案非常相似,因此数学可能很容易实现。或者相反,如果数学很难,那么编程可能很难。当然,不需要课程或学位或任何一件纸或奖杯,然后去学习东西。

现在,如果您无法在头脑,纸上或使用计算器快速地从十六进制转换为二进制到十进制,那么您将很难。如果你想进入网络和其他涉及计时的事情,那些内核驱动程序通常会这样做但不必。你会挣扎。我知道很长一段时间的人都有数学学位和/或计算机科学,和/或工程学位,这些都与速率计算,每秒位数,每秒字节数,你需要做多少内存等等有关。在某种程度上,它可能被认为是某些人拥有的某种诀窍,而其他人则需要努力。

我的底线是我相信意志力,如果你想学习这些东西,你可以和将来,就这么简单。你不需要上课或花很多钱,例如linux和qemu可以让你忙碌很长一段时间,不同的asng langauges等等。用于内核开发,嵌入式等的可破坏环境你不仅限于此,但我不相信如果你不想,你必须跑掉并参加任何课程。如果你想确定参加一些ee课程,一些cs课程和一些数学课程。

答案 24 :(得分:4)

我认为这实际上取决于你想要做什么,但恕我直言,CS和OS理论在这里比数学更重要,你真的只需要他们所涉及的数学。

例如,现代操作系统中许多调度程序背后都有许多调度理论和优化的CS背景。这是一个需要一些数学的例子,虽然不是一件非常复杂的事情。

但老实说,对于大多数人来说,你不需要数学。你需要的是学习在基础2和16中思考的能力,例如精神上的OR / AND能力。例如,如果你有一个字节并且在那个字节内有两个3位字段和2个浪费位,当字节值大于11时,知道哪些位在哪些字段中是活动的,这将使得事情稍微快于必须使用笔和纸。

答案 25 :(得分:4)

我在进入预代数课程的同时开始编程。所以我不会说数学是那么重要,尽管它可以帮助某些类型的编程,特别是功能。

我还没有学过Discrete Math,但是我看到很多理论知识都是用本课程中教授的数学符号编写的。

另外,请确保您知道如何计算任何基数,尤其是基数2,8和16。

另外,一个真正为我带来一些概念的课程是这个预编程课程。我们教过工会,十字路口以及所有那些快乐的东西,它几乎与按位数学相似。我们非常重视布尔逻辑。我认为最有用的是当我们学习如何减少复杂的布尔语句时。这非常方便:

(x|y) & (x|z) & (x|foo)

可以简化为

x | (y & z & foo)

我之前并不太了解。

答案 26 :(得分:4)

数学知识通常对程序员有用,如图形设计技巧,解谜能力,职业道德以及许多其他技能和特征。很少有程序员擅长程序员可能擅长的一切。我不同意任何形式的陈述“你不是真正的程序员,除非你能{在这里插入喜欢的编程能力}”。

但是我会对一个不能做数学的程序员保持警惕。比那些无法画画的人更多。

答案 27 :(得分:4)

你需要数学。编程只不过是数学。理论物理学的任何发现都不会成为实际(适用)的含义,除非它们用数学解决方案来解释。如果它们不能在计算机上解释,更具体地说在编程语言上,那么这些都不能通过计算解决。因此,设计不同的语言来解决具体问题。但是对于通用和广泛的编程语言,如java,c,c ++,我们的大部分编程任务都涉及到相同问题的重复(连续)解决方案,例如从数据库,文本文件中提取值,将它们放在Windows(桌面,Web)上,操作相同的值,有时从类似的设备访问一些数据(但给出不同的品牌名称,不同的端口和头痛)等不涉及单一方法,代数(计数器,一些逻辑),几何(图形)等所以它取决于你想要解决的问题。

答案 28 :(得分:4)

对于大多数程序员来说,学习更高的数学很重要,因为它会使你的大脑在逻辑上思考,逐步地从一件事情到另一件事。

很少有编程工作需要高中数学以上的任何东西。我曾经使用过线性代数。我从未使用过微积分。我每天都使用代数。

答案 29 :(得分:3)

编程要求您掌握或至少学习两门科目。编程本身以及您的程序所用的域名。如果您正在编写会计软件,则需要学习会计,如果您正在编程机器人运动学,那么您需要了解正向和反向运动学。帐户可能只采用基本的数学技能,其他领域采用其他类型的数学。

答案 30 :(得分:3)

编程是计算机科学的工具。

在许多领域的编程中,数学处于后座。如果您不知道如何快速排序,请下载模块为您完成。您不了解椭圆曲线,没问题,购买AES加密模块。


现在是计算机科学。是的,你需要更高水平的数学。毫无疑问。密码学,操作系统,编译器构造,机器学习,编程语言等都需要某种形式的高等数学(微积分,离散,线性,复杂)才能完全理解。

答案 31 :(得分:3)

IMO,你可能需要一个数学天赋,而不需要在该领域有太多的知识。所以你需要擅长数学的东西类似于你擅长编程所需要的东西。

但总的来说,我记不起上次我在日常编程中使用过任何高级数学,所以没有。

答案 32 :(得分:2)

不,不需要数学。自从我毕业以来没有做过任何事情,并且可能忘记了我掌握了什么微小的微积分。

把它想象成一辆汽车。您认为牵引力控制和ABS制动等问题背后有多少数学/物理?许多。使用这些工具需要知道多少数学?无。

编辑:要补充一点。行业在这里可能很重要。在一家研究公司工作的程序员,或为该车编写嵌入式牵引力控制系统,可能比普通商务工具程序员更需要数学。

答案 33 :(得分:2)

保持观点很重要。学习数学,高级数学,计算等对于思考过程非常有用,许多编程职位期望并且可以利用数学和数学概念。但是许多编程工作几乎没有使用数学。

计算机科学,作为一门数学学科,当然需要大量的数学知识。但很少有编程工作是comp sci的衍生工具。 CS是一门非常具体的学科。 IT学校现在将软件工程作为CS的一个独立学科是有原因的。他们是非常不同的领域。

例如,Comp Sci并不能为大多数Web应用程序的世界做好准备。软件工程并不能为编译器设计和内核开发做好准备。

答案 34 :(得分:1)

远射不需要它,但是......

作为一个简单的例子 - 如果不了解几何,你就不能用正方形和矩形做很多事情。 (每个程序员都有/得到几何,所以这只是一个例子。)

如果没有三角学,有些事情很难做到。尝试绘制一个不了解三角学的模拟时钟 - 你可以做到,但你必须经历的过程基本上是重新发明三角学。

微积分很有意思。除非你设计游戏,否则你可能永远不会需要它,但微积分教会你如何模拟更多“真实世界”的东西。例如,如果你试图模拟一棵树落下,为了在拱门的每个点上获得正确的速度,你可能需要大量的数学。

另一方面,这只是一个确切的问题。你可以用微积分做任何事情,你可以用循环和近似来做。

除此之外,为了让事情变得更像生活,你可能需要分形和更高级的数学。

如果您正在编写网站和数据库,则几乎不需要代数101。

答案 35 :(得分:1)

作为一名自学成才的程序员,大约30年前开始从事游戏工作,我肯定会说你需要尽可能多的数学。像矩阵,四元数,光线追踪,粒子系统,物理引擎等等都需要很好的数学理解水平,我只希望我早点学到所有这些东西。

答案 36 :(得分:1)

离散数学我发现非常有帮助。我使用了微积分,有时它也可能非常有用,但我不记得了。例如,我试图实现DIS接口(处理旋转速度和坐标转换等)的时间。我花了一天时间开车到镇上寻找一本书向我解释quaternions(这是在WWW之前)。还有一段时间我最终需要为一些工程师写一个设施来表达n-linear interpolation。如果你不知道这意味着什么,相信我,我也没有。很幸运,那是 post -WWW。

我的建议是不要出汗。你可能会对一两个项目感到困扰,但这些日子并不是那么糟糕。

答案 37 :(得分:1)

根据我的经验,计算机科学学位的数学要求只是为了淘汰那些失败的人。如果你不能通过微积分I和II,你肯定不会通过编译器构造,数据库或操作系统理论的高级课程。

答案 38 :(得分:1)

我是一名游戏程序员,与艺术家,游戏设计师,关卡设计师等合作。

在团队中某人知道一些数学是一个净加,就像有人玩各种游戏一样,有人是我们目标的代表成员观众,经历过一些痛苦作品的人,等等。

通常,知道最多数学的人将是程序员(有时是游戏设计师),因为域名足够接近。但是,每天,游戏程序员不需要超出3D几何和(有时)物理的数学。

在我研究的数学中,我发现统计数据最有用,但我有时会发现自己缺少一些概念。

答案 39 :(得分:1)

我的回答绝对不是。我曾经/现在(现在已经失业了,感谢印度)一位25年以上的计算机程序员。而且,在我的整个职业生涯中,我从未遇到过程序LOGIC,它需要的不仅仅是基本的数学技能。除非你每天使用超过基本数学技能的数学,否则对高级数学的需求是无效的。在公司层面,任何复杂的数学都将被称为静态数学家或数学家,他们将为程序员提供必要的伪代码,并且他们将在最终产品的全面测试中进行合作。最终球在数学书呆子的球场上。在任何级别,除非你是一名数学家/静态/高级程序员,让程序员负责复杂的高级数学计算机程序的预期结果的想法是荒谬的,而且非常愚蠢。

答案 40 :(得分:1)

当我使用计算机解决固体力学和传热问题时,我使用了大量的数学计算。线性代数,数值方法等

由于我正在编写将关系数据库中的信息传递给基于Web的用户界面的业务应用程序,因此我从未充分利用这些知识。

我仍然会向任何人推荐更好的数学背景。

离散数学对开发人员非常有帮助;我没有正式的培训。

我认为“Programming Collective Intelligence”中列出的技术与我作为ME所做的事情相差甚远,可能属于我现在正在做的业务应用程序。 Netflix无疑已经取得了不错的成绩。这种群体情报似乎正在上升。

答案 41 :(得分:1)

回答这个问题: no。

数学人才和编程人才:相关性强,几乎没有因果关系。

一个肯定不是另一个的先决条件,增强你的数学技能不会让你成为一个更好的程序员,除非你在一个专业领域编程,数学是非常完整的(3D图形,统计编程等。)

那说,当然数学背景肯定不会受到伤害,在某些情况下会对你有很大的帮助。正如其他人所指出的那样,数学和编程中涉及的思维过程非常相似;如果你有一个人才,你可能会发现你有另一个人才。

如果我要向程序员推荐数学要求,那就是一些基本的统计数据。几乎所有的编程工作都需要一些报告。

随着你开始做更多高级和/或有趣的事情,对数学的需求确实增加了一点。游戏非常重要,性能关键型应用程序也是如此,您真正需要了解不同算法的成本。

答案 42 :(得分:1)

我要和你一起坐在篱笆上......无论赞成还是反对,都有很多好的论点,而且大多数论据同样有效。那么哪个是正确的答案?

两者......视情况而定。这不是“如果你不和我们在一起,你反对我们”的情况。

数学的许多方面确实使编程领域变得更加容易:几何,代数,三角学,线性方程,二次方程,导数等。事实上,许多最高性能的“算法”都有数学原理

正如Jon指出的那样,他拥有数学学位,但在编程世界中,他几乎没有使用这些知识。我建议他确实使用的数学远远超过他可能考虑的数学,尽管是不知不觉......好吧,也许不是量子力学,而是更基本的原理。每当我们布置GUI时,我们都会使用数学原理以美学上令人愉悦的方式进行设计,我们不会有意识地这样做 - 但我们确实这样做了。

在商业世界中,我们很少考虑我们在软件中使用的数学 - 在我们编写的软件的许多方面,它只是标准算法来完成相同的单调任务,以帮助商业世界赶上可用的技术。

如果没有在我们的软件中有意识地使用数学,那么很容易跳过整个职业生涯。但是,了解数学有助于使编程的许多方面更简单。

我认为问题实际上归结为:“编程需要高级数学吗?”当然,那个的问题答案是否定的......除非你要开始编写和/或破解加密算法(这是一个引人入胜的主题)或者使用水力方程式Mil指出或流量控制系统(就像我过去一样)。但我想补充一点,虽然基本数学可能不是必要,但它会让你的生活更轻松。

答案 43 :(得分:1)

我有数学学位,我不能说它以任何方式帮助了我。 (我开发一般的网络应用程序,没有科学意义)。我喜欢和其他非数学学位的开发人员一起工作,因为他们似乎在我的“数学”框之外思考并强迫我做同样的事情。

答案 44 :(得分:1)

必要!=足够

加油吧!标题上写着“必要”,我认为最好是足够条件才能编程好。就像他们有许多足够但不是必要条件:5年经验,CS学位或任何科学背景。

有些人甚至认为,作为诗人或英语专业可以使你成为一名优秀的API设计师,或者艺术家可以擅长UI / Web编程。

但这些显然不是保证,就像知道数学可能不会让你成为一名优秀的程序员一样,但你可以像其他人一样砍掉一些C ++或F#......

答案 45 :(得分:0)

不,你不需要知道任何数学(除了二进制/八进制/十六进制/十进制表示除外)用于系统编程和类似的东西。

答案 46 :(得分:0)

这是一个很好的答案,你不需要知道数学(地狱我永远不会超出基本的操作顺序:PEMDAS数学)哈哈,但我总是找到一个解决方案。回想1970年的数学对于那些试图使用非常复杂的数学方程有效地编程cpu循环以避免循环等的程序员来说非常重要。

现在计算机是一个强大的循环到100左右,以避免使用复杂的数学从长远来看不会真正伤害你的程序,但当然你将获得数学技能观察员甚至没有学习数学哈哈,这将改善你的高效的编程能力。

让我们面对它你知道的数学越多,你不仅可以更好地优化程序,而且你会理解什么是可能编程的,如果没有阅读那些说不可能的文章,那是不可能的,因为这个疯狂的数学方程式。

学习数学可以帮助你在没有实际经验的情况下理解事物是如何工作的。(我以生活为基础)。

这是我的例子(一些压缩文章)。我一直在努力尝试而不理解它背后的数学......至少从700开始?有缺陷/失败的尝试我现在​​知道更多可能做的事情(可能会再次失败),也知道700种有缺陷的看法。

如果我可能知道数学,我甚至不会尝试那700次有缺陷的尝试,可能是因为他们知道太多的数学。但是,在我不知道那么多数学的情况下,我选择的路径让我觉得更有趣,更有教育意义。

但那就是我......我总是亲自动手......而不是书虫;)

有些导致新的数学突破,其他只会导致更快更优化的软件。

让这成为一个教训,让你们选择最适合自己的路径,相信我都是有益的。

答案 47 :(得分:0)

我认为你描述的任务不需要太多的数学。但一般来说,我认为你真正的高级系统编程:

  • 根本不需要微积分
  • 需要良好的计算机内部性
  • 需要CS很多和操作系统理论
  • 需要离散数学(包括algorythms和组合学)

答案 48 :(得分:0)

系统编程不是火箭科学:-)恕我直言,任何 good 程序员都可以进行系统编程。但是,需要知道

  • 算法(这需要很少的数学,但不能太吓唬好的程序员),
  • 数据结构和
  • 一些(并非所有)领域知识,例如操作系统,架构,编译器。

我认为最受追捧的品质是写出精确代码和能力,如果需要,可以在上述任何项目中进行深入研究。

顺便说一句,这是我的个人理论,YMMV;我不认为自己是一个优秀的程序员! : - (

答案 49 :(得分:0)

要做你想做的事,你不必知道数学,但你必须喜欢它。

答案 50 :(得分:0)

在大学,我们读了Knuth,Graham和Patashnik的“混凝土数学”一书。 这是一本数学书,主题为计算机科学专业的学生选择。几年后,我再次检查了这本书,并注意到我至少使用过一本书中的每一个主题(斯特林数字除外)。

在大多数情况下,了解一些数学有助于以更少的工作,更优雅或实施更快的解决方案来解决问题。这还取决于你正在做的工作。即当你专注于算法时,数学比你专注于工程问题更重要。

答案 51 :(得分:0)

我有两个数学学位。我希望我对数据库了解更多。

我的观点是,虽然能够找到多项式的根或能够证明sqrt(2)是无理的,但在抽象意义上是有用的,但不一定会让你成为更好的程序员。

答案 52 :(得分:0)

关于你在大学里可以学到的唯一有用的东西是理论上的。

答案 53 :(得分:0)

另请参阅stackoverflow中的Is Programmng == Math?

虽然我不认为这是编程所必需的,但我无法告诉你我有多少次能够使用linear algebra概念来编写一个清晰而简短的解决方案来取代复杂的(有时候)不正确)一个。当任何图形或几何体(甚至某些解算器)工作时,matrices的知识以及如何使用它们也非常有用。

答案 54 :(得分:0)

如果没有高级数学背景,有很多编程任务可以很好地完成。可以肯定地说,大多数可用的编程工作很少需要高中水平数学。但是你不打算用你的新生大学代数数学水平来编写有助于将航天飞机放入太空的软件。因此,虽然高级数学通常对许多编程任务并不重要,但更难的问题绝对需要它。学习数学还可以教授几乎可以在任何地方使用的有价值的解决问题的技巧。我想你可以说大部分时间都没有必要,但几乎所有时间都会有所帮助。

答案 55 :(得分:0)

对于一般的GUI和Web应用程序,只需要基本的数学知识。

一生一次,你可能会有一个奇怪的项目,你需要微积分或线性代数。

(如果您进行3D游戏编程或其他一些特定的编程领域,您可能每天都需要它)

答案 56 :(得分:0)

我认为这个问题有一些好处。

正如David Nehme在此发表的那样,计算机科学和编程是两个截然不同的主题。

我发现具有非常基础的高中和早期大学数学技能的程序员可能是一个称职的程序员。不过,对计算机科学毕业生不太确定。

正如您正确指出的那样,算法创建过程与您如何处理数学非常相关。即使这只是数学和分析过程的结果,您也必须完成以正确设计算法。

我也认为这在很大程度上取决于你在做什么,而不仅仅取决于你的工作描述或技能。例如,如果编程和数学都是产生某种效果的工具,那么你肯定必须胜任两者(即:你正在为某种目的制作模型化程序)。虽然,如果编程是您活动的最终目标,那么很可能不需要数学。 (即:您正在制作网络应用程序)

答案 57 :(得分:0)

如果你需要在日常工作中使用高级数学,因为程序员真正依赖于你的任务。我需要他们。原因是我必须对管道系统进行液压计算,以便在管道系统建成之前对其进行代码评估。由于欠压或过压,您永远不想站在坍塌的管道系统附近。 ;)

我想对于许多其他类型的“现实世界的模拟”,你也需要高等数学。

答案 58 :(得分:0)

统计机器学习技术变得越来越重要。

答案 59 :(得分:0)

答案 60 :(得分:0)

我觉得这个问题(我得到了很多)最好用一个类比来回答。

我们许多人举重。为什么?是因为当我们成为一名职业举重运动员时,我们正在为那一天做准备吗?我们是否会将重量提升作为工作要求?

当然不是。我们举重,因为它锻炼我们的肌肉。它使我们保持健康和身材。适合的人在其他方面表现更好:远足,建筑,跑步,睡觉等。

学习数学就像大脑举重一样。它可以锻炼头脑,保持身材。你可能永远不会在你的职业生涯中使用微积分,但是因为它你的大脑会更好。

答案 61 :(得分:0)

商业编程:算术,一些代数

工程:数值分析

科学编程:天空是极限

答案 62 :(得分:0)

你不需要太多的数学。一些组合思维可以帮助您构建并减少快速执行的问题。能够繁殖是好的。你是工程师,近似很好。

答案 63 :(得分:0)

数学既是一种思考方式,也是关于技能本身的方式。甚至那就是几个层面。其他人指出,数学常用的分析和抽象技能对编程很有价值,而且是一个层次。我还认为,还有另一个层次包含从一个到另一个的精确类似物 - 例如关系数据库背后的集合理论,它们都被SQL语义所隐藏。

通常情况下,“最佳” - 我的意思是最高效和简洁 - 解决方案是那些背后有一些数学的解决方案。如果你开始把你的面向数据的编程问题想象成矩阵操作,那么你可以经常从数学世界中找到新颖的解决方案。

显然,没有必要成为一名数学专家才能进行编程,任何人都可以被教授,但这是值得拥有的技能之一 - 并且在新兵中寻找。

答案 64 :(得分:0)

在某些编程中,我认为数学最有帮助,但不是程序员。我很幸运,如果我可以在没有方便的花花公子计算器的情况下添加2 + 2。

答案 65 :(得分:0)

取决于编程任务。我会把'从数据库中获取数据并将其显示在网站上的风格编程中向不那么多的方面显示,然后在另一方显示'视频游戏'(我在游戏中工作,我觉得我使用一些随机的不同每天数学的味道,如果我知道更多,可能会使用更多。)

答案 66 :(得分:0)

这取决于你做了什么:网络开发,商业软件等。我认为对于这种东西,你不需要数学。

如果你想做计算机图形,音频/视频处理,人工智能,加密等,那么你需要数学背景,否则你根本就不能这样做。

答案 67 :(得分:0)

我想到了两件事:

  • 语境至关重要。如果您是游戏程序员或工程学科,那么数学可能对您的工作至关重要。我做数据库和网络开发,因此高中数学对我来说很好。
  • 您很可能会重复使用其他人预先构建的数学代码而不是重新发明轮子,尤其是在加密和压缩等领域。 (如果您正在使用第三方物理工具或3D引擎进行游戏开发,这也可能适用。)在您的程序中使用经过试验和测试的例程框架可以防止错误和潜在的安全漏洞 - 绝对是一件好事。 / LI>

答案 68 :(得分:0)

我认为Certian种类的数学是不可或缺的。例如,每个软件工程师都应该了解并理解De Morgan's lawsO notation

其他种类非常有用。在模拟中,我们经常需要进行大量的物理建模。如果您正在进行图形工作,您经常会发现自己需要编写坐标转换算法。在我20年的职业生涯中,我还有许多其他的情况,我需要编写并解决同步的线性方程,以找出算法中要包含的常数。

答案 69 :(得分:0)

我承认我从未在编程中使用任何高级数学,除了一些关于数学主题的宠物项目。

那就是说,我很乐意和那些足够聪明的人一起学习数学。掌握复杂和困难的东西有助于让你的大脑成型,以解决复杂和困难的编程问题。

答案 70 :(得分:0)

您无需为编程学习数学。

但学习数学训练你思考纪律。因此,我认为数学对开发人员有益。