我在大学期间曾与一位朋友辩论过:对于任何资深程序员来说,高级数学是否必要。他坚决反对这一点。他认为,程序员只需要从高中或大一的基础数学知识入手,没有必要去学习更深入的数学知识,几乎所有的编程任务都可以在不需要高深数学知识的情况下完成。然而他也强调了算法是程序员必备的基础技能。
我的立场是,计算机科学的进步几乎完全依赖于数学的进步,因此深入了解数学将有助于程序员在处理实际世界中具有挑战性的问题时取得更好的成果。
我仍然不能确定哪一方的观点是正确的。您可以从自己的经验出发告诉我们您的立场吗?
我在大学期间曾与一位朋友辩论过:对于任何资深程序员来说,高级数学是否必要。他坚决反对这一点。他认为,程序员只需要从高中或大一的基础数学知识入手,没有必要去学习更深入的数学知识,几乎所有的编程任务都可以在不需要高深数学知识的情况下完成。然而他也强调了算法是程序员必备的基础技能。
我的立场是,计算机科学的进步几乎完全依赖于数学的进步,因此深入了解数学将有助于程序员在处理实际世界中具有挑战性的问题时取得更好的成果。
我仍然不能确定哪一方的观点是正确的。您可以从自己的经验出发告诉我们您的立场吗?
计算机科学 ≠ 编程
说真的,我认识一些好的和不好的程序员,他们的专业背景有英语、心理学和计算机科学等。一些我很崇拜的著名开发人员并没有计算机科学的背景,比如Perl的Larry Wall是语言学家。 另一方面,了解你正在工作的领域对你很有帮助,因为这样你至少可以看到你的数据是否有意义,并帮助客户/用户深入了解他们真正想要的东西。 当然,还有计算复杂度、高效数据结构和程序正确性等问题。这些是你在计算机科学中学到的,对于几乎任何领域都有用,但它们既不必要也不充分。
我猜我会成为第一个告诉你需要数学的人。正如其他人所说,数学在某些开发方面并不是非常重要,但批判性思维和结构化分析的基础非常重要。
更重要的是,数学在理解调度器、优化、排序、协议管理和计算机的许多其他方面所涉及的基础知识方面非常重要。尽管从计算水平上涉及的数学不太复杂(主要是高中代数),但理论和应用可能相当复杂,因此通过对微积分的扎实理解将大有裨益。
你完全可以没有数学知识,不应该让对数学了解不够深入阻碍你前进,但如果有机会或倾向,我建议你尽可能学习更多数学,包括微积分、数论、线性代数、组合数学以及实际应用。所有这些都在计算机科学的广泛范围内具有实际和理论应用。
我认识的人在两个领域都非常成功(那些没有专注于数学的人和那些学过物理或数学的人),但在两组人中,他们都喜欢数字问题和学习算法和数学理论。
我拥有数学学位,但是在我的职业生涯中,我似乎从来没有用到过这些数学知识。它对于训练我的逻辑思维非常有用,但是我并没有使用流体力学、量子理论或马尔可夫链编写任何代码。(我认为最有可能用到的是后者。)
大多数业务开发人员大部分时间不需要高级数学。有时候了解三角函数可能会有所帮助,并且能够理解足够的数学知识以实现基于数学描述的算法可能很重要 - 但除此之外呢?不需要。
别忘了,大多数程序员并不是在推进计算机科学 - 他们正在构建应用程序。我不需要了解先进的工程知识就能驾驶一辆现代汽车,尽管这辆车几乎肯定是通过先进的工程技术进行改进的。
我认为掌握高级逻辑(离散)数学以及集合论会有很大帮助。在处理常见的计算机程序时,这些学科可以起到很大作用。然而,在大学里我学习到的其他数学课程大多是微积分,就我所知,它的使用非常有限。由于90%(或类似数字)的编程工作都是使用非常简单的数学运算来实现商业应用,因此我认为,在大多数情况下,你只需要掌握非常少的数学知识即可胜任编程任务。然而,对布尔代数、逻辑、离散数学和集合论有良好的理解可以让你进入更高的技术层次。
这取决于你在做什么。如果你要进行大量的3D编程,了解3D几何是必要的,你同意吗?;-) 如果你想创建像JPG这样的新图像格式或像MP3这样的新音频格式,如果你不理解余弦或傅里叶变换,那么你也会感到很迷茫,因为这些都是大多数有损压缩的基础。如果你非常熟悉数学,许多其他问题也可以更好地解决。
还有许多其他编程任务,你会发现并不需要太多的数学知识。
我会与众不同地回答,“是的”
我从土木工程转到编程(混凝土太难搞了!)。我的数学背景包括通常的第一年课程,第二、三年的微积分(微分方程、体积积分、级数、傅里叶和拉普拉斯变换)以及数值分析课程。
我发现我的数学在计算机编程中极为缺乏。我缺少整个离散数学和逻辑领域的知识,只能依靠大量的教科书、维基百科和沃尔夫拉姆来生存。大多数高级算法都基于高级数学,如果没有进行广泛研究(实际上相当于半门课程的工作),我就无法开发出高级算法。我当然也无法提出新的算法,因为我没有巨人的肩膀作为数学基础。
是的,如果您编写商业现成软件,则无需进行高级数学计算。
然而,在处理以下困难问题时:
一些高级数学知识可能会很有用。并且这些问题并不像“超乎寻常”。
我曾经创建过一款软件来尝试“预测”办公室所需的纸张数量(找到最佳方法来近似值非常痛苦)。
但是,您必须小心,因为在使用高级功能时很容易迷失方向——我的一个朋友甚至使用图灵来存储动态菜单的状态以正确显示它,也许他太过于沉迷于他的想象之中了。