Is mathematics necessary for programming?

I happened to debate with a friend during college days whether advanced mathematics is necessary for any veteran programmer. He used to argue fiercely against that. He said that programmers need only basic mathematical knowledge from high school or fresh year college math, no more no less, and that almost all of programming tasks can be achieved without even need for advanced math. He argued, however, that algorithms are fundamental & must-have asset for programmers.

My stance was that all computer science advances depended almost solely on mathematics advances, and therefore a thorough knowledge in mathematics would help programmers greatly when they're working with real-world challenging problems.

I still cannot settle on which side of the arguments is correct. Could you tell us your stance, from your own experience?

169110 次浏览

computer science != programming

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

不,不需要数学。自从我毕业后就没学过,而且可能已经忘了我掌握的那点微积分了。

把它想象成一辆车。你认为像牵引力控制和 ABS 制动这样的事情背后有多少数学/物理原理?很多。使用这些工具需要多少数学知识?没有。

编辑: 还有一件事要补充。工业在这里可能很重要。在研究公司工作的程序员,或者为那辆车编写嵌入式牵引力控制系统的程序员,可能比一般的业务工具程序员更需要数学。

虽然高等数学可能不需要编程(除非你有编程高等数学的能力) ,但是编程和数学的思维过程是非常相似的。你从一个已知事物的基础开始(公理,先前被证明的理论) ,然后尝试到达一个新的地方。你不能跳过步骤。如果您确实跳过了步骤,那么您就需要填写这些空白。这是一个批判性的思维过程,使两者惊人地相似。

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

如果你擅长其中一个,很有可能你也会擅长另一个。

当然,这取决于您想成为什么样的程序员,或者您的雇主希望您成为什么样的程序员。我认为微积分和代数是必不可少的,统计和线性规划确实是一个很好的工具,也许分析(导数,积分,函数...)可以不用。但是,如果你想知道事物是如何运作的(例如,电子学,或者一些非琐碎的算法) ,“高等”数学是你最好不要离开任何地方。

我有一个数学学位,但我不记得在我的职业生涯中有一次需要这个数学学位。这对训练我的逻辑思维很有帮助,但我没有用流体力学、量子理论或马尔可夫链编写任何代码。(我怀疑,最后一个问题最有可能出现。)

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

不要忘记,大多数程序员不是在推进计算机科学——他们是在构建应用程序。我不需要知道先进的工程学来驾驶一辆现代化的汽车,即使那辆汽车几乎肯定已经改进了 through先进的工程学。

我认为拥有高级逻辑(离散)数学真的有帮助。还有集合论。当处理常见的计算机程序时,这些学科可以帮助很多。然而,我在大学里学的很多其他数学都是微积分,在我看来,微积分的用途非常有限。由于90% (或类似的)的编程是用非常简单的数学做商业应用程序,我想说,在大多数情况下,你可以用非常少的数学知识。然而,对布尔代数、逻辑、离散数学和集合论的良好理解可以使你真正进入下一个层次。

Most of the programming I have done involved physics simulations for research including things like electromagnetism, quantum mechanics and structural mechanics. Since the problem domains have advanced mathematics associated with them I would be hard pressed to solve them without using advanced mathematics.

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

Mathematics are needed for developers in some fields but are almost useless in others.

如果你是一个游戏开发者,并且必须和物理学打交道,那么对数学的理解是至关重要的。如果您使用的是高级视觉控件,那么没有几何图形就无法做很多事情。如果你正计划做一些财务计算-它将真正有助于有坚实的统计知识。

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

在一天结束时,甚至财务计算往往是你的客户为你做的事情,并给你公式实施。

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

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

然而,对于大多数日常节目——从网站到保险处理应用程序——来说,只有基本的数学知识是 necessary

什么类型的程序?

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

Computer graphics require a large amount of advanced mathematics. A lot of academic computer programming requires advanced mathematics.

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

我希望这个模棱两可的回答能有所帮助。

我的意思是,你可能需要一个数学天赋,但不一定在这个领域有很多知识。所以你需要擅长数学的东西和你需要擅长编程的东西是相似的。

但总的来说,我不记得上次在日常编程中使用高等数学是什么时候了,所以不记得了。

I don't think that higher math is a requirement for being a good programmer - as always it depends on what you are coding.

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

但是作为一个专业程序员近10年(和另一个10年业余)“高等数学”是不是我需要定期。在大约99.8% 的情况下,在一些智能组合中,它只是正、负、除和乘法——在大多数情况下,它是关于算法的,而不是数学。

对于大多数程序员来说,学习高等数学非常重要,因为它能让你的大脑一步一步地进行逻辑思考,从一件事情到另一件事情。

然而,很少有编程工作需要高中数学以上的东西。我用过一次线性代数。我从没用过微积分。我每天都用代数。

这取决于你在做什么。如果你做了很多3D 编程,3D 几何的知识当然是必要的,你不同意吗?如果你想创建一个新的图像格式,比如 JPG 或者新的音频格式,比如 MP3,如果你不能理解余弦或傅立叶变换,你也会很迷茫,因为这些是大多数有损数据压缩的基础。如果你的数学相当好,许多其他问题可以更好地解决。

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

另请参阅 stackoverflow 中的 编程 = = 数学吗?

虽然我不认为它是编程所必需的,但我不能告诉你有多少次我能够使用 线性代数线性代数的概念来编写一个清晰而简短的解决方案来替代一个复杂的(有时是不正确的)解决方案。当洞任何图形或几何(甚至一些解决方案)的工作,知识的 矩阵和如何与他们一起工作也是非常有用的。

是的,没有必要进行高等数学-如果你是商业编程-现成的软件。

然而,在处理核心问题时,例如:

  • 计算要控制的轨道 一个机器人
  • 创建类人工智能应用程序 支持不确定性和自动性 推理
  • 玩3D 动作和图形

一些先进的数学知识可能会派上用场,而且它们也不是什么“天外之物”的问题。

我不得不创建一个软件,试图“预测”办公室所需的纸张数量(找到估算值的最佳方法简直就是地狱)。

You have to be careful, though, because it is easy to get lost when using advanced things - there is a friend of mine who resorted to using Turing to store the state of a dynamic menu just to display it correctly - humm... perhaps he wnet too far in his imagination.

在没有高等数学背景的情况下,很多编程任务都可以很好地完成。可以肯定地说,大多数编程工作只需要高中数学水平。但是,你不会写软件,帮助把航天飞机在太空黑客与你的大学一年级代数数学水平。所以,虽然高等数学对于很多编程任务来说并不重要,但是更难的问题绝对需要高等数学。学习数学还能教会我们几乎在任何地方都可以使用的有价值的解决问题的技能。我想你可以说,大多数时候这并不是必要的,但是它肯定会在几乎所有的时间里起作用。

有扎实的数学(不仅仅是算术)或逻辑背景的人会很好地处理算法,变量使用,条件推理和数据结构。

  • 不是每个人都能设计 UI。
  • Not everyone can make efficient code.
  • 不是每个人都能清楚地评论和记录。
  • 不是每个人都能做出好的算法

数学可以帮助你达到一个点,但只能达到一个点。

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

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

(如果你做3D 游戏编程或其他特定的编程领域,你可能每天都需要它)

数学知识经常对程序员有用,如图形设计技能,解决难题的能力,职业道德和许多其他技能和特点。很少有程序员擅长程序员可能擅长的所有事情。我不同意“除非你能{ 在这里插入最喜欢的编程能力} ,否则你不是一个真正的程序员”这样的说法。

但是我会提防一个不会做数学的程序员。而不是一个不会画画的人。

我要逆着纹理说“好”

我从土木工程转向编程(混凝土烂透了!).我的数学背景包括第一年的常规课程、第二年和第三年的微积分(差分均衡、体积积分、级数、傅立叶变换和拉普拉斯变换)和一门数值分析。

我发现我的数学在计算机编程方面非常欠缺。有整个领域的离散数学和逻辑,我是错过了,我只有生存下来,由于大量的教科书,维基百科和 Wolfram 图书馆。大多数高级算法都是基于高级数学的,如果不做大量的研究(基本上相当于半个课程的工作量) ,我就无法开发出高级算法我当然不能提出新的算法,因为我只是没有数学基础作为巨人的肩膀上站立。

I agree with Chris. I would say "Yes", also. But this depends on your market as stated above. If you are simply creating some basic "off-the-shelf" applications or writing tools to help your everyday work...then math isn't nearly as important.

工程自定义软件解决方案需要大量的问题解决和批判性思维。当有数学背景时,这些技能肯定会得到提高。我辅修了数学和我的计算机工程学位,我给我的所有数学导向的背景信贷为什么我今天在这里。

这是我的2美分,我可以从以上的阅读中看出,许多人不会同意。我鼓励大家考虑一下,我并不是说没有数学背景你就不能拥有这些技能,我只是说这些技能是拥有数学背景的副作用,可以对软件产生积极的影响。

在我看来,这个问题有一些好的地方。

正如 David Nehme 所说,计算机科学和编程是两门完全不同的学科。

我发现,一个拥有非常基本的高中和大学早期数学技能的程序员完全有可能成为一个称职的程序员。不过,对于计算机科学专业的毕业生,我就不那么确定了。

正如您正确指出的,算法创建过程与您处理数学的方式密切相关。即使这只是为了正确设计算法而必须完成的数学和分析过程类型的结果。

我还认为,这在很大程度上取决于你在做什么,而不是取决于你的工作描述或技能。例如,如果编程和数学都是产生某种效果的工具,那么你必须同时具备这两种能力(例如: 你正在为某种目的制作一个模型化程序)。尽管如此,如果编程是你活动的最终目标,那么很可能就不需要数学了。(例如: 你正在制作一个 web 应用程序)

我不认为高等数学知识是优秀程序员的必备条件,但基于个人经验,我认为对高等数学有更好掌握的程序员也能成为更好的程序员。这可能仅仅是因为他们的头脑更有逻辑性,或者是因为他们解决数学问题的经验使他们的观点更有逻辑性。

Programming requires you to master, or at least learn, two subjects. Programming itself and what ever domain your program is for. If you are writing accounting software, you need to learn accounting, if you are programming robot kinematics, then you need to understand forward and reverse kinematics. Account might only take basic math skills, other domains take other types of math.

保持正确的观点很重要。学习数学,高等数学,微积分等是伟大的思想过程和许多编程职位期望,可以利用数学和数学概念。但是许多编程工作几乎不使用数学。

计算机科学,作为一门数学学科,当然需要大量的数学知识。但很少有编程工作是计算机科学的衍生品。计算机科学是一门非常特殊的学科。信息技术学校现在把软件工程作为一门独立于计算机科学的学科是有原因的。它们是非常不同的领域。

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

作为程序员,如果你在日常工作中需要高等数学,那么这真的取决于你的任务。我需要他们。原因是我必须与管道系统的水力计算工作,以评估在规范管道系统建设之前。你永远不会想站在一个崩溃的管道系统附近,因为低于或超压。;)

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

Statistical machine learning techniques are becoming increasingly important.

Programming is a tool of computer science.

在编程的许多领域中,数学都处于次要地位。如果您不知道如何快速排序,可以下载一个模块来帮助您。你不懂椭圆曲线,没问题,买一个 AES加密模块。


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

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

我们很多人都举重。为什么?是因为我们在为成为职业举重运动员的那一天做准备吗?我们会不会遇到举重作为一项工作要求?

当然没有。我们举重是因为它锻炼我们的肌肉。它使我们保持健康和体形。一个健康的人会在其他方面表现得更好: 徒步旅行、建筑、跑步、睡觉等等。

学习数学对大脑来说就像举重。它锻炼头脑,保持头脑的形状。你可能永远不会在你的职业生涯中使用微积分,但是你的大脑会因为它而变得更好。

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

常见的编程任务可能不需要任何特定的数学知识(例如,你可能不需要矢量代数和微积分,除非你做的任务像3D 图形或物理模拟,例如) ,但潜在的技能集是相同的,在一个领域缺乏能力将与在另一个领域相应的能力缺乏匹配。

Business programming: arithmetic, some algebra

工程: 数值分析

科学编程: 天空是极限

虽然不是必须的,但是..。

举个简单的例子——没有对几何的理解,你不可能用正方形和长方形做很多事情。(每个程序员都有/得到几何图形,所以这只是一个例子)。

没有三角函数,有些事情是很难做到的。试着画一个不懂三角学的模拟时钟——你可以做到,但是你必须经历的过程本质上是重新发明三角学。

微积分很有趣。你可能永远不会需要它,除非你设计游戏,但微积分教你如何建模的东西,行动更多的“真实世界”。例如,如果你试图建立一棵倒下的树的模型,为了得到沿着拱门的每一点的正确速度,你可能需要大量的数学。

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

除此之外,为了使事物更加逼真,你可能需要分形和更高级的数学。

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

大学里唯一有用的东西就是理论。

数学既是一种思维方式,也是一种技能本身。甚至在几个层面上也是如此。还有人指出,数学中常见的分析和抽象技能对编程是有价值的,这只是其中一个层次。我还认为,还有另一个层次包含精确的类比,可以从一个层次进行到另一个层次——例如,关系数据库背后的集合理论,这一切都被 SQL 语义所隐藏。

通常“最好的”——我的意思是最有效和最简洁的——解决方案是那些背后有一点数学的解决方案。如果你开始把面向数据的编程问题想象成矩阵操作(很多都是这样) ,你通常可以从数学世界中找到新颖的解决方案。

显然,为了编程,没有必要成为一名数学专家,任何人都可以学习,但这是值得拥有的技能之一——而且值得在招聘中寻找。

在一些编程中,我认为数学是最有帮助的,但对于程序员来说就不是了。我很幸运,如果我可以添加2 + 2没有我的方便的花花公子计算器。

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

要回答你提出的问题,我必须说,“不,数学对于编程来说是不必要的。”。然而,正如其他人在这个帖子中所建议的,我相信理解数学和能够“用算法思考”之间是有关联的。也就是说,能够抽象地思考数量、过程、关系和证明。

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

我最终获得了纯数学的荣誉学位,辅修了计算机科学。虽然我主要专注于分析,但我也学习了相当多的离散数学、数论、逻辑和可计算性理论。除了能够将统计学、概率论、向量分析和线性代数等一些概念应用于编程之外,我在本科学位期间学到的、直接适用于我的编程的数学知识,以及之后所学的商业和研究编程知识,几乎都不存在。

然而,我坚信,数学所需要的正式思维方法ーー仔细推理、寻找反例、建立公理基础、发现概念之间的联系ーー在我处理大型复杂的编程项目时,一直是非常有帮助的。

想想运动员为他们的运动训练的方式。例如,足球运动员无疑把大部分训练时间花在基本的足球技术上。然而,为了提高他们的身体素质,他们也可以花时间在健身房骑自行车或划船机器,做重量训练等等。

学习数学可以比作举重训练或交叉训练,以提高你的精神力量和编程耐力。练习你的基本编程技能是绝对必要的,但是学习数学是一种难以置信的脑力锻炼,可以提高你的核心分析能力。

这取决于你做什么: Web 开发,商业软件等等。我觉得这种事不需要数学。

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

我想到了两件事:

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

某些数学我认为是必不可少的。例如,每个软件工程师都应该知道和理解 德摩根定律符号 O

其他种类的只是非常有用。在仿真中,我们经常要做大量的物理建模。如果你正在做图形工作,你会经常发现自己需要编写坐标转换算法。在我20年的职业生涯中,我遇到过许多其他的情况,我需要写出并解决联立线性方程组,以便找出在算法中应该加入什么常数。

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

现在我正在编写将信息从关系数据库传递到基于 Web 的用户界面的业务应用程序,因此我从来没有利用过这些知识。

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

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

我认为在“ 编程集体智慧”中列出的技术与我作为一个 ME 所做的事情相去甚远,可能会落入我现在正在做的商业应用程序中。Netflix 公司的生意确实不错。这种集体情报活动似乎正在兴起。

回答问题: 没有。

数学天赋与编程天赋: 相关性强,几乎没有因果关系。

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

也就是说,当然一个数学背景不会伤害你,在某些情况下会对你有很大的帮助。正如其他人所指出的,数学和编程的思维过程是非常相似的; 如果你对其中一个有天赋,你可能会发现你对另一个也有天赋。

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

The need for mathematics does increase a little as you start to do more of the advanced and/or fun stuff. Games are pretty math-heavy, so are performance-critical applications where you really need to understand the costs of different algorithms.

我打算和你们在这里保持中立... ... 有很多支持和反对的好论据,而且大多数都是同样有效的。那么哪个才是正确答案呢?

两者都有... 取决于具体情况。这不是“如果你不支持我们,你就是反对我们”的情况。

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

正如乔恩指出的那样,他获得了数学学位,但在编程领域,他几乎不用这些知识。我认为他使用数学的次数远远超过他的想象,尽管有些不自然... 好吧,也许不是量子力学,而是更基本的原则。每次我们设计一个图形用户界面,我们使用数学原理以一种美观的方式进行设计,我们并不是有意识地这样做,但我们确实这样做了。

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

如果不在我们的软件中有意识地使用数学,那么跳过整个职业生涯是非常容易的。然而,对数学的理解有助于简化编程的许多方面。

我认为这个问题实际上可以归结为: “ advanced数学对于编程是必要的吗?”当然,对于 那个的问题,答案是否定的... ... 除非你开始写作和/或破解加密算法(这是一个有趣的主题) ,或者像米尔指出的那样使用液压方程式或者流量控制系统(就像我过去所做的那样)。但我要补充的是,虽然基础数学可能不是 necessary,它会使你的生活容易得多。

我有一个数学学位,我不能说它在任何方面帮助了我。(我开发一般的网络应用程序,没有什么科学依据)。我喜欢和其他没有数学学位的开发人员一起工作,因为他们似乎跳出了我的“数学”思维框架,强迫我做同样的事情。

我承认我从来没有在编程中使用过任何高等数学,除了一些关于数学主题的项目。

That said, I do enjoy to working together with people that are bright enough to grok maths. Mastering complex and difficult stuff helps to get your brain into shape to solve complex and difficult programming problems.

必要的! = 足够的

来吧,伙计们!标题说“ 有需要”,我认为这是最好的一个 足够条件,能够编程很好。正如他们有许多充分但不是必要的条件: 5年的工作经验,一个计算机科学学位,或任何科学背景。

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

但是这些显然不是保证,就像知道数学可能不会让你成为一个好的程序员,但是你可以砍掉一些 C + + 或 F # 像其余的..。

我的回答是绝对不行。我(现在失业了,多亏了印度)做了25年的程序员。而且,在我的整个职业生涯中,我从来没有遇到过除了基本的数学技能之外还需要逻辑的程序。除非你每天都用超过基本数学技能的数学来工作,否则对高等数学的需求是无足轻重的。在公司层面上,任何复杂的数学都会被提交给统计学家或数学家,他们将为程序员提供必要的伪代码,并且两者将在最终产品的彻底测试中进行协作。最终决定权在数学呆子手里。除非你是一个数学家/统计学家/高级程序员,否则让一个程序员负责一个复杂的高级数学计算机程序的预期结果的想法是荒谬的,而且非常鲁莽的。

编程不需要学数学。

但是学习数学可以训练你的思维纪律,所以我认为数学对于开发者来说是有好处的。

我认为这真的取决于你想做什么,但恕我直言,计算机科学和操作系统理论在这里比数学更重要,你真的只需要他们所涉及的数学。

例如,在现代操作系统中,调度理论和优化方面有很多 CS 背景知识,这些知识在很多调度程序背后都是站不住脚的。这是一个需要一些数学计算的例子,虽然不是非常复杂的东西。

但说实话,大多数东西,你不需要数学。你所需要的是学习以2和16为基数的思考能力,比如精神上的 OR/AND 能力。例如,如果你有一个字节,在这个字节中有两个3位字段和两个被浪费的字段,当字节值为11时,知道哪些字段处于活动状态,会比使用笔和纸稍微快一点。

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

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

  • 根本不需要微积分
  • 需要对计算机内部结构有很好的理解
  • 需要 CS 的物流和操作系统理论
  • 需要离散数学(包括算法和组合数学)

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

如果你觉得这个主题足够吸引你发表这篇文章,那么就开始学习吧。剩下的就自然而然了。

我几乎是在进入代数预科班的同时开始编程的。.所以我不会说数学是那么重要,尽管它可以帮助某些类型的编程,特别是函数式编程。

I haven't taken Discrete Math yet, but I see a lot of theory stuff with programming written in a math-notation that is taught in this class.

另外,确保你知道如何计算任何基数,特别是基数2,8和16。

Also, one class that really brought home some concepts for me was this pre-programming class. We got taught unions, intersections, and all that happy stuff and It almost exactly parallels bitwise math. And we covered boolean logic very heavily. What I considered the most useful was when we learned how to reduce complex boolean statements. This was very handy:

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

可以简化为

x | (y & z & foo)

我之前没有完全理解。

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

更重要的是,数学对于理解诸如调度程序、优化、排序、协议管理以及计算机的许多其他方面的许多基础知识非常重要。虽然从计算层面涉及到的数学并不复杂(主要是高中代数) ,但是理论和应用可能相当复杂,因为通过微积分对数学有扎实的理解将会带来巨大的好处。

没有它,你能生活下去吗? 当然,你不应该让一个不那么透彻的数学知识阻碍你,但是如果你有机会,或者有兴趣,我会尽可能多地学习数学,微积分,数值理论,线性代数,组合学,实际应用,所有这些在计算机科学的广泛领域中都有实际和理论应用。

我认识一些人,他们在两方面都非常成功(那些没有强烈关注数学的人,以及那些在学校学习物理或数学的人) ,但是在两个群体中,他们都喜欢数字问题,喜欢学习算法和数学理论。

系统编程不是火箭科学: ——恕我直言,任何 good程序员都可以接近系统编程

  • 算法(这需要很少的数学,但不会吓到一个好的程序员) ,
  • 数据结构,以及
  • 一些(并非全部)领域知识,例如操作系统、架构、编译器。

我认为最受欢迎的素质将是写 precise代码和能力去深入,如果需要的话,在任何上述项目。

顺便说一下,这是我的个人理论,YMMV; 我还不认为自己是一个好的程序员

In my experience the Math requirement for a Computer Science degree exists simply to weed out those who will fail. If you cannot pass Calculus I and II you will most definitely not pass an advanced course on compiler construction, database or operating systems theory.

离散数学对我很有帮助。我学过微积分,有些时候它可能也很有帮助,但是我一点都不记得了。例如,有一次我试图实现一个 DIS接口(它处理诸如旋转速度和坐标转换之类的事情)。我花了一整天的时间开车到处找一本书来向我解释 四元数(这是在万维网之前)。还有一段时间,我最终需要为一些工程师编写实现 N 次线性插值的工具。如果你不知道这意味着什么,相信我,我也不知道。幸运的是,这是 邮寄-WWW。

My advice is to not sweat it. You may be hamstrung on a project or two, but not all that badly these days.

As a self taught programmer who started working on games about 30 years ago I would definitely say you need to get as much math as you can. Things like matrices, quaternions, ray tracing, particle systems, physics engines and such do require a good level of math comprehension and I only wish that I had learned all those things much earlier.

根据我的经验,编程需要数学,你不能逃避它。整个编程是以数学为基础的。

这个问题不是非黑即白的,而是更加丰富多彩的。问题不在于你是否需要数学,而在于你需要多少。更高的数学水平会给你更多的工具,并打开你的思想不同的道路。

例如,如果只知道加法和减法,则可以编程。当需要进行乘法运算时,必须执行大量的加法运算。乘法简化了重复加法。代数允许人们在把数学应用到程序中之前简化它。线性代数提供了转换图像的工具。布尔代数提供了减少所有这些 if语句的机制。

别忘了数学,逻辑和哲学的兄弟姐妹。逻辑将帮助您有效地使用 caseswitch语句。哲学会帮助你理解那个写了你正在修改的代码的人的想法。

是的,编写程序不需要太多的数学知识。有些程序可能比其他程序需要更多的数学知识。更多的数学知识会让你比那些不太懂数学的人更有优势。在这个时代,人们需要他们所能得到的一切优势来获得这些工作。

要做你想做的事,你不必懂数学,但你必须非常喜欢它。

嗯,你产生了一些回应,不,我没有读完它们。我在这个中间,没有你当然不需要数学为了是一个程序员。Linux 中的汇编器和设备驱动程序并不比其他驱动程序更复杂,也不需要数学计算。

In no way shape or form do you need to take or pass a math class for any of this.

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

现在,如果你不能快速地将十六进制转换成二进制或十进制,无论是在你的头脑中,在纸上,或使用计算器你将斗争。如果您想进入网络和其他涉及计时的事情,内核驱动程序经常这样做,但不一定要这样做。你会很挣扎。我知道有很多拥有数学学位和/或计算机科学学位和/或工程学位的人都在为速率计算、比特/秒、字节/秒、做某事需要多少内存等问题而苦苦挣扎。在某种程度上,它可能被认为是某种技巧,有些人已经有了,而其他人必须朝着这个方向努力。

我的底线是,我相信意志力,如果你想学习这些东西,你可以并且愿意,就这么简单。你不需要上课或者花很多钱,例如 linux 和 qemu 可以让你忙上一段时间,不同的语言等等。可崩溃的内核开发环境,嵌入式等。你不限于这一点,但我不相信你必须跑开,并采取任何类型,如果你不想。如果你想上一些电子课程,一些计算机课程和一些数学课程。.

在大学里,我们读了 Knuth,Graham 和 Patashnik 的《具体数学》一书。 这是一本为计算机科学专业学生选定主题的数学书。几年后,我再次检查了这本书,发现我至少用了一次书中的每一个主题(斯特林数字除外)。

在大多数情况下,了解一些数学知识有助于用较少的工作量解决问题,更优雅或实现更快的解决方案。这也取决于你所做的工作的类型。也就是说,当你专注于算法时,数学比专注于工程问题时更重要。

我作为一个游戏程序员,在一个团队与艺术家,游戏设计师,水平设计师等。

拥有一个懂数学的 某人团队是一个优势,就像拥有一个玩各种游戏的人,一个我们目标观众的代表,一个经历过一些痛苦的作品的人,等等。

通常,最懂数学的人是程序员(有时是游戏设计师) ,因为领域足够接近。但是,日复一日,游戏程序员除了3D 几何和(有时)物理之外,并不需要太多的数学。

在我所学的数学中,我发现统计学是最有用的,尽管有时我发现自己漏掉了一些概念。

I have two math degrees. I wish I knew more about databases.

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

数学是一个创建程序的工具箱。我推荐科门的《算法简介》。它涉及到更多的“数学”的东西。

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

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

我从事编程工作已经8年了,从12岁开始就把编程当作一种爱好。

数学不是必须的,逻辑才是。数学是非常有帮助的,说它没有必要就像说要杀一个人,枪是没有必要的,你可以使用刀。没错,但是那把枪让事情变得简单多了。

There are a couple bare minimums, which you should already meet. You need to know basic algebraic expressions and notation, and the common computer equivalents. For example, you need to know what an exponential is (3 to the 3rd is 27), and the common computer expression is 3^3. The common notations for algebra does change between languages, but many of them use a somewhat unified methodology. Others (looking at you LISP) don't. You also need to know order of operations.

你需要理解算法思想。首先这个,然后这个,产生这个,用于这个计算。机会就是你明白或者不明白,如果你不明白,这是一个相当难跨越的障碍; 我发现这是你“得到”的东西,而不是你真的能学到的东西。相反,有些人不“理解”艺术。他们不应该成为画家。此外,计算机科学课程的一些学生也无法理解为什么这种方法行不通: X = z + w; Z = 3; Y = 5; 不是他们不懂加法,而是他们没有把握清晰表达的要求。如果他们明白,电脑也应该明白,对吧?如果你看不出上面三行有什么问题,那就不要成为一个程序员。

Lastly, you need to know whatever math is under your domain of programming. Accounting software could stop at basic algebra. If you are programming physics, you'll need to know physics (loosely) and math in 3-dimensional geometry (Euclidean). If you're programming architecture software, you'll need to know trigonometry.

不过,这比数学要深入得多; 无论您正在编程的领域是什么,您都需要完全理解基础知识。如果你是编程语言分析软件,你需要知道概率,统计,语法理论(多种语言) ,等等。

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

大小也会改变一些事情。如果您对一个包含1000个项目的财务数据集进行排序,那么这不是什么大事。但是,如果是1000万条记录,那么实际上了解向量数学,并且深入理解二进制级别的排序(系统如何按字母顺序排序?它怎么知道‘ a’小于‘ b’?)

你会发现,作为一个程序员,你的常识库将会爆炸,因为每个项目都需要在编程的直接领域之外进行更多的学习。如果你对自学感到厌恶或者懒惰,并且不喜欢每周花10多个小时做家庭作业的想法,那么不要成为一个程序员。

如果你喜欢思维练习,如果你喜欢学习,如果你不用计算器就能思考像数学这样抽象的东西,如果你不用画板就能设计,如果你在生活和爱好上有广泛的品味,如果你自我批判并能抛弃“喜欢的”想法,如果你喜欢完善事物,那么成为一个程序员。这个决定不是基于数学,而是基于逻辑思考和学习的能力。这些才是重要的,数学只是副产品。

这是一个很好的答案,你不需要知道数学(地狱我从来没有走出基本的运算顺序: PEMDAS 数学)哈哈,但我总是得到一个解决方案。当然,回到1970年代的数学对于那些试图使用非常复杂的数学方程来避免循环等等的 CPU 循环编程的程序员来说是非常重要的。

现在计算机的功能已经强大到了100台左右,为了避免使用复杂的数学,从长远来看不会真正伤害你的程序,但是当然你作为一个观察者甚至不需要学习数学就能学会数学技能,哈哈,这将提高你的高效编程能力。

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

学习数学可以帮助你在没有实际经验的情况下理解事物是如何运作的。

下面是我的示例(一些压缩文章)。我不停地尝试,尝试,但是没有理解其背后的数学原理。.从至少700?有缺陷/失败的尝试我现在知道了更多可以做的事情(可能会再次失败) ,也知道了700种看待它的有缺陷的方式。

如果我可能知道数学,我甚至不会尝试那700个有缺陷的尝试可能是因为我知道太多的数学。但是,我选择的道路不知道这么多的数学,我发现更多的乐趣和更多的教育给我。

但那只是我. . 我总是在人的手上. . 不是书虫;)

一些会带来新的数学突破,另一些会带来更快更好的优化软件。

这是给你们的一个教训,选择最适合你们的道路,相信我,两者都是值得的。