在大学期间,我碰巧和一位朋友争论过高级数学是否对任何资深程序员都是必要的。他曾经激烈地反对这一点。他说,程序员只需要高中或大学一年级数学的基本数学知识,不多不少,几乎所有的编程任务都可以完成,甚至不需要高级数学。然而,他认为算法是程序员的基础和必备资产。
我的立场是,所有计算机科学的进步几乎都依赖于数学的进步,因此,全面的数学知识将极大地帮助程序员处理现实世界的挑战性问题。
我仍然无法确定论点的哪一方是正确的。您能根据自己的经验告诉我们您的立场吗?
在大学期间,我碰巧和一位朋友争论过高级数学是否对任何资深程序员都是必要的。他曾经激烈地反对这一点。他说,程序员只需要高中或大学一年级数学的基本数学知识,不多不少,几乎所有的编程任务都可以完成,甚至不需要高级数学。然而,他认为算法是程序员的基础和必备资产。
我的立场是,所有计算机科学的进步几乎都依赖于数学的进步,因此,全面的数学知识将极大地帮助程序员处理现实世界的挑战性问题。
我仍然无法确定论点的哪一方是正确的。您能根据自己的经验告诉我们您的立场吗?
要回答您提出的问题,我不得不说:“不,编程不需要数学”。但是,正如其他人在此线程中所建议的那样,我相信理解数学与能够“以算法方式思考”之间存在相关性。也就是说,能够抽象地思考数量、过程、关系和证明。
我大约 9 岁时开始编程,如果说我在那个阶段学到了很多数学知识,那将是牵强附会。但是,通过一些努力,我能够理解变量、for 循环、goto 语句(请原谅我,我是 Vic 20 BASIC 并且我还没有阅读任何 Dijkstra)和基本坐标几何,以便将图形放在屏幕上.
我最终完成了纯数学的荣誉学位,辅修了计算机科学。虽然我主要专注于分析,但我也学习了相当多的离散数学、数论、逻辑和可计算性理论。除了能够将统计学、概率论、向量分析和线性代数的一些想法应用于编程之外,我学习的数学很少直接适用于我本科期间的编程以及我之后从事的商业和研究编程。
然而,我坚信数学所要求的形式化思维方法——仔细推理、寻找反例、建立公理基础、发现概念之间的联系——在我处理大型复杂的编程项目时提供了巨大的帮助。
考虑运动员为他们的运动训练的方式。例如,毫无疑问,足球运动员的大部分训练时间都花在了基本的足球技能上。然而,为了提高他们的整体健康,他们也可能会花时间在健身房骑自行车或划船机、做举重等。
学习数学可以比作重量训练或交叉训练,以提高你的精神力量和编程耐力。练习基本的编程技能是绝对必要的,但学习数学是一项令人难以置信的脑力锻炼,可以提高你的核心分析能力。
虽然编程可能不需要高等数学(除非您正在编程高等数学能力),但编程和数学的思维过程非常相似。您从已知事物的基础(公理,先前已证明的理论)开始,并尝试到达新的地方。您不能跳过步骤。如果您确实跳过了步骤,那么您需要填写空白。这是一个批判性的思维过程,使两者非常相似。
此外,数学家和程序员都在抽象地进行批判性思考。现实世界的事物由对象和变量表示。从具体到抽象的能力也将这两个领域联系起来。
很有可能,如果你擅长其中一项,那么你很可能擅长另一项。
计算机科学!=编程
好吧,说真的,我认识英语和心理学专业的好程序员和坏程序员,还有一些计算机科学专业的程序员。作为开发人员,我钦佩的一些非常有名的人没有 CS 背景。例如,Larry Wall(Perl) 是一位语言学家。另一方面,它有助于了解您正在处理的领域,因为这样您至少可以查看您的数据是否有意义并帮助您的客户/用户深入了解他们真正想要的内容。是的,存在计算复杂性、高效数据结构和程序正确性的问题。这是你在计算机科学中学到的东西,在几乎任何领域都知道它很有用,但这既不是必要的,也不是充分的。
我想我会成为第一个说你确实需要数学的人。正如其他人所说,数学对于发展的某些方面并不是那么重要,但批判性思维和结构化分析的基础非常重要。
更重要的是,数学对于理解调度程序、优化、排序、协议管理和计算机的许多其他方面等许多基础知识非常重要。尽管计算级别涉及的数学并不复杂(主要是高中代数),但理论和应用可能相当复杂,因为通过微积分对数学有扎实的理解将大有裨益。
没有它你能过得去吗,绝对,你不应该让不那么透彻的数学知识阻碍你,但如果你有机会,或者我愿意尽可能多地学习数学,微积分,数值理论,线性代数、组合学、实际应用,所有这些在广泛的计算机科学中都有实际应用和理论应用。
我认识的人在围栏两边都非常成功(那些对数学没有特别关注的人,以及那些上物理或数学学校的人),但在这两个群体中,他们都喜欢数值问题,学习算法和数学理论.
我有数学学位,但我不记得在我的职业生涯中要求过一次数学。它在训练我的逻辑思维方面很有用,但我没有使用流体动力学、量子理论或马尔可夫链编写任何代码。(我怀疑最后一个是最有可能出现的。)
大多数业务线开发人员大部分时间都不需要高级数学。有时了解三角函数会有所帮助,当然能够理解足够的数学来实现数学描述的算法可能很重要——但除此之外呢?不。
不要忘记,大多数程序员并不是在推进计算机科学——他们是在构建应用程序。我不需要知道先进的工程技术来驾驶一辆现代汽车,尽管这辆车几乎肯定是通过先进的工程技术得到改进的。
我认为拥有高级逻辑(离散)数学真的很有帮助。这与集合论一起。在处理常见的计算机程序时,这些学科可以提供很大帮助。然而,我在大学里学的很多其他数学都是微积分,据我所知,它的用途非常有限。由于 90%(或类似的)编程都是用非常简单的数学来开发商业应用程序,我想说的是,在大多数情况下,你只需很少的数学知识就可以过关。然而,对布尔代数、逻辑、离散数学和集合论的良好理解确实可以让你更上一层楼。
这取决于你在做什么。如果您进行大量 3D 编程,那么 3D 几何知识当然是必要的,您不同意吗?;-) 如果您想创建新的图像格式(如 JPG)或新的音频格式(如 MP3),如果您无法理解余弦或傅立叶变换,您也会迷失方向,因为这些是大多数有损压缩所基于的基础. 如果您对数学非常了解,则可以更好地解决许多其他问题。
还有许多其他的编程任务你会发现不需要太多的数学。
我会在这里反其道而行之,说“是”
我从土木工程转向编程(混凝土糟透了!)。我的数学背景包括通常的第一年的东西、第二年和第三年的微积分(Diff EQ、体积积分、级数、傅里叶和拉普拉斯变换)和数值分析课程。
我发现我的数学在计算机编程方面非常缺乏。我缺少离散数学和逻辑的整个领域,我只能依靠大量的教科书库、维基百科和 Wolfram 来生存。大多数高级算法都基于高级数学,如果不进行广泛的研究,我无法开发高级算法(基本上相当于半个课程的工作量。)我当然无法想出新算法,因为我只是不没有像巨人肩膀那样站立的数学基础。
如果您发现该主题足以吸引人来发布此内容,请继续并开始学习。剩下的就自然而然了。
是的,不需要高等数学——如果你是商业编程的话——现成的软件。
但是,在处理核心问题时,例如:
一些高等数学知识可能会派上用场。这不像是“不属于这个世界”的问题。
我必须创建一个软件来尝试“预测”办公室所需的纸张数量(而且只是为了找出近似值的最佳方法是地狱)。
但是,您必须小心,因为在使用高级事物时很容易迷路-我的一个朋友使用图灵来存储动态菜单的状态只是为了正确显示它-嗯...也许他的想象太过分了。
什么类型的编程?
根据我的商业经验,我不需要高等数学,但这在很大程度上取决于你所在的领域。
计算机图形学需要大量的高等数学。许多学术计算机编程需要高等数学。
所以说擅长数学的人和擅长编程的人之间往往存在相关性。
我希望这个空洞的答案会有所帮助。
在某些领域,开发人员需要数学,但在其他领域几乎没用。
如果您是一名游戏开发人员并且必须经常使用物理 - 对数学的理解至关重要。如果您正在使用高级视觉控件 - 如果没有几何图形,您将无能为力。如果您打算进行一些财务计算 - 掌握扎实的统计知识会非常有帮助。
另一方面,在过去的 5 年里,我只有 2 或 3 个项目需要任何数量的数学。其中只有 1 次 Google 搜索没有帮助。
归根结底,即使是财务计算也经常是您的客户为您做的事情,并为您提供要实施的公式。
因此,如果您从事“应用软件”业务,您可能永远不会使用您的数学学位。如果你在学术软件领域,数学是至关重要的。
我同意克里斯。我也会说“是”。但这取决于您的市场,如上所述。如果您只是创建一些基本的“现成”应用程序或编写工具来帮助您的日常工作......那么数学就没有那么重要了。
工程定制软件解决方案需要大量的问题解决和批判性思维。当存在数学背景时,最肯定会增强的技能。我的计算机工程学位辅修了数学,我将所有以数学为导向的背景归功于我为什么会成为今天的我。
那是我的 2 美分,我可以从上面的阅读中看出很多人不会同意。我鼓励所有人考虑一下,我并不是说没有数学背景就不能拥有这些技能,我只是说这些技能是拥有这种背景的副作用,可以对软件产生积极影响。
以我的经验,编程需要数学,你无法摆脱它。整个编程都是基于数学的。
问题不是黑白,而是更加丰富多彩。问题不是你是否需要数学,而是需要多少。更高水平的数学将为您提供更多工具,并为您打开不同的思路。
例如,如果您只知道加法和减法,您就可以编程。当需要乘法时,您将不得不执行很多加法。乘法简化了重复的加法。代数允许人们在将数学应用到程序中之前对其进行简化。线性代数提供了转换图像的工具。布尔代数提供了减少所有这些if
语句的机制。
不要忘记数学、逻辑和哲学的兄弟姐妹。逻辑将帮助您有效地使用case
orswitch
语句。哲学将帮助您理解编写您正在修改的代码的人的想法。
是的,你不需要太多的数学来编写程序。有些程序可能比其他程序需要更多的数学。与那些了解较少的人相比,更多的数学知识会让你更有优势。在这个时代,人们需要他们可以获得的一切优势来获得这些工作。
我从事专业编程已经 8 年了,从 12 岁开始我就将其作为一种爱好。
数学不是必须的,逻辑才是。数学非常有用,说没有必要就像说杀人不需要枪,你可以用刀。嗯,这是真的,但是那把枪让它变得容易多了。
有几个最基本的要求,你应该已经满足了。您需要了解基本的代数表达式和符号,以及常见的计算机等价物。例如,你需要知道指数是什么(3到3位是27),常见的计算机表达式是3^3。代数的通用符号在语言之间确实会发生变化,但其中许多都使用某种统一的方法。其他人(看着你的 LISP)没有。您还需要知道操作的顺序。
你需要理解算法思想。首先这个,然后这个,产生这个计算中使用的。有可能你明白这一点,或者你不明白,如果你不明白,这是一个相当困难的障碍;我发现这是你“得到”的东西,而不是你可以学到的东西。相反,有些人不会“得到”艺术。他们不应该成为画家。此外,CS 课程中有些学生无法弄清楚为什么这不起作用:x = z + w;z = 3; y = 5; 不是他们不懂加法,而是他们没有掌握明确表达的要求。如果他们理解它,计算机也应该理解它,对吗?如果你看不出上面三行有什么问题,那就不要成为程序员。
最后,您需要知道您的编程领域中的任何数学。会计软件可以停留在基本代数上。如果您正在编程物理,则需要了解物理(粗略)和 3 维几何(欧几里得)中的数学。如果您正在编写架构软件,则需要了解三角学。
这比数学走得更远;无论您要编程的领域是什么,您都需要充分了解基础知识。如果您是编程语言分析软件,您需要了解概率、统计、语法理论(多语言)等。
通常,某些领域需要或可以受益于您认为无关的知识。例如,如果您正在编写音频软件,您实际上需要了解三角函数来处理波形。
幅度也会改变事物。如果您正在对包含 1000 个项目的财务数据集进行排序,这没什么大不了的。但是,如果是 1000 万条记录,您将从实际了解向量数学并深入了解二进制级别的排序(系统如何按字母顺序排序?它如何知道 'a' 小于 'b '?)
你会发现,作为一名程序员,你的一般知识库将会爆炸式增长,因为每个项目都需要在直接的编程领域之外进行更多的学习。如果你对自学很敏感或懒惰,并且不喜欢每周花 10 多个小时做基本上“家庭作业”的想法,那么不要成为一名程序员。
如果你喜欢思维练习,如果你喜欢学习,如果你可以在没有计算器的情况下思考抽象的事物,或者没有素描板的设计,如果你对生活和爱好有广泛的品味,如果你自我批评并且可以扔掉'最喜欢的想法,如果你喜欢完善事物,那就成为一名程序员。不要将这个决定建立在数学上,而是建立在逻辑思考和学习的能力上。这些才是重要的;数学只是副产品。
当然这取决于你想成为什么样的程序员,或者更好的是你的雇主希望你成为什么样的程序员。我认为微积分和代数是必不可少的,统计和线性规划确实是你公文包里的好工具,也许分析(导数、积分、函数......)可以不用。但是如果你想知道事情是如何工作的(例如电子学,或一些非平凡的算法),“高级”数学是你最好不要没有任何地方的东西。
我所做的大部分编程都涉及用于研究的物理模拟,包括电磁学、量子力学和结构力学等。由于问题域具有与之相关的高级数学,因此如果不使用高级数学,我将很难解决它们。
所以你的问题的答案是 - 这取决于你想要做什么。
如果您要编写一门新的编程语言,高级数学知识至关重要。或者您需要编写自己的算法。
然而,对于大多数日常编程——从网站到保险处理应用程序——只需要基本的数学。
具有扎实数学(不仅仅是算术)或逻辑背景的人将很好地应对算法、变量使用、条件推理和数据结构。
数学会帮助你达到一个点,但只能达到一个点。
我不认为高级数学知识是优秀程序员的必要条件,但根据个人经验,我认为对高级数学掌握得更好的程序员也会成为更好的程序员。这可能仅仅是因为他们有更合乎逻辑的思维,或者由于他们解决数学问题的经验而更合乎逻辑的观点。
数学的基本概念是遵循、设计、理解、实现和使用算法。如果你不能做数学,那是因为你不能做这些事情,如果你不能做这些事情,那么你就不能成为一个有效的程序员。
常见的编程任务可能不需要任何特定的数学知识(例如,除非您正在执行诸如 3D 图形或物理模拟之类的任务,否则您可能不需要矢量代数和微积分),但基本技能是相同的,并且缺乏能力在一个领域中将与在另一个领域中相应缺乏能力相匹配。
数学是创建程序的工具箱。我推荐 Cormen's Introduction to Algorithms。它涉及更多“数学”的东西。
- Greatest lowest limit (managing resources)
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)
我不认为高等数学是成为一名优秀程序员的必要条件 - 一如既往,这取决于你在编码什么。
当然,如果您从事 3D 图形编程,您将需要矩阵之类的东西。作为商业软件的作者,您可能需要统计数学。
但是,作为一名近 10 年的专业程序员(以及另外 10 年的业余爱好者)“高等数学”并不是我经常需要的。在大约 99.8% 的情况下,它只是一些智能组合中的加、减、除和乘法——在大多数情况下,它与算法有关,而不是数学。
对于大多数程序员来说,学习高等数学很重要,因为它可以让你的大脑按照逻辑思考,一步一步地从一件事到另一件事。
然而,很少有编程工作需要高中数学以外的任何东西。我曾经使用过线性代数。我从来没有用过微积分。我每天都使用代数。
数学知识通常对程序员很有用,图形设计技能、解谜能力、职业道德和许多其他技能和特质也是如此。很少有程序员擅长程序员可能擅长的一切。我不同意任何形式的陈述“你不是一个真正的程序员,除非你可以{在这里插入最喜欢的编程能力}”。
但我会警惕不会做数学的程序员。比不会画画的人更是如此。
我认为这真的取决于你想要做什么,但恕我直言,CS 和 OS 理论在这里比数学更重要,你真的只需要它们所涉及的数学。
例如,在现代操作系统中的许多调度程序背后,有很多调度理论和优化的 CS 背景。这是一个需要一些数学运算的例子,虽然不是很复杂。
但老实说,对于大多数东西,你不需要数学。您需要的是学习以 2 和 16 为基础的思考能力,例如心理 OR/AND 的能力。例如,如果您有一个字节,并且在该字节内有两个 3 位字段和 2 个浪费位,那么当字节值类似于 11 时,知道哪些位在哪些字段中处于活动状态将使事情变得比必须使用稍快一些笔和纸。
我大约在进入代数预科课程的同时开始编程。所以我不会说数学有那么重要,尽管它可以帮助某些类型的编程,尤其是函数式编程。
我还没有学过离散数学,但是我看到了很多关于编程的理论知识,这些东西都是用本课教授的数学符号编写的。
此外,请确保您知道如何计算任何基数,尤其是基数 2、8 和 16。
此外,真正让我了解一些概念的课程是预编程课程。我们学会了联合、交叉和所有快乐的东西,它几乎与按位数学完全相似。我们非常深入地介绍了布尔逻辑。我认为最有用的是我们学会了如何减少复杂的布尔语句。这非常方便:
(x|y) & (x|z) & (x|foo)
可以简化为
x | (y & z & foo)
我以前不太了解。
好吧,您产生了许多响应,不,我没有全部阅读。我在这个中间,不,你当然不需要数学才能成为一名程序员。linux 中的汇编程序与设备驱动程序并不比另一个复杂,也不需要数学。
无论如何,您都不需要为此参加或通过数学课。
我同意编程的问题解决思维方式与数学解决方案的思维方式非常相似,因此数学可能很容易。或者相反,如果数学很难,那么编程可能会很困难。不需要课程或学位或任何纸张或奖杯,当然可以开始学习。
现在,如果您无法在头脑中、在纸上或使用计算器快速将十六进制转换为二进制再转换为十进制,那么您将会遇到困难。如果您想进入网络和其他涉及时序的事情,内核驱动程序通常会但不必这样做。你会挣扎的。我知道一长串拥有数学学位和/或计算机科学和/或工程学位的人在速率计算、每秒比特数、每秒字节数、你需要多少内存等方面遇到困难。在某种程度上,它可能被认为是一些人拥有和其他人必须努力实现的某种诀窍。
我的底线是我相信意志力,如果你想学习这些东西,你可以并且愿意,就这么简单。你不需要上课或花很多钱,例如 linux 和 qemu 可以让你忙碌很长一段时间,不同的 asm 语言等,内核开发、嵌入式等的易崩溃环境。你不仅限于此,但我不相信如果你不想,你就必须逃跑并参加任何课程。如果你想肯定会参加一些ee课程,一些cs课程和一些数学课程..
你需要数学。编程只不过是数学。理论物理学的任何发现都不会成为实际(适用)的含义,除非它们用数学解决方案来解释。如果不能在计算机上解释,尤其是在编程语言上,这些都无法通过计算解决。因此,不同的语言旨在解决特定的问题。但是对于通用和广泛传播的编程语言,如 java、c、c++,我们的许多编程任务涉及重复(连续)解决相同问题,如从数据库、文本文件中提取值、将它们放在 Windows(桌面、Web)上、操作相同的值,有时从类似的设备访问一些数据(但给定不同的品牌名称,不同的端口和令人头疼的问题)等,不涉及单一方法,
IMO,您可能需要数学能力,而不必在该领域拥有太多知识。所以你需要擅长数学的东西和你需要擅长编程的东西是相似的。
但总的来说,我不记得上次在日常编程中使用任何高级数学是什么时候了,所以没有。
编程要求你掌握或至少学习两门学科。编程本身以及您的程序所针对的领域。如果你是写会计软件,你需要学习会计,如果你是编程机器人运动学,那么你需要了解正向和反向运动学。帐户可能只需要基本的数学技能,其他领域需要其他类型的数学。
编程是计算机科学的工具。
在许多编程领域,数学处于次要地位。如果您不知道如何快速排序,请下载一个模块来为您完成。你不懂椭圆曲线,没问题,买个AES加密模块。
现在是计算机科学。是的,你需要更高水平的数学。毫无疑问。密码学、操作系统、编译器构造、机器学习、编程语言等等都需要某种形式的高等数学(微积分、离散、线性、复数)才能完全理解。
不,不需要数学。毕业后什么都没做过,可能忘记了我掌握了什么小微积分。
把它想象成一辆汽车。您认为牵引力控制和 ABS 制动之类的东西背后有多少数学/物理?很多。你需要知道多少数学才能使用这些工具?没有任何。
编辑:要添加的一件事。工业在这里可能很重要。在研究公司工作的程序员,或者为那辆车编写嵌入式牵引力控制系统的程序员,可能比普通的商业工具程序员更需要数学。
保持观点很重要。学习数学、高级数学、计算等非常适合思维过程,许多编程职位都期望并可能利用数学和数学概念。但是许多编程工作根本不使用数学。
计算机科学作为一门数学学科,当然需要大量的数学知识。但是很少有编程工作是comp sci的衍生品。CS是一门非常具体的学科。IT 学校现在将软件工程作为独立于 CS 的学科是有原因的。它们是非常不同的领域。
例如,Comp Sci 并没有让您为大多数 Web 应用程序的世界做好准备。并且软件工程不会让您为编译器设计和内核开发做好充分准备。
远射不需要,但是...
举个简单的例子——如果不了解几何,你就不能用正方形和矩形做很多事情。(每个程序员都有/得到几何,所以这只是一个例子)。
没有三角学,有些事情很难做到。尝试在不了解三角学的情况下画一个模拟时钟——你可以做到,但你必须经历的过程本质上是重新发明三角学。
微积分很有趣。除非您设计游戏,否则您可能永远不需要它,但微积分会教您如何为更“真实世界”的事物建模。例如,如果您尝试模拟一棵树的倒下,要在拱门的每个点上获得正确的速度,您可能需要大量的数学运算。
另一方面,这只是一个准确的问题。你可以用微积分做的任何事情,你都可以用循环和近似来做。
除此之外,为了使事物更加逼真,您可能需要分形和更高级的数学。
如果您正在对网站和数据库进行编程,则几乎不需要代数 101。
当我使用计算机解决固体力学和传热问题时,我使用了大量的数学知识。线性代数、数值方法等
由于我正在编写将信息从关系数据库传递到基于 Web 的用户界面的业务应用程序,因此我从未接触过任何这些知识。
我仍然会向任何人推荐更好的数学背景。
离散数学对开发人员非常有帮助;我没有接受过正规培训。
我认为“编程集体智能”中列出的技术与我作为 ME 所做的事情相去甚远,可能会落入我现在正在做的商业应用程序中。Netflix 无疑从中取得了不错的成就。这种群体情报的东西似乎正在上升。
回答这个问题:没有。
数学天赋和编程天赋:相关性强,几乎没有因果关系。
一个当然不是另一个的先决条件,并且提高你的数学技能不会让你成为一个更好的程序员,除非你在一个数学非常不可或缺的专业领域(3D 图形、统计编程等)进行编程.)
也就是说,数学背景当然不会受到伤害,并且在某些情况下会极大地帮助你。正如其他人所指出的那样,数学和编程所涉及的思维过程非常相似。如果你有一个天赋,你可能会发现你有另一个天赋。
如果我要向程序员推荐数学要求,那就是一些基本的统计数据。几乎所有的编程工作都需要某种形式的小报告。
当您开始做更多高级和/或有趣的事情时,对数学的需求确实会增加一点。游戏非常注重数学,因此您确实需要了解不同算法的成本的性能关键型应用程序。
我将和你坐在篱笆上……有很多好的论据,支持和反对,而且大多数都同样有效。那么哪个是正确的答案?
两者……视情况而定。这不是“如果你不支持我们,你就是反对我们”的情况。
数学的许多方面确实使编程领域变得更加容易:几何、代数、三角函数、线性方程、二次方程、导数等。事实上,许多最高性能的“算法”都以数学原理为核心。
正如 Jon 所指出的,他拥有数学学位,但在编程世界中,他几乎不使用这些知识。我建议他确实比他可能认为的更多地使用数学,尽管是不自觉的……好吧,也许不是量子力学,而是更基本的原理。每次我们布置 GUI 时,我们都会使用数学原理以美观的方式进行设计,我们不会有意识地这样做 - 但我们确实这样做了。
在商业世界中,我们很少考虑我们在软件中使用的数学 - 在我们编写的软件的许多方面,它只是完成相同单调任务的标准算法,以帮助商业世界赶上技术可用的。
如果没有有意识地在我们的软件中使用数学,就很容易跳过整个职业生涯。但是,了解数学有助于简化编程的许多方面。
我认为这个问题真的可以归结为:“编程需要高级数学吗?” 当然,对于这个问题,答案是否定的……除非您要开始编写和/或破解加密算法(这是一个有趣的主题)或使用 Mil 指出的液压方程或流量控制系统(就像我过去一样)。但我要补充一点,虽然基本数学可能不是必需的,但它会让你的生活更轻松。
我有数学学位,我不能说它对我有任何帮助。(我开发通用网络应用程序,没有任何科学性)。我喜欢与其他没有数学学位的开发人员一起工作,因为他们似乎跳出了我的“数学”框框思考并强迫我做同样的事情。
必要的!=足够的
拜托了伙计们!标题说“必要”,我认为这充其量是能够很好地编程的充分条件。就像他们有许多充分但非必要的条件:5 年经验、CS 学位或任何科学背景。
有些人甚至会争辩说,诗人或英语专业可以让你成为一名优秀的 API 设计师,或者艺术家可以擅长 UI/Web 编程。
但是这些显然不是保证,就像知道数学可能不会让你成为一个好的程序员一样,但你可以像其他人一样破解一些 C++ 或 F# ......
我的回答绝对不是。我曾经/现在(现在失业,感谢印度)担任计算机程序员 25 年以上。而且,在我的整个职业生涯中,我从未遇到过只需要基本数学技能的程序 LOGIC。除非您每天使用超出基本数学技能的数学,否则对高级数学的需求为零。在公司层面,任何复杂的数学都将被提交给静态学家或数学家,他们将为程序员提供必要的伪代码,并且双方将在最终产品的彻底测试中合作。最终,球在数学书呆子的球场上。在任何级别,除非您是数学家/静态学家/高级程序员,否则让程序员负责复杂的高级数学计算机程序的预期结果的想法是荒谬的,而且非常鲁莽。
根据我的经验,计算机科学学位的数学要求只是为了淘汰那些会失败的人。如果你不能通过微积分 I 和 II,你肯定不会通过关于编译器构造、数据库或操作系统理论的高级课程。
作为一个大约 30 年前开始从事游戏工作的自学程序员,我肯定会说你需要尽可能多地获得数学知识。矩阵、四元数、光线追踪、粒子系统、物理引擎等东西确实需要良好的数学理解水平,我只希望我早点学会所有这些东西。
我是一名游戏程序员,与艺术家、游戏设计师、关卡设计师等一起工作。
团队中有一个懂数学的人是一个净加分,就像有一个玩各种游戏的人是一个加分,一个是我们目标受众的代表成员,一个经历过一些痛苦的作品的人,等等
通常,最了解数学的人是程序员(有时是游戏设计师),因为这些领域足够接近。但是,日复一日,游戏程序员除了 3D 几何和(有时)物理之外不需要太多数学。
在我学习的数学中,我发现统计数据最有用,尽管我有时会发现自己遗漏了一些概念。
另请参见编程 == 数学吗?来自堆栈溢出。
虽然我认为编程不需要它,但我无法告诉你有多少次我能够使用线性代数概念来编写一个清晰而简短的解决方案来替换一个复杂的(有时是不正确的)解决方案。当任何图形或几何(甚至一些求解器)工作时,矩阵知识以及如何使用它们也非常有用。
有很多编程任务可以在没有高等数学背景的情况下完成。可以肯定地说,大多数可用的编程工作很少需要超过高中水平的数学。但是你不会编写软件,通过破解你的大学新生代数数学水平来帮助将航天飞机送入太空。因此,虽然高级数学通常对许多编程任务并不重要,但更困难的问题绝对需要它。学习数学还可以教授有价值的解决问题的技能,这些技能几乎可以在任何地方使用。我想你可以说大多数时候这不是必需的,但它肯定会在几乎所有时间都有帮助。
对于您的通用 GUI 和 Web 应用程序,只需要基本的数学知识。
一生一次,您可能有一个奇怪的项目需要微积分或线性代数。
(如果您从事 3D 游戏编程或其他特定领域的编程,您可能每天都需要它)
在我看来,这个问题有一些好处。
正如 David Nehme 在此处发布的那样,计算机科学和编程是两个截然不同的学科。
我发现一个具有非常基本的高中和大学早期数学技能的程序员完全有可能成为一个称职的程序员。不过,对计算机科学专业的毕业生不太确定。
正如您正确指出的那样,算法创建过程与您处理数学的方式非常相关。即使这只是为了正确设计算法而必须完成的数学和分析过程类型的结果。
我也认为这在很大程度上取决于你在做什么,而不是取决于你的工作描述或技能。例如,如果编程和数学都是产生某种效果的工具,那么您肯定必须同时具备这两种能力(即:您正在为某种目的制作模型化程序)。虽然,如果编程是您活动的最终目标,那么很可能不需要数学。(即:您正在制作一个 Web 应用程序)
如果您在日常工作中需要高级数学作为程序员真的取决于您的任务。我需要他们。原因是我必须对管道系统进行水力计算,以便在管道系统建成之前对其进行代码评估。您永远不想因为压力不足或压力过大而站在坍塌的管道系统附近。;)
我想对于许多其他类型的“现实世界的模拟”,你也需要高等数学。
统计机器学习技术变得越来越重要。
我觉得这个问题(我得到了很多)最好用一个类比来回答。
我们中的许多人举重。为什么?是因为我们正在为成为职业举重运动员的那一天做准备吗?我们会遇到举重作为工作要求吗?
当然不是。我们举重是因为它锻炼了我们的肌肉。它使我们保持健康和身材。一个健康的人会在其他方面表现更好:远足、建筑、跑步、睡眠等。
学习数学就像大脑的举重。它锻炼头脑并保持它的形状。你可能永远不会在你的职业生涯中使用微积分,但你的大脑会因此而变得更好。
商业编程:算术,一些代数
工程:数值分析
科学编程:天空是极限
在大学里你能学到的唯一有用的东西是理论的。
数学既关乎技能本身,也关乎一种思维方式。甚至这也存在于几个层面。其他人指出,数学常见的分析和抽象技能对编程很有价值,这是一个层次。我还要争辩说,还有另一个级别包含从一个到另一个的精确类似物——例如关系数据库背后的集合论,这一切都被 SQL 语义所隐藏。
很多时候,“最好的”——我的意思是最高效和简洁的——解决方案是那些背后有一点数学的解决方案。如果您开始将面向数据的编程问题视为矩阵操作(很多都是这样),您通常可以从数学世界中找到新颖的解决方案。
显然,编程不需要成为数学专家,任何人都可以被教,但这是值得拥有的技能之一 - 并在新兵中寻找。
在某些编程中,我认为数学是最有帮助的,但不是程序员。如果我不用我方便的花花公子计算器就可以加 2+2,我就很幸运了。
取决于编程任务。我会将“从数据库中获取数据并将其显示在网站上”风格的编程放在不太重要的一侧,然后放在另一侧的“视频游戏”(我在游戏中工作,我觉得我使用了一些随机的不同每天都有数学的味道,如果我知道更多,可能会使用更多)。
这取决于你做什么:Web 开发、商业软件等。我认为对于这类东西,你不需要数学。
如果你想做计算机图形、音频/视频处理、人工智能、密码学等,那么你需要有数学背景,否则你根本做不到。
想到两件事:
我承认我从来没有在编程中使用过任何高级数学,除了一些关于数学主题的宠物项目。
也就是说,我很喜欢与足够聪明的人一起工作,可以理解数学。掌握复杂和困难的东西有助于让你的大脑适应复杂和困难的编程问题。
你不需要为编程学习数学。
但是学习数学可以训练你的思维纪律。因此,我认为数学对开发人员有好处。
你不需要太多的数学。一些组合思维可以帮助您构建和减少快速执行的问题。能繁衍是好事。你是一名工程师,近似值很好。
我认为对于您描述的任务,不需要太多的数学运算。但通常我认为对于真正的高级系统编程你:
不,你不需要知道任何数学(除了二进制/八进制/十六进制/十进制表示)来进行系统编程和类似的东西。
系统编程不是火箭科学:-) 恕我直言,任何good
程序员都可以进行系统编程。然而,需要知道
我认为最受追捧的品质是编写精确的代码和能力,如果需要,可以在上述任何项目中进行深入研究。
顺便说一句,这是我个人的理论,YMMV;我不认为自己是一个好的程序员!:-(
要做你想做的事,你不必知道数学,但你必须非常喜欢它。
在大学里,我们阅读了 Knuth、Graham 和 Patashnik 的《具体数学》一书。这是一本为计算机科学专业的学生选择主题的数学书。几年后,我再次检查这本书,发现我至少使用了书中的每个主题一次(斯特林数字除外)。
在大多数情况下,了解一些数学有助于以更少的工作、更优雅的方式解决问题或实现更快的解决方案。这也取决于您正在从事的工作类型。也就是说,当你专注于算法时,数学比专注于工程问题时更重要。
我有两个数学学位。我希望我对数据库有更多的了解。
我的观点是,虽然能够找到多项式的根或能够证明 sqrt(2) 是无理数,但在抽象意义上是有用的,但不一定会让你成为更好的程序员。
这是一个很好的答案,您不需要了解数学(我从不超出基本的操作顺序:PEMDAS 数学)哈哈,但我总能找到解决方案。SURE 早在 1970 年代的数学对于那些试图使用非常复杂的数学方程来有效地为 CPU 周期进行编程以避免循环等的程序员来说是极其重要的。
现在计算机功能强大,可以循环到 100 左右,以避免使用复杂的数学从长远来看不会真正损害您的程序,但是当然,您将作为观察者获得数学技能,甚至无需学习数学哈哈,这将提高您的高效编程能力.
让我们面对现实吧,你知道的数学越多,你就越有可能不仅更好地优化程序,而且由于这个疯狂的数学方程式,你会在不阅读那些声明这是不可能的文章的情况下理解什么是可能的和什么是不可能的。
学习数学可以帮助你在没有实际经验的情况下理解事物是如何运作的。(我基于我的生活)。
这是我的示例(一些压缩文章)。我一直在尝试,却不了解它背后的数学原理……至少从 700 开始?有缺陷/失败的尝试我现在知道更多可以做的事情(可能会再次失败),也知道 700 种有缺陷的看待它的方式。
如果我可能知道数学,我什至不会尝试那 700 次有缺陷的尝试,可能是因为我知道太多数学。但是我在不知道那么多数学的情况下选择的路径对我来说更有趣,更有教育意义。
但这只是我..我总是亲自动手..不是书虫;)
一些带来新的数学突破,另一些则带来更快更好优化的软件。
让这成为你们选择最适合自己的道路的一个教训,相信我两者都是有益的。