天有很多年轻人或经验不足的程序员在 论坛发帖、在 Stack Exchange 网站问:「为了成为优秀的程序员,我需要擅长数学吗?」,在我还年轻的时候,我也问自己同样的问题。最近,我醉醺醺地、也是出于无聊,竟然 Google 了同样问题,差不多有 10 多年没有思考过这个问题了。在我浏览相关话题时,出现的答案模式被归结为以下三个主要类别:
-
需要
-
不需要
-
看情况
貌似「需要」和「不需要」经常带有个人主观偏见,反而显得有点儿草率的反应综合征。因此我把精力更多地放在「看情况」的选项上,以确保「需要」被证 明为一种更加普通的观点。我决定就这个问题写点儿东西,考虑到这一点,我的醉醺醺的念头开始兴奋起来,这将促使我不会再忽视它。为了成为一名优秀的程序 员,一个人是否需要擅长数学的问题,可以从哲学和技术两个方面解答。我打算坚持哲学层面。意识到它为什么对我重要,是因为一个更年轻的我,为了找到基于不 成熟和懒惰而萌生的「不需要」选项,将要投入更多的时间。
首先,我们必须尝试建立擅长数学的资格。一个人可以在既定数学原理或建模方程上,明白全局概念以适应情况,而另外一个人或许在数学的分析部分,比如 长于计算、以及操作表达式和方程。在我看来,这两种情况下,二者的平均数学能力都不错。然而,在上面提到的两个特征上有着高度竞争力的一个人,可能成为被 视作「擅长」数学的***候选人(记得把凤毛麟角的约翰·冯·诺伊曼归入精通数学的类别)。就我目前在大学数学课上观察到的,那些真正擅长数学的人们不属于 大多数。这使得答案更加复杂,「看情况」选项的有效性得到了增强。
在「Hello World」和 C++ 的名字到处乱放、而不明白其所以然时,成为一名程序员的阶段通常从掌握基础的教程开始,例子通常包含了数学。设想一下,打算编程的某个人,将很可能自然而然地深究问题,开始怀疑数学在编程中能否发挥切实作用。
坐下来为了编程而编程,除了学习既定编程语言的语法和机制,不会掺杂太多目的。最终,编程是要解决问题,并在数字王国里创新。通过为计算机编程,你 想解决或创新什么?如果你想编写网页或自动化任务的脚本,数学不会起到较大作用。然而,如果你对图形编程、开发业务和科学方面的应用有兴趣,那么数学在开 发周期里将发挥很大作用。
一旦你在特定领域有了客观目标,问题就更多地变成了学习与该领域相关的数学。有了必需的数学,以及数学思维的强大基础,就可以产出伟大的软件。因此 它真正取决于你想用编程完成什么任务。不管怎样,上面的说法不是要否定学习数学。在学习编程中,我已经注意到了一个地方,问自己是否应该学习新东西,是极 端错误的。因为软件开发根植于新技术的持续学习。
一个人为了成为优秀的程序员是否需要擅长数学,对于这个问题,我们现在考虑它的一个选项「需要」。对于不擅长的人而言,我建议他们看看数字计算机的 历史、以及那些推动机器革命的幕后人。数字计算和编程根植于数学。学习数学有助于提高问题解决的技巧和分析思维。是的,如果你想解决需要数学的、各种领域 的复杂问题,那么擅长数学对于优秀程序员而言,是不可或缺的。我尽量从不设限,当困难出现时,就勇往直前吧。