编程需要数学吗?

时间:2020-03-06 14:58:25  来源:igfitidea点击:

在大学期间,我偶然与一位朋友辩论,高级数学对于任何资深程序员来说都是必要的。他过去经常对此进行激烈辩论。他说,程序员只需要高中或者大学一年级数学的基础数学知识就可以了,而且几乎不需要高级数学就可以完成几乎所有的编程任务。但是,他认为算法是程序员的基本和必不可少的资产。

我的立场是,所有计算机科学的进步都几乎完全取决于数学的进步,因此,当程序员在处理现实世界中的难题时,透彻的数学知识将对他们有很大的帮助。

我仍然不能确定论点的哪一边是正确的。我们能根据经验告诉我们立场吗?

解决方案

计算机科学!=编程

好吧,说真的,我知道好坏的程序员都是英语和心理学专业,有些是计算机科学专业的。作为开发人员,我非常欣赏一些非常有名的家伙,他们没有CS的背景。例如,拉里·沃尔(Perl)是一名语言学家。
另一方面,它有助于我们了解正在使用的域的知识,因为这样我们至少可以查看数据是否有意义,并帮助客户深入了解他们真正想要的。
是的,这里存在计算复杂性,有效的数据结构和程序正确性的问题。那是我们在计算机科学领域学到的东西,对于几乎所有领域的知识都是有用的,但这既不是必需的,也不是足够的。

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

可以把它想像成汽车。我们认为诸如牵引力控制和ABS制动之类的东西背后有多少数学/物理学?很多。我们需要知道多少数学才能使用这些工具?没有。

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

尽管编程可能不需要高级数学(除非我们正在编程高级数学功能),但是编程和数学的思维过程却非常相似。我们首先需要了解一些已知的事物(公理,先前已被证明的理论),然后尝试着找到新的事物。我们不能跳过步骤。如果我们确实跳过步骤,则需要填写空白。这是一个至关重要的思考过程,使两者极为相似。

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

如果我们擅长一个,很有可能会擅长另一个。

当然,这取决于我们想成为什么样的程序员,或者更好地取决于雇主希望我们成为什么样的程序员。我认为微积分和代数是必不可少的,统计和线性编程确实是我们公文包中的一个好工具,也许分析(导数,积分,函数...)可以不做。但是,如果我们想深入了解事物的工作原理(例如,电子学或者一些非平凡的算法),那么"高级"数学就是最好的选择。

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

大多数业务线开发人员大部分时间不需要高级数学。有时,知道三角学会有所帮助,并且当然能够理解足够的数学以实现以数学方式描述的算法可能很重要,但除此之外呢?没事

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

我认为拥有高级逻辑(离散)数学确实可以提供帮助。与集合论一起。在处理常见的计算机程序时,这些学科可以提供很大帮助。但是,我在大学里学习的其他许多数学都是微积分,据我所知,它的用法非常有限。由于90%(或者类似的程度)的编程人员正在使用非常简单的数学方法来开发业务应用程序,因此我想说,在大多数情况下,我们对数学知识的了解很少。但是,对布尔代数,逻辑,离散数学和集合论有很好的了解,确实可以将我们带入更高的层次。

我完成的大多数编程工作都涉及物理模拟研究,包括电磁学,量子力学和结构力学。由于问题领域具有与之相关的高级数学,如果不使用高级数学,将很难解决它们。

因此,对问题的答案取决于我们要执行的操作。

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

如果我们是游戏开发人员并且必须与物理学合作,那么对数学的大量理解至关重要。如果使用高级视觉控件,那么没有几何图形就无法做很多事情。如果我们打算进行一些财务计算,那么对扎实的统计知识将大有帮助。

另一方面,在过去的5年中,我只有2个或者3个项目,这些项目根本不需要任何数学运算。其中只有1次发生在Google搜索无济于事的情况下。

归根结底,即使是财务计算也常常是客户为我们做的事情,并为我们提供实现的公式。

因此,如果我们从事"应用软件"业务,则可能永远不会使用数学学位。如果我们正在学习学术软件,那么数学至关重要。

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

但是,对于从网站到保险处理应用程序的大多数日常编程,仅需基本数学。

什么类型的编程?

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

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

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

我希望这个一厢情愿的答案会有所帮助。

IMO,我们可能需要一定的数学才能,而不必在该领域具有丰富的知识。因此,我们需要擅长数学的事情与我们需要擅长编程的事情相似。

但是总的来说,我不记得上次我在日常编程中使用任何高级数学运算的情况,所以没有。

我不认为要成为一名优秀的程序员就必须具备较高的数学水平,因为它总是取决于我们所编写的代码。

当然,如果我们从事3D图形编程,则需要矩阵和其他东西。作为商业软件的作者,我们可能需要统计数学。

但是,作为专业程序员将近10年(以及另外10年业余时间)的"高等数学"并不是我经常需要的。在所有情况下,大约99.8%的情况是某些智能组合中的正,负,除和乘法,在大多数情况下,它与算法有关,而与数学无关。

对于大多数程序员而言,学习高等数学很重要,因为它使大脑弯曲以逐步思考的方式从一件事转到另一件事。

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

这取决于我们在做什么。如果我们进行大量3D编程,则肯定需要3D几何知识,我们是否同意? ;-)如果我们要创建新的图像格式(如JPG)或者新的音频格式(如MP3),那么如果我们无法理解余弦或者傅立叶变换,我们也会很迷失,因为这些是大多数有损压缩的基础。如果我们对数学非常了解,则可以更好地解决许多其他问题。

我们还会发现许多其他编程任务不需要太多的数学运算。

另请参阅是Programmng == Math吗?从stackoverflow。

虽然我认为这不是编程所必需的,但我无法告诉我们我有多少次能够使用线性代数概念来编写清晰明了的解决方案来替代复杂的(有时是不正确的)解决方案。在处理任何图形或者几何图形(甚至某些求解器)时,矩阵的知识以及如何使用它们也非常有用。

是的,如果我们要对现成的商业软件进行编程,则无需高级数学。

但是,在处理诸如以下的硬核内容时:

  • 计算轨迹以控制机器人
  • 创建类似AI的应用程序以支持不确定性和自动推理
  • 播放3D运动和图形

一些高级数学知识可能会派上用场。并不是说它们是"这个世界之外的"问题。

我必须创建一个软件来尝试"预测"办公室所需的纸张量(而仅仅为了找出近似值的最佳方法真是太难了)。

但是,我们必须小心,因为使用高级功能时很容易迷路,我的一个朋友求助于使用Turing来存储动态菜单的状态,只是为了正确显示它的嗡嗡声……也许他知道了。他的想像力太过分了。

在没有高级数学背景的情况下,许多编程任务可以很好地完成。可以肯定地说,大多数编程工作几乎不需要中学以上的数学。但是,我们将不会编写通过摆脱大学新生代数数学水平的方法来帮助将航天飞机投入太空的软件。因此,尽管高级数学通常对于许多编程任务而言并不重要,但更困难的问题将绝对需要它。学习数学还可以教授宝贵的解决问题的技能,几乎可以在任何地方使用。我想我们可能会说大部分时间都没有必要,但这肯定会在几乎所有时间提供帮助。

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

  • 并非每个人都可以设计UI。
  • 并非每个人都可以编写高效的代码。
  • 并非所有人都可以清楚地发表评论和记录。
  • 不是每个人都可以做一个好的算法

数学将达到一个要点,但只能达到一个要点。

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

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

(如果我们进行3D游戏编程或者某些其他特定编程领域,则我们可能每天都需要它)

数学知识通常对程序员有用,例如图形设计技能,解决难题的能力,职业道德以及许多其他技能和特质。很少有程序员擅长于程序员可能擅长的一切。我不会同意任何形式的陈述,"除非我们可以{在这里插入喜欢的编程能力},否则我们不是真正的程序员"。

但是我会警惕一个不会做数学的程序员。超过了一个不会画画的人。

我在这里反对五谷,说"是"

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

我发现我的数学非常难以进行计算机编程。我缺少离散数学和逻辑的所有领域,而我只能靠大量的教科书,维基百科和Wolfram生存下来。大多数高级算法都是基于高级数学的,如果不进行大量研究,我将无法开发高级算法(本质上相当于半课程的工作。)我当然无法提出新算法,因为我只是这样做没有作为站在巨人肩膀上的数学基础。

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

工程定制软件解决方案需要大量问题解决和批判性思维。具备数学背景后,技能肯定会得到增强。我以计算机工程学位获得了数学的辅修学位,并且我将所有以数学为基础的背景归因于我为什么会成为今天的我。

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

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

正如David Nehme在这里发布的那样,计算机科学和编程是两个截然不同的学科。

我发现具有非常高中和早期大学数学技能的程序员很有可能会成为一名合格的程序员。不过,对于计算机科学专业的毕业生并不确定。

正如我们正确指出的那样,算法创建过程与计算数学的方式非常相关。即使这只是数学和分析过程类型的结果,我们也必须完成才能正确设计算法。

我还认为这很大程度上取决于工作,而不仅仅是取决于职位描述或者技能。例如,如果编程和数学都是产生某种效果的工具,那么我们肯定必须具备两者的能力(即:我们出于某种目的而制作一个建模程序)。虽然,如果编程是我们活动的最终目标,则数学可能不是必需的。 (即:我们正在制作一个Web应用程序)

我认为高级数学知识不是优秀程序员所必需的,但基于个人经验,我认为对高级数学有更好理解的程序员也可以成为更好的程序员。这可能仅仅是由于他们的逻辑思维更合理,或者是由于他们解决数学问题的经验而更具逻辑性。

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

保持远见很重要。学习数学,高级数学,计算等对于思维过程非常有用,许多编程职位都期望并可以利用数学和数学概念。但是许多编程工作很少使用或者根本不使用数学。

计算机科学作为一门数学学科,当然需要大量的数学运算。但是很少有编程工作是comp sci的派生。 CS是一门非常具体的学科。信息技术学校现在将软件工程作为与CS分开的学科是有原因的。他们是非常不同的领域。

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

如果我们在日常工作中需要高级数学,因为程序员确实取决于任务。我需要他们。原因是我必须处理管道系统的液压计算,才能在构建管道系统之前对代码进行评估。由于压力过大或者过大,我们永远都不想站在坍塌的管道系统附近。 ;)

我猜想对于许多其他类型的"真实世界的模拟",我们也将需要高级数学。

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

看到这个较早的帖子

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

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

现在用于计算机科学。是的,我们需要更高级别的数学。毫无疑问。密码学,操作系统,编译器构造,机器学习,编程语言等等都需要某种形式的高级数学(演算,离散,线性,复杂)来完全理解。

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

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

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

学习数学就像为大脑举重。它可以锻炼头脑并保持身体健康。我们可能从未在自己的职业中使用微积分,但是由于这个原因,大脑将处于更好的状态。

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

常见的编程任务可能不需要任何特定的数学知识(例如,除非我们要执行3D图形或者物理模拟之类的任务,否则我们可能不需要向量代数和微积分),但是基本技能是相同的,并且缺乏能力一个领域中的能力将因另一领域中相应能力的缺乏而匹配。

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

工程:数值分析

科学编程:无极限

远射不是必需的,但是...

举一个简单的例子-在不了解几何的情况下,我们不能对正方形和矩形做很多事情。 (每个程序员都有/得到几何,所以这只是一个例子)。

没有三角函数,有些事情很难做。尝试在不了解三角学的情况下绘制一个模拟时钟-可以做到,但是我们必须经历的过程实际上是在重新发明三角学。

微积分很有趣。除非我们设计游戏,否则我们可能永远不需要它,但是演算可以教我们如何为行为更多的"真实世界"建模。例如,如果我们尝试对一棵倒下的树进行建模,要在拱门上的每个点获得正确的速度,我们可能需要大量的数学运算。

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

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

如果我们正在对网站和数据库进行编程,则几乎不需要代数101.

关于我们可以在大学学习的唯一有用的东西是理论上的。

数学不仅与技巧本身有关,更与思维方式有关。甚至在几个层面上也是如此。有人指出,数学通用的分析和抽象技能对编程很有价值,这是一个层次。我还要指出,还有一个层次,其中包含精确的类似物,这些相似物从一个携带到另一个,例如关系数据库背后的集合论,这些都被SQL语义隐藏了。

通常,我指的是最高效,最简练的解决方案是"最好的"解决方案。如果我们开始将矩阵处理等面向数据的编程问题考虑在内,那么我们经常可以从数学世界中找到新颖的解决方案。

显然,不一定要成为数学专家才能编程,任何人都可以教,但这是应征者中值得拥有和寻找的技能之一。

在某些编程中,我认为数学将最有帮助,但不是一名程序员。如果我不用方便的花花公子计算器就可以加2 + 2,那我很幸运。

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

要回答我们提出的问题,我必须说:"不,数学不是编程所必需的"。但是,正如其他人在该主题中所建议的那样,我相信理解数学与能够"从算法上思考"之间存在关联。也就是说,能够抽象地思考数量,过程,关系和证明。

我大约9岁时就开始编程,这可以说是我在那个阶段学到了很多数学。但是,通过一点点的努力,我就能够理解变量,循环,goto语句(原谅我是Vic 20 BASIC,但我还没有读过Dijkstra)和基本的坐标几何图形以将图形显示在屏幕上。

我最终与一名计算机科学辅修了纯粹数学的荣誉学位。尽管我主要侧重于分析,但我还研究了很多离散数学,数论,逻辑和可计算性理论。除了能够将统计学,概率论,向量分析和线性代数中的一些思想应用到编程中之外,我所学的数学很少,可以直接用于我的本科学位课程以及之后的商业和研究编程。

但是,我坚信,当我处理大型而复杂的程序设计项目时,认为数学需要仔细推理,寻找反例,建立公理基础,发现概念之间的联系的形式化思维方法是极大的帮助。

考虑运动员进行体育锻炼的方式。例如,足球运动员无疑将大部分训练时间都花在了基本足球技能上。但是,为了提高他们的总体健康水平,他们还可以在健身房里骑自行车或者划船机,做举重等。

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

这取决于工作:Web开发,业务软件等。我认为对于此类工作,我们不需要数学。

如果我们想进行计算机图形学,音频/视频处理,AI,密码学等工作,则​​需要数学背景,否则就不能这样做。

我想到两件事:

  • 上下文非常重要。如果我们是游戏程序员或者工程学科的学生,那么数学可能对工作至关重要。我从事数据库和Web开发,因此高中数学对我来说很好。
  • 我们很可能会重用别人的预先构建的数学代码,而不是浪费时间,尤其是在加密和压缩等领域。 (如果我们使用第三方物理工具或者3D引擎进行游戏开发,这也可能适用。)拥有在程序中使用经过测试的例程框架可以防止错误和潜在的安全漏洞-绝对是一件好事。

我认为有些数学是必不可少的。例如,每个软件工程师都应该了解和理解De Morgan的定律和O表示法。

其他种类非常有用。在仿真中,我们经常必须进行大量的物理建模。如果要进行图形工作,通常会发现自己需要编写坐标转换算法。在我20年的职业生涯中,我遇到过许多其他情况,我需要编写和求解同步线性方程式,以找出要在算法中添加哪些常数。

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

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

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

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

我认为"编程集体智能"中介绍的技术与我作为ME所做的工作相去甚远,并且可能会落入我现在正在做的业务应用程序中。 Netflix无疑从中取得了不错的成绩。这种团体情报的东西似乎正在上升。

要回答这个问题:不。

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

一个当然不是另一个的准备工作,除非我们在数学非常不可或者缺的专业领域(3D图形,统计编程等)中进行编程,否则增强数学技能不会使我们成为更好的程序员。 )

也就是说,当然,数学背景当然不会受到伤害,并且在某些情况下会极大地。正如其他人所指出的那样,数学和程序设计所涉及的思维过程非常相似。如果我们拥有一个人才,那么我们可能会发现我们拥有另一个人才。

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

随着我们开始做更多的高级和/或者有趣的事情,对数学的需求确实有所增加。游戏的数学运算非常繁重,因此对于性能至关重要的应用程序来说,我们确实需要了解各种算法的成本。

我将和我们一起坐在栅栏上……有很多赞成和反对的论点,并且大多数都同样有效。那么哪个是正确的答案?

两者...视情况而定。这不是"如果我们不与我们在一起,我们就反对我们"的情况。

数学的许多方面确实使编程领域更加容易:几何,代数,三角学,线性方程,二次方程,导数等。实际上,许多性能最高的"算法"的核心是数学原理。

正如乔恩(Jon)所指出的那样,他拥有数学学位,但是在编程世界中,他几乎没有使用这些知识。我建议他使用数学的确比他想像的要多得多,尽管这是毫无根据的……好吧,也许不是量子力学,而是更基本的原理。每次设计GUI时,我们都使用数学原理以美观的方式进行设计,但我们并不是有意识地这样做,而是这样做。

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

无需自觉在我们的软件中使用数学就可以轻松跳过整个职业。但是,对数学的理解有助于简化编程的许多方面。

我认为问题的实质可以归结为:"编程需要高级数学吗?"当然,对于这个问题,答案是否定的……除非我们开始着手编写和/或者破解加密算法(这是一个有趣的主题)或者使用Mil指出的液压方程或者流量控制系统(就像我过去一样)。但是我要补充一点,尽管可能不需要基础数学,但它将使生活更加轻松。

我拥有数学学位,但我不能说它对我有任何帮助。 (我开发通用的Web应用程序,没有科学依据)。我喜欢与其他非数学学位的开发人员一起工作,因为他们似乎在我的"数学"框外思考,并强迫我做同样的事情。

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

就是说,我非常喜欢与足够聪明的人一起学习数学。掌握复杂而困难的内容有助于使大脑适应各种复杂而困难的编程问题。

必要!=足够

拜托了伙计们!标题说"必须",我认为最好的条件是能够很好地进行编程。就像他们有许多充分但不是必要的条件一样:5年的经验,CS学位或者任何科学背景。

甚至有人会争辩说,成为一名诗人或者英语专业者可以使我们成为一名优秀的API设计师,或者一名艺术家可能擅长于UI / Web编程。

但这显然不能保证,就像了解数学可能无法使我们成为一名优秀的程序员一样,但是无论如何我们都可以破解一些C ++或者Flike ...

我的回答绝对不是。我/我(现在是失业者,感谢印度)是一名计算机程序员,已有25年以上的工作经验。而且,在我的整个职业生涯中,我从未遇到过逻辑LOGIC程序,该程序不仅仅需要基本的数学技能。除非我们每天使用超出基本数学技能的数学知识,否则对高级数学的需求就很少了。在公司一级,任何复杂的数学都将被称为"静态主义者"或者"数学家",他们将为程序员提供必要的伪代码,并且二者将共同合作对最终产品进行全面的测试。最终,球在数学书呆子的法庭上。在任何级别上,除非我们是数学家/静态学家/高级程序员,否则,让程序员负责复杂的高级数学计算机程序的预期结果的想法都是荒谬的,而且非常棘手。

我们无需学习数学即可进行编程。

但是学习数学会训练我们进行思维训练。因此,我认为数学对开发人员是有好处的。

我认为这确实取决于我们要执行的操作,但是恕我直言,CS和OS理论在这里比数学更重要,并且我们实际上只需要它们所涉及的数学即可。

例如,在现代OS中,有很多CS理论的调度理论和优化背景支持许多调度程序。这是一个需要一些数学知识的例子,尽管不是超级复杂的事情。

但老实说,对于大多数东西,我们不需要数学。我们需要的是学习在2和16基础上思考的能力,例如在心理上进行OR / AND的能力。例如,如果我们有一个字节,并且在该字节中有两个3位字段和2个浪费的位,那么当字节值约为11时,知道哪些位在哪个字段中处于活动状态将使事情比必须使用的要快一些笔和纸。

我们不需要太多数学。一些组合思维可以确定和减少快速执行的问题。能够繁殖是件好事。我们是一名工程师,近似值就可以了。

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

  • 完全不需要微积分
  • 需要良好的计算机内部知识
  • 需要CS LOT和OS理论
  • 需要离散数学(包括算法和组合数学)

不,我们不需要了解任何数学知识(也许二进制/八进制/十六进制/十进制表示法除外)来进行系统编程以及类似的事情。

如果我们发现该主题引人入胜,那么请继续学习。其余的自然而然。

我大约在进入代数课前的同一时间开始编程。因此,我不会说数学那么重要,尽管数学可以对某些类型的编程(尤其是函数式编程)有所帮助。

我还没有参加过离散数学课程,但是我看到了很多用数学符号编写的程序设计理论知识,这是在本课程中讲授的。

另外,请确保我们知道如何计算任何底数,尤其是底数2、8和16.

而且,这门课确实为我带来了一些真正的概念。我们教了联合,交叉点以及所有这些快乐的东西,它几乎完全与按位数学相似。而且我们非常详尽地介绍了布尔逻辑。我认为最有用的是当我们学习了如何减少复杂的布尔语句时。这非常方便:

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

可以简化为

x | (y & z & foo)

我以前不太了解。

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

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

如果没有它,我们能不能完全解决?我们不应该让那么少的透彻的数学知识使我们退缩,但是如果有机会,或者有这样的倾向,我会尽可能多地学习数学,微积分,数值理论,线性代数,组合数学,实际应用,它们在广泛的计算机科学中都具有实际和理论应用。

我认识过在围栏两边都非常成功的人(那些不十分注重数学的人,以及那些去物理或者数学学校的人),但是在这两个小组中,他们都喜欢数值问题,并且学习算法和数学理论。

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

  • 算法(这只需要很少的数学运算,但又不至于吓到一个好的程序员),
  • 数据结构,以及
  • 一些(不是全部)领域知识,例如操作系统,体系结构,编译器。

我认为,最需要追求的素质是在上述任何一项中,如果需要的话,编写精确的代码和能力要深入。

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

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

我发现离散数学非常有帮助。我参加了微积分,在某些时候它可能也很有帮助,但是我什么都不记得了。例如,在我尝试实现DIS接口(处理诸如旋转速度和坐标转换之类的东西)的时候。我花了整整一天的时间在整个镇上开车,寻找一本书向我解释四元数(这是第一次世界大战之前)。我也曾经有一段时间需要为一些工程师编写一种工具来实现n线性插值。如果我们不知道这意味着什么,请相信我,我也没有。幸运的是,那是在WWW之后。

我的建议是不要流汗。我们可能会受制于一两个项目,但这些天并没有那么糟。

作为大约30年前开始从事游戏工作的自学程序员,我肯定会说,我们需要获得尽可能多的数学知识。诸如矩阵,四元数,射线追踪,粒子系统,物理引擎之类的东西确实需要很高的数学理解能力,我只希望我早点学到了所有这些东西。

以我的经验,编程是必须数学的,我们无法摆脱它。整个编程都是基于数学的。

问题不是黑白的,而是更加丰富多彩的。问题不是我们是否需要数学,而是多少。较高的数学水平将为我们提供更多的工具,并为我们打开不同的道路。

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

并且不要忘记数学,逻辑学和哲学的同胞。逻辑将有效地使用case或者switch语句。哲学将理解编写我们正在修改的代码的人的想法。

是的,我们不需要太多数学来编写程序。有些程序可能需要比其他程序更多的数学运算。与不那么了解的人相比,更多的数学知识将为我们带来优势。在这些时代,人们需要获得他们所能获得的所有优势。

做我们想做的事,我们不必了解数学,但是我们必须非常喜欢它。

好吧,我们产生了许多答复,没有,我没有全部阅读。我在这个问题上处于中间位置,不,我们当然不需要数学就可以成为一名程序员。 Linux中的汇编程序与设备驱动程序彼此之间并没有多少复杂,也都不需要数学。

无论哪种形式,我们都不需要参加或者通过数学课程。

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

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

我的底线是我相信意志的力量,如果我们想学习这些东西,我们将可以并且会做到的,它就是这么简单。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。我们不需要上课或者花很多钱,例如linux和qemu可以让我们忙一段时间,使用不同的asm语言,等等。崩溃的环境可以进行内核开发,嵌入式等。 ,但我不认为我们不愿意参加任何课程。然后,如果我们想参加一些EE课程,一些CS课程和一些数学课程。

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

在大多数情况下,了解一些数学知识可以以较少的工作量,更优雅的方式解决问题或者实施更快的解决方案。这也取决于我们正在做的工作。 IE。当我们专注于算法时,与专注于工程问题相比,数学更为重要。

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

团队中有一些懂数学的人是一个净加分,就像拥有一个玩各种游戏的人,一个是我们目标受众的代表成员,一个经历过一些痛苦的作品的人一样,这是一个加分项,等等。

通常,最了解数学的人是程序员(有时是游戏设计师),因为领域足够紧密。但是,如今,游戏程序员除了3D几何和(有时)物理之外,不需要太多的数学运算。

在我学习的数学中,我发现统计学最有用,尽管有时我发现自己缺少一些概念。

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

我的观点是,尽管能够找到多项式的根或者能够证明sqrt(2)是非理性的,但从抽象的意义上讲,它很有用,但不一定会使我们成为更好的程序员。