math是编程所必需的吗?

在大学期间,我碰巧和一位朋友辩论,高级math对于任何一位资深程序员都是必要的。 他曾经强烈地反对这个说法。 他说,程序员只需要高中或大学math的基础math知识,不用多说,而且几乎所有的编程任务都可以在不需要高级math的情况下实现。 然而,他认为algorithm是程序员的基础和必备资产。

我的立场是,所有计算机科学的进展都几乎完全取决于math的进步,因此,深入的math知识将有助于程序员在处理现实世界中的挑战性问题时大显身手。

我仍然不能确定论点的哪一方是正确的。 你可以从你自己的经验告诉我们你的立场吗?

为了回答你提出的问题,我不得不说,“不,math不是编程必需的”。 但是,正如其他人在这个话题中提出的那样,我认为理解math与“algorithm思考”之间有一个相关性。 也就是说,能够抽象地思考数量,过程,关系和certificate。

我大约9岁时就开始编程,说我已经在那个阶段学过很多math了。 然而,通过一些努力,我能够理解variables,循环,goto语句(原谅我,我是Vic 20 BASIC,我还没有读过任何Dijkstra)和基本的坐标几何graphics在屏幕上。

我最终在计算机科学专业取得了纯math荣誉学位。 虽然我主要关注分析,但我也研究了很多离散math,数论,逻辑和可计算性理论。 除了能够运用统计学,概率论,vector分析和线性代数等几个方面的思想来编程以外,我所学的很less的math知识直接适用于我的本科学位课程和后来编写的商业和研究计划。

然而,我坚信math所需要的正式思维方式 – 仔细推理,寻找反例,build立公理化基础,发现概念之间的联系 – 对于我处理大型复杂的编程项目来说是一种巨大的帮助。

考虑运动员训练他们的运动的方式。 例如,足球运动员无疑将大部分训练时间花在了基本的足球技巧上。 不过,为了提高身体素质,他们也可以在自行车或划船机上的健身房里锻炼身体,做重量等等。

学习math可以比作重量训练或交叉训练,以提高你的精神力量和耐力编程。 实践你的基本编程技能是绝对必要的,但是学习math是一个令人难以置信的脑力劳动,提高了你的核心分析能力。

虽然高级math可能不需要编程(除非你正在编程高级math能力),编程和math的思维过程非常相似。 你从已知事物(公理,先前已被certificate的理论)开始,尝试到达新的地方。 你不能跳过步骤。 如果你跳过步骤,那么你需要填写空白。 这是一个非常相似的批判性思维过程。

另外,math家和程序员都在抽象的思考中进行思考。 现实世界的东西是由对象和variables来表示的。 从具体到抽象的翻译能力也将两个领域联系起来。

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

计算机科学!=编程

好吧,我认识了英语和心理学专业的优秀和不好的程序员,还有一些计算机专业的学生。 一些我很敬佩的开发人员,他们没有CS背景。 例如Larry Wall(Perl)是一名语言学家。 另一方面,这有助于了解您所从事的领域,因为那样您至less可以查看您的数据是否有意义,并帮助您的客户/用户深入了解他们真正想要的内容。 是的,这是计算复杂性和有效的数据结构和程序正确性的问题。 这就是你在计算机科学中学到的东西,这在几乎任何领域都是很有用的,但这既不必要也不足够。

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

更重要的是,math对理解很多基础知识非常重要,比如调度器,优化,sorting,协议pipe理以及计算机的其他方面。 虽然从计算水平涉及的math并不复杂(它主要是高中代数),但理论和应用可能相当复杂,因为通过微积分对math的深入理解将会是非常有益的。

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

我认识那些在篱笆两边都非常成功的人(那些没有专注于math的人,还有那些上过物理或math的人),但是在这两个群体中,他们都享有math问题和学习algorithm和math理论。

我有一个math学位,但我不记得在我的职业生涯中只需要一次math。 在培养我的思维逻辑思维方面是有用的,但是我没有用stream体力学,量子理论或马尔可夫链(Markov Chains)来编写任何代码。 (最后是最有可能出现的,我怀疑。)

大多数业务线开发商大多数时间不需要高级math。 有时候知道三angular函数会有所帮助,当然能够理解足够的math来实现算术描述的algorithm可能是重要的 – 但超越? 罗。

不要忘记,大多数程序员并不推进计算机科学 – 他们正在构build应用程序。 我不需要知道先进的工程技术来驾驶一辆现代汽车,即使那辆汽车几乎肯定通过先进的工程学得到了改进。

我会争辩说,先进的逻辑(离散)math可以真正帮助。 那与集合论一起。 在处理常见的计算机程序时,这些学科可以帮助很多。 然而,我在大学读的另一个math很多是微积分,就我所知,使用量非常有限。 由于90%(或类似的)编程是用非常简单的math来做商业应用程序,所以我认为大部分情况下,只需很less的math知识即可。 然而,对布尔代数,逻辑,离散math和集合论的理解能够真正把你提升到更高的层次。

我会在这里反对粮食说“是”

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

我发现我的math计算机编程非常缺乏。 我缺less整个离散math和逻辑领域,而且我只是因为庞大的教科书,维基百科和Wolfram图书馆而生存。 大多数先进的algorithm都是基于高级math的,如果不进行大量的研究(本质上相当于一个半程的工作),我就无法开发高级algorithm。我当然不能拿出新的algorithm,因为我只是不想没有math基础作为巨人的肩膀站立。

这取决于你在做什么。 如果你做了很多3D编程,3D几何的知识当然是必要的,你不同意吗? ;-)如果你想创build一个新的图像格式,如JPG或MP3等新的audio格式,如果你不能理解余弦或傅里叶变换,你也会迷失方向,因为这些是最有损压缩的基础。 。 如果你知道你的math,很多其他问题可以得到更好的解决。

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

如果你觉得这个主题足够引人注目,那就继续开始学习吧。 其余的将自然而然地来到。

是的,如果你正在编程商业软件,那么就不需要高等math了。

但是,当处理硬核的东西,如:

  • 计算轨迹来控制机器人
  • 创build类似AI的应用程序来支持不确定性和自动推理
  • 玩3D动作和graphics

一些高级math知识可能派上用场。 而且这不是他们是“出于这个世界”的问题。

我必须创build一个软件来试图“预测”办公室所需的纸张数量(只是为了find最好的方法来近似值)。

但是,你必须小心,因为在使用高级的东西的时候很容易迷失方向 – 我的一个朋友使用图灵来存储dynamic菜单的状态,以便正确显示它 – humm …也许他想象中的东西太过分了。

什么types的编程?

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

计算机graphics学需要大量的高等math。 很多学术计算机编程需要高级math。

所以说在math上擅长的人和擅长编程的人之间往往有关系。

我希望这个愿意帮助你。

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

如果你是一个游戏开发者,并且必须与物理学合作 – 对math的理解是至关重要的。 如果你正在使用先进的视觉控制 – 没有几何graphics你就不能做很多事情。 如果你打算做一些财务计算 – 这将真正帮助我们掌握统计知识。

另一方面,在过去5年中,我只有2或3个项目,其中任何一个math项目都是必需的。 其中只有一次发生,当谷歌search没有帮助。

在一天结束时,财务计算通常是客户为您做的事情,并为您提供公式实施。

所以如果你在“应用软件”业务,你可能永远不会使用你的math学位。 如果你在学术软件math是至关重要的。

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

工程定制软件解决scheme需要大量的问题解决和批判性思维。 当math背景出现时,绝对可以提高技能。 我在计算机工程学位攻读math专业,我把所有以math为导向的背景归功于我为什么在今天。

这是我的2美分,从上面的阅读可以看出,许多人不会同意。 我鼓励所有人都认为我并不是说没有math背景就不能拥有这些技能,我只是简单地指出技能是具有这样一种背景的副作用,并且可以积极地影响软件。

根据我的经验,math是编程所必需的,你不能摆脱它。 整个编程都是基于math。

这个问题不是黑白的,而是更丰富多彩的。 问题不在于你是否需要math,而在于多less。 math的更高水平会给你更多的工具,并打开你的想法,但不同的path。

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

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

是的,你不需要太多的math来编写程序。 有些课程可能比其他课程需要更多的math。 更多的math知识会使你比那些理解不足的人更有优势。 在这些时候,人们需要获得这些工作的一切优势。

我一直在专业编程8年,因为我是一个爱好12。

math是没有必要的,逻辑是。 math是非常有用的,虽然说,没有必要像说杀人,枪是没有必要的,你可以用一把刀。 那么这是事实,但那把枪让它变得容易了许多。

有几个最低限度,你应该已经见过。 你需要知道基本的代数expression式和符号,以及常见的计算机等价物。 例如,你需要知道指数是多less(3到3是27),普通的计算机expression式是3 ^ 3。 代数的常用符号在不同的语言之间有所不同,但是其中许多使用了一种统一的方法。 其他人(看着你的LISP)没有。 您还需要知道操作顺序。

你需要理解algorithm思想。 首先这个,然后这产生在这个计算中使用的这个。 有机会你明白这一点,或者你不明白,如果你不明白,跳过是一个相当困难的障碍。 我发现这是你得到的东西,而不是你可以学习的东西。 相反,有些人不“获得”艺术。 他们不应该成为画家。 另外,在CS课程中有学生不知道为什么这不起作用:x = z + w; z = 3; y = 5; 这并不是说他们不懂加法,而是他们没有把握明确expression的要求。 如果他们明白的话,电脑也应该,对吧? 如果你不能看到上面三行有什么问题,那么不要成为程序员。

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

尽pipe如此,这个math走得更远。 无论你在编程的领域,你都需要理解基础知识。 如果你是编程语言分析软件,你需要知道概率,统计,语法理论(多种语言)等。

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

大小也改变了事物。 如果您正在对1000个项目的财务数据进行sorting,那么这不是什么大问题。 但是,如果是1000万条logging,那么实际上对vectormath的了解将会大大受益,并且对二进制级别的sorting有深刻的理解(系统如何按字母顺序sorting?它如何知道'a'是否小于'b “?)

你会发现作为程序员,你的一般知识库将会爆炸,因为每个项目都需要在直接的编程领域之外进行更多的学习。 如果你对于自学有缺陷或者懒惰,并且不喜欢每周花10个小时做基本“家庭作业”的想法,不要成为程序员。

如果你喜欢思维练习,如果你喜欢学习,如果你可以不用计算器或没有画板的devise思考math这样的抽象事物,如果你的生活和爱好有广泛的品味,如果你是自我批评的,可以扔掉“如果你喜欢完善的东西,然后成为程序员。 不要把这个决定放在math上,而应该是逻辑思考和学习的能力。 那些是重要的; math只是副产品。

当然,这取决于你希望成为什么样的程序员,或者更好的是你的雇主希望你成为什么样的程序员。 我认为微积分和代数是必不可less的,统计和线性规划确实是一个很好的工具,可以在你的公文包中进行分析(派生,积分,函数…)。 但是,如果你想知道事情是如何工作的(比如电子学,或者一些非平凡的algorithm),那么“高级”math是你最好不要去的地方。

我所做的大部分编程都涉及物理仿真,包括电磁学,量子力学和结构力学等方面的研究。 由于问题领域有先进的math与他们联系在一起,我会很难解决他们,而不使用高等math。

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

高级math知识是至关重要的,如果你要编写一种新的编程语言。 或者你需要编写你自己的algorithm。

然而,对于大多数日常编程(从网站到保险处理应用程序),只需要基本的math计算。

有一个坚实的math(不只是算术)或逻辑背景的人会很好地处理algorithm,variables使用,条件推理和数据结构。

  • 不是每个人都可以devise一个UI。
  • 不是每个人都可以做出高效的代
  • 不是每个人都可以评论和文件清晰。
  • 不是每个人都可以做一个好的algorithm

math将帮助你一点,但只是一个点。

我不认为高级math知识是一个好程序员的要求,但是基于个人经验,我认为对高级math有更好掌握的程序员也可以成为更好的程序员。 这可能只是由于他们有解决math问题的经验,或者更合理的想法,或者更合理的前景。

math的基本概念是:algorithm的devise,理解,实现和使用。 如果你不能做math,那是因为你不能做这些事情,如果你不能做这些事情,那么你不能成为一个有效的程序员。

常见的编程任务可能不需要任何特定的math知识(例如,除非您正在执行诸如3Dgraphics或物理模拟的任务,否则您可能不需要vector代数和微积分),但是基本技能组合是相同的,缺乏能力在一个域中将被相应的缺乏能力的其他域所匹配。

math是创build程序的工具箱。 我推荐Cormen的algorithm导论。 它涉及到更“肮脏”的东西。

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

我不认为高等math是成为一名优秀程序员的要求 – 一如既往,这取决于你所编写的内容。

当然,如果你在3Dgraphics编程,你需要matrix和东西。 作为商业软件的作者,你可能需要统计math。

但作为一个近10年的专业程序员(还有10年的业余爱好者),“高等math”并不是我经常需要的东西。 在所有情况下,大约有99.8%在一些智能组合中只是加,减,除和乘 – 在大多数情况下是algorithm,而不是算术。

对于大多数程序员来说,学习更高的math很重要,因为它让你的大脑思考逻辑思维,逐步地从一个事物转到另一个事物。

但是很less有编程工作要求高中math。 我曾经使用线性代数。 我从来没有用过微积分。 我每天都用代数。

math知识对于程序员来说通常是有用的,平面devise技巧,解谜能力,职业道德和其他一些技能和特性也是如此。 很less有程序员擅长程序员可能擅长的一切。 我不赞同任何forms的陈述“除非你能{ 在这里插入最喜欢的编程能力 },否则你不是一个真正的程序员”。

但是我会对一个不能做math的程序员保持警惕。 比谁不能画的更重要。

我认为这取决于你想要做什么,但是恕我直言,CS和OS理论在这里比math更重要,而且你真的只需要他们涉及的math。

例如,调度理论和优化的CS背景有很多,它们在现代OS中的许多调度器背后。 这是一个需要一些math的例子,尽pipe不是很复杂。

但说实话,对于大多数的东西,你不需要math。 你需要的是学习基础2和16的思维能力,比如精神上或/和的能力。 例如,如果你有一个字节,在这个字节中有两个3位的字段和2个浪费的位,当字节值是11时,知道哪些字段在哪个字段中是活动的,这会使事情比使用笔和纸。

我开始编程的时候,我进入了我的代数前课。所以我不会说math是非常重要的,虽然它可以帮助某些types的编程,特别是function。

我还没有使用离散math,但是我看到很多理论上的东西都是用这门课教的math符号编写的。

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

另外,一个真正为我带来一些概念的类是这个预编程类。 我们得到了工会,交叉口,以及所有那些快乐的东西,它几乎完全平行于按位math。 我们非常重视布尔逻辑。 我认为最有用的是当我们学会了如何减less复杂的布尔语句。 这非常方便:

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

可以简化为

 x | (y & z & foo) 

我以前不太了解。

那么你产生了一些答复,没有我没有读完他们。 我在这中间,不,你当然不需要math来成为程序员。 Linux中的汇编程序与设备驱动程序不会比其他的复杂,也不需要math计算。

你不需要为这些任何forms或forms进行math课。

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

现在,如果你无法在脑海中,纸上或使用计算器快速地从hex转换为十进制,那么你将会奋斗。 如果你想进入networking和涉及时间的其他事情,哪些内核驱动程序经常做,但不必。 你会奋斗。 我知道有很多math学位和/或计算机科学和/或工程学位的学生,他们在计算速度,每秒比特数,每秒字节数,需要做多less记忆等方面有困难。在某种程度上它可能被认为是某种诀窍,有些人有和其他人不得不去努力。

我的底线是我相信意志的力量,如果你想学习这个东西,你可以和将来,就这么简单。 你不需要上课或花费很多钱,例如linux和qemu可以让你忙了很长一段时间,不同的语言,等等内核开发,embedded式等的可破坏环境。你并不局限于此,但是我不相信如果你不想要的话,你必须跑掉,去上课。 如果你想确定采取一些ee类,一些cs类和一些math类。

你需要math。 编程只不过是math。 理论物理学的任何发现都不会成为实际的(适用的)含义,除非用math解答来解释。 如果不能在计算机上进行解释,那么这些解决scheme都不能用计算机解决,更确切地说是编程语言。 因此devise不同的语言来解决特定的问题。 但是对于像java,c,c ++这样的通用和广泛的编程语言,我们的许多编程任务都涉及重复(连续)解决scheme,例如从数据库提取值,文本文件,将它们放在窗口(桌面,网页)相同的值,有时访问类似的设备(但不同的品牌,不同的端口和头痛)等一些数据,不包括超过统一的方法,代数(计数器,一些逻辑),几何(graphics)等。取决于你想要解决的问题。

国际海事组织,你可能需要一个math才能,而不必在这个领域有太多的知识。 所以你需要擅长math的东西类似于你需要善于编程的东西。

但是总的来说,我不记得上一次我在日常编程中使用任何一种高级math,所以没有。