当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《编程是数学的一个子集吗?》经验,为你挑选了10个好方法。

我多次听说所有编程都是数学的一个子集.有些人认为 OO从根本上来说是以数学为基础的,但除了一些明显的例子外,我没有得到这种联系:

使用归纳来证明递归算法,

正式的正确性证明,

功能语言,

lambda演算,

渐近复杂度

一般而言,DFA,NFA,图灵机和理论计算,

而且盒子上的所有东西都是二进制的.

我知道数学对于编程非常重要,但我对这个"子集"视图感到困惑.编程数学子集的方式是什么?

我正在寻找可能与企业/ OO开发相关的解释,如果有足够强的连接,那就是.



1> Martin Becke..:

从某种意义上说,它需要对算法等进行抽象思考.
它是工程学,涉及计划时间表,可交付成果,测试.
当你不知道它最终会如何发展时,这是艺术.


我想补充一句:"当你试图向别人解释时,这是伏都教"
非常艺术的答案......
有谁知道他们的节目会在他们开始时变成什么样?
@HBoss:这只是意味着它总是艺术:)

2> Mark Cidade..:

编程是应用数学最困难的分支之一; 较贫穷的数学家最好保持纯粹的数学家.

--EW Dijkstra


@MarkCidade - 你有什么类似的证据证明所有优秀应用数学家比任何纯数学家更好地理解代码("好"与否")?
@MarkCidade - ROFL是的,当然,为了使用一种语言中的字母,必须首先使用该语言完全流利.通过这个论点,每个说英语的人也必须精通拉丁语和希腊语,对吧?

3> keparo..:

总的来说,请记住,数学是逻辑的正式编纂,这也是我们在软件中所做的.

您问题中的主题列表存在数学问题.我们能够在相当高的抽象水平上进行编程,因此原始数学可能不会让你盯着你.例如,你提到了DFA ..你可以在你的程序中使用正则表达式而不需要知道任何数学,但是当你想要设计一个好的正则表达式引擎时,你会发现更多的数学需求.

我想你已经找到了一个有趣的观点.编程是一门艺术,一门科学.有许多"交易工具",你不一定坐下来做很多高水平的数学,只是为了编写一个程序.事实上,当你编程时,你很多人并没有真正做很多数学计算机科学.

当我们开始解决数学出现的计算机科学中的难题时.你走的越深,它就越能充实自己......通常在较低的抽象层次中.

还有一些编程领域,你不一定要工作,但它们涉及更多的数学.例如,虽然你可以学习一门语言并且在没有任何正式数学的情况下编写一些应用程序,但如果没有一些应用数学,你将无法在算法分析方面取得很大进展.


boytheo说"数学是处理数字的逻辑子集".我/强烈/不同意.问任何数学家,他们会说数学包括拓扑,处理形状和代数,处理结构.另外,如果你碰巧问一个使用ZFC作为数学基础的人,他们会告诉你数学是应用于/ sets /的形式逻辑,而不是数字.好吧,除了我们使用数字作为某些集合的名称,即0 = {},1 = {0},2 = {0,1}等,并根据我们直观的理解来考虑这些集合之间的关系.数字(即2 + 2 = 4,而不是2 + 2 = {0,1,2,3})
@ boytheo-你可能会认为*arithmetic*是一个处理数字的逻辑子集,但是有很多数学与数字无关.
我们不使用数学,我们使用逻辑.逻辑是一套超级数学.如果没有涉及数字,那就不是数学.数学是处理数字的逻辑子集.
人们也可以争辩说,一旦你过去处理基础理论并找到一些更有趣的问题的证据,那么数学也是一门艺术.结果可能遵循一套严格的规则,但达到这些规则的过程不需要(也可能不应该)是僵化的.

4> Charles Grah..:

好的,我是大学的数学和CS专业.我会说如果集合A是数学而集合B是CS,则A与B相交.它不是子集.

毫无疑问,许多计算机科学的父亲和母亲都是像图灵和戴克斯特拉这样的数学家.大多数互联网创始人都是数学,物理或工程博士.计算机科学的大多数核心概念来自数学,但编程行为并非真正的数学.数学在日常生活中帮助我们,但两者并不相同.

但毫无疑问,计算机背后的原始推理是好的,计算的东西.在如此短的时间内,我们已经走了很长一段路.



5> plntxt..:

不提编程,但想法仍然相关.


@ alan2here http://xkcd.com/386/ :)

6> Alan Hensel..:

爱因斯坦在1917年被称为着名的数学家.直到广岛,广大公众终于认识到物理不仅仅是应用数学了.

当人们不理解某些东西时,他们会试图把它理解为一种他们理解的东西.他们以类比的方式思考.编程被描述为数学,工程,科学,艺术,工艺,建筑领域......这些都不是完全错误的; 它借鉴了所有这些.真正的问题是编程领域只有50年左右的历史.人们还没有把它融入他们的心理分类学中.



7> Michael Dorf..:

这里有很多混乱.

首先,"编程"(目前)并不等同于"计算机科学".当Dijkstra称自己为"程序员"(或多或少发明了标题)时,他并没有抽出CRUD应用程序,而是实际应用计算机科学.让我们不要混淆我们 - 今天,商业环境中的大多数程序员和计算机科学之间存在着巨大的差异.

现在,可以说,计算机科学是数学的一个分支; 但是,正如Knuth所指出的那样(在他的"计算机科学及其与数学的关系"一文中,收集在他的计算机科学论文中),也可以说数学是计算机科学的一个分支.

事实上,我强烈推荐这篇论文给任何想到数学与计算机科学之间关系的人,因为Knuth很好地阐述了这个领域.

但是,回到你原来的问题:对于一个从业者来说,"企业/ OO开发"与数学相去甚远 - 但这主要是因为大多数涉及低级操作的严肃数学已经被抽象出来了(编译器) ,操作系统,指令集等).类似地,驾驶汽车不需要先进的内燃机物理知识.当然,如果你想设计一款更高效的汽车......


我同意.如果我可以详细说明,anglosaxon传统中大多数大学称之为"计算机科学"的东西更类似于应该被称为"软件工程"的东西.概念建模,工作量估算和我们开发人员每天执行的其他任务与科学无关.

8> Steven A. Lo..:

如果您对数学的定义包括所有形式的形式逻辑,并且编程仅由代码中存在的逻辑和计算定义,则编程是数学QED的子集;-)

但这就像是说绘画只是在表面上涂上彩色颜料 - 它完全诠释了艺术,洞察力,直觉,整个创作过程

有人可能会说,音乐是同一推理的数学子集

所以我不得不说,编程不是数学的一个子集.编程使用数学子集,但也需要非数学技能/才能[很像音乐作品]



9> axel_c..:

免责声明:我是一名IT顾问,主要开发门户和架构.我有心理学学位.我从未在大学学过数学.我完成了我的工作.而且通常都很好.为什么?因为我不认为你需要知道数学(如'重'数学的东西)来编写代码.您需要分析思维,解决问题的技能和高水平的抽象.但数学并没有给你这个.这只是另一门需要类似技能的学科.在处理可用性问题和数据存储时,我的心理学研究也适用于我的日常工作.语言学和符号学也发挥了作用.

但是等等,只是不要激怒我.我并不是说计算机根本不需要数学 - 显然,在设计加密算法和硬件等时你需要真正的数学技能 - 但是,如果像许多程序员一样,你只需要使用中/低级语言(像C)或更高级别的东西(比如C#或java),主要消耗预构建的框架和API,你真的不需要理解傅里叶变换或霍夫曼树或莫比斯条带背后的数学原理......让其他人处理那,让我在它上面建立价值.我不傻.我知道线性和指数算法和数据结构等之间的区别.我只是没有兴趣重写quicksort或一个漂亮的新视频压缩技术.



10> stalepretzel..:

好吧,除了这一切......!

数学用于编程的许多方面,例如

创建高效智能的算法

理解大O符号

安全性(如RSA)

更多......我认为编程需要数学才能生存.但我不会把它称为子集.这就像吹玻璃使用物理属性一样,但那些艺术家并不称自己为物理学家.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有