编程是数学的一个子集吗?

66
我听说过很多次编程实际上是数学的一个子集。有些人建议面向对象编程在其根源上是基于数学的,但除了一些明显的例子外,我不理解这种联系:

  • 使用归纳法证明递归算法,
  • 形式化正确性证明,
  • 函数式语言,
  • λ演算,
  • 渐近复杂度,
  • 确定有限状态自动机、非确定有限状态自动机、图灵机和理论计算等,
  • 以及盒子里的所有内容都是二进制的事实。

我知道数学对编程非常重要,但我对这种“子集”观点感到困惑。编程在哪些方面是数学的一个子集?

如果有足够强的联系,我希望得到一个与企业/OO开发相关的解释。


39
编程也是艺术。 - ryw
3
每个计算机程序都可以在图灵机上编写,这是一种纯数学工具。它证明了编程是数学的一个子集。 - rafek
6
数学也是一种艺术。 - Andreas Rejbrand
1
我听过很多人说编程是数学的一个子集。但我从来没有听过任何了解编程、数学或两者都了解的人这么说过。 - Jon Hanna
微积分学(如牛顿微积分学)可以被视为“低层数学”(极限和牛顿导数的定义)到“高层数学”(牛顿微积分学)的抽象,这种抽象类似于面向对象范式中的抽象。 - user1300214
显示剩余2条评论
29个回答

1
我认为随着我们向第四代语言迈进,编程与数学的关系已经不如以前那么密切了。汇编语言非常注重数学,但C#则不然。你有什么想法吗?

汇编与数学有关?我不明白,计算机唯一能做的“独特”操作就是求和,所以使用汇编只是在做加法并移动数据,那就是汇编。 - redigaffi

1

如果你只是想让老板把设计规格交给你,那么这并不需要太多的数学,但这样的工作一点也不有趣... 然而,想出如何做事情确实需要数学思想,至少需要抽象、图形、有时候还需要数论等知识,根据问题的不同,可能还需要用到微积分。就我个人而言,我参与编程的时间越长,就越能看到其中的数学方面。然而,在我看来,大多数情况下,你可以从图书馆借一本书,查找你需要做的基础知识,但这需要一些数学基础。

如果你不理解背后的数学知识,就无法设计出“好”的算法。在谷歌上搜索只能带你走得那么远。


1

编程是一个非常广泛的主题。好的软件不仅基于数学(逻辑),还基于心理学、语言学等其他方面。算法是数学的一部分,但除了算法之外,还有许多与程序设计相关的事情。


1
作为一名数学家,我清楚地知道数学并不等同于编程,但解决这两种学科中的问题所用的过程非常相似。
解决高级数学问题需要分析性思维、解决问题的可能方法工具箱、领域经验以及一些形式化构建答案的方式,以使其他数学家同意。如果你发现了一个特别巧妙、抽象或优雅的解决问题的方法,你会得到来自同行数学家的赞誉。对于特别困难的数学问题,你可以分阶段解决问题,并使用所谓的猜想和证明来编码你的阶段性论证。
我认为编程涉及相同的技能集。在编程中,解决和呈现问题解决方案应用相同的原则。当你有一个部分解决方案时,你将它包含在你的个人库中,并在以后的更大问题的解决中使用它。这些技能看起来非常类似于数学中使用的技能。
数学和编程之间的主要区别在于后者在不同的编程学科之间有很多共同点,而数学之间的两个领域在表达方式和传达领域所使用的方法方面可能非常非常不同。相比之下,对我来说,编程结构在许多不同的语言中看起来非常相似。

1
编程和纯数学之间的区别在于状态的概念。程序是一种状态机,它使用逻辑(数学)来在状态之间进行转换。用于状态转换的实际逻辑通常非常简单,这就是为什么成为数学天才并不一定对作为程序员有太大帮助的原因。

1

我成为程序员的部分原因是因为我不喜欢数学。我对数学本身没有问题,概念上也没问题,只是不喜欢手算。当我发现我可以告诉计算机数学问题,让它帮我计算时,一个终身的热情和职业就诞生了。

回答这个问题,根据我的母校来看,数学等于编程,因为他们允许我修Intro to C++来满足我的数学要求。

编辑:我应该提到我的学位是在电信领域,当时只有标准的文科数学要求,只需一学期即可。


1
我不明白。你怎么能“告诉计算机数学问题是什么……”。计算机不会解决问题,它们只会给出答案。你仍然需要自己解决问题。 - Rook
计算机甚至不会给出答案。计算机盲目地遵循指令。如果这些指令产生了答案,那就太好了。如果没有……那就不太好了。 - user213265
是的,好吧...现在我们进入了词汇学领域...请注意,英语不是我的主要语言,但我相信重点已经传达出去了。 - Rook

0

将编程与音乐进行比较也是很有趣的。在英国,有一些以计算机为基础的本科大学课程,会根据申请者的音乐资格而非计算机资格来录取,因为这些课程涉及到逻辑、模式等方面。


0

数学很强大,编程也很强大。如果说数学是编程的一个子集,那么同样可以说编程是数学的一个子集。

数学用语言来描述,通常是书面形式。因此,数学也是写作的一个子集吗?

历史上,数学先于计算机编程,但列表和过程可能都比数学更早出现,两者都可以被视为数学或与编程有关。

当然,编程可以用数学表示,因此有一些基础认为编程是数学的子集。然而,计算机程序也可以实现数学,将信息符号化表示,就像数学在纸上完成时通常所做的那样,包括从基本公理开始的无限和仅略微定义的内容,以及允许定义使用彼此和其他类型关系的更高级结构,支持绘制图表并允许系统扩展。数学同样是编程的一个子集。

虽然数学可以表示诸如单词之类的结构,但数学的设计是关于数字的。例如,字符串比数学更具程序性。


-5

这是一半数学,一半人语,当然啦。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接