我多次听说所有节目都是数学的一个子集。 Some suggest OO的根源是数学基础,但除了一些明显的例子外,我没有得到联系:
我知道数学对编程非常重要,但我对这个“子集”视图很困难。编程数学子集的方式是什么?
我正在寻找可能与企业/ OO开发相关的解释,如果有足够强大的连接,那就是。
答案 0 :(得分:82)
这是数学,因为它需要抽象思考算法等 它涉及到计划时间表,可交付成果,测试时的工程设计 当你不知道它最终会如何发展时,这是艺术。
答案 1 :(得分:53)
编程是应用数学最困难的分支之一;较贫穷的数学家最好保持纯粹的数学家。
- 电子。 W. Dijkstra
答案 2 :(得分:46)
总的来说,请记住,数学是逻辑的正式编纂,这也是我们在软件中所做的。
您问题中的主题列表中存在数学问题。我们能够在相当高级抽象上进行编程,因此原始数学可能不会让你盯着你。例如,你提到了DFA ..你可以在你的程序中使用正则表达式而不需要知道任何数学,但是当你想要设计一个好的正则表达式引擎时,你会发现更多的数学需求。
我认为你已经找到了一个有趣的观点。编程是一门艺术,一门科学。有许多“交易工具”,你不一定坐下来做很多高水平的数学,只是为了编写一个程序。事实上,当你编程时,你很多人并没有真正做很多数学或计算机科学。
当我们开始解决数学出现的计算机科学中的难题时。你走得越深,它就越能充实自己......通常在较低的抽象层次中。
还有一些编程领域,你不一定要工作,但它们涉及更多的数学。例如,虽然你可以学习一门语言并且在没有任何正式数学的情况下编写一些应用程序,但如果没有一些应用数学,你将无法在算法分析中取得很大的进展。
答案 3 :(得分:31)
好的,我是大学的数学和CS专业。我会说,如果集合A是数学而集合B是CS,则A与B相交。它不是子集。
毫无疑问,许多计算机科学的父亲和母亲都是像图灵和戴克斯特拉这样的数学家。大多数互联网创始人都是数学,物理或工程博士。计算机科学的大多数核心概念来自数学,但编程行为并非真正的数学。数学在日常生活中帮助我们,但两者并不相同。
但毫无疑问,计算机背后的原始推理是好的,计算的东西。我们在这么短的时间内走了很长的路。
答案 4 :(得分:30)
不提编程,但想法仍然相关。
答案 5 :(得分:23)
当人们不理解某些东西时,他们会尝试将其理解为一种他们理解的东西。他们以类比的方式思考。编程被描述为数学,工程,科学,艺术,工艺,建筑领域......这些都不是完全错误的;它借鉴了所有这些。真正的问题是编程领域只有50年左右的历史。人们还没有把它融入他们的心理分类学中。
答案 6 :(得分:19)
这里有很多混乱。
首先,“编程”(目前)并不等同于“计算机科学”。当Dijkstra称自己为“程序员”(或多或少发明了标题)时,他并没有抽出CRUD应用程序,而是实际应用计算机科学。让我们不要混淆我们 - 今天,商业环境中的大多数程序员与计算机科学之间存在巨大差异。
现在,可以说计算机科学是数学的一个分支;但是,正如Knuth所指出的那样(在他的计算机科学论文中收集的论文“计算机科学及其与数学的关系”),也可以说数学是计算机科学的一个分支。
事实上,我强烈推荐这篇论文给任何想到数学与计算机科学之间关系的人,因为Knuth很好地阐述了这个领域。
但是,回到你原来的问题:对于一个从业者来说,“企业/ OO发展”与数学相去甚远 - 但这主要是因为在较低层次的运作中涉及的大多数严肃的数学都被抽象了(通过编译器,操作系统,指令集等)。类似地,驾驶汽车不需要先进的内燃机物理知识。当然,如果你想设计一款更高效的汽车......
答案 7 :(得分:10)
如果您对数学的定义包括所有形式的形式逻辑,并且编程仅由代码中存在的逻辑和计算定义,则编程是数学QED的子集; - )
但这就像是说绘画只是在表面上涂上彩色颜料 - 它完全诠释了艺术,洞察力,直觉,整个创作过程
有人可能会说,音乐是数学的一个子集,同样的推理
所以我不得不说,编程不是数学的一个子集。编程使用数学的子集,但也需要非数学技能/才能[很像音乐作品]
答案 8 :(得分:6)
免责声明:我是一名IT顾问,主要开发门户和架构。我有心理学学位。我从未在大学学过数学。我完成了我的工作。而且通常都很好。为什么?因为我不认为你需要知道数学(如'重'数学的东西)来编写代码。您需要分析思维,解决问题的技能和高水平的抽象。但数学并没有给你这个。这只是另一门需要类似技能的学科。在处理可用性问题和数据存储时,我的心理学研究也适用于我的日常工作。语言学和符号学也发挥了作用。
但是等等,只是不要激怒我。我并不是说计算机根本不需要数学 - 显然,在设计加密算法和硬件等时你需要真正的数学技能 - 但是,如果像许多程序员一样,你只需要使用中/低级语言(像C)或更高级别的东西(比如C#或java),主要消耗预构建的框架和API,你真的不需要理解傅里叶变换或霍夫曼树或莫比斯条带背后的数学原理......让其他人处理那,让我在它上面建立价值。我不傻。我知道线性和指数算法和数据结构等之间的区别。我只是没有兴趣重写quicksort或一个漂亮的新视频压缩技术。
答案 9 :(得分:5)
嗯, 一边 来自所有......!
数学用于编程的许多方面,例如
答案 10 :(得分:4)
我们所做的每件事的基础都是数学。
幸运的是,我们不需要擅长数学本身。就像你不需要理解物理来驾驶汽车甚至飞机一样。
答案 11 :(得分:3)
编程与纯数学之间的区别在于国家的概念。
看看http://en.wikipedia.org/wiki/Dynamic_logic_(modal_logic)。这是一种数学分析随时间变化的事物的方式。此外,Hoare三元组是一种形式化程序输入输出行为的方法。通过使用一些公理来处理程序的顺序组合以及分配如何工作,你可以用数学上严格的方式很好地处理状态随时间的变化。
如果你知道的数学不够,可以“发明”一些新的数学来处理你想要分析的东西。 Newton和Leibniz做了分析(我认为是微积分)。没理由不去做计算和编程。
答案 12 :(得分:2)
我认为数学为程序员提供了一套工具,他们在抽象层面上使用它们 解决现实问题。
答案 13 :(得分:2)
您列出的主题是理论计算机科学的主题,而THAT是纯数学的一个分支。编程是一门运用理论计算机科学的应用科学。编程本身不是数学的一个分支,而是编程语言所基于的Lambda微积分/计算理论/形式逻辑/集合论等。
我也完全不同意Dijkstra。它要么是自我祝贺,要么是Dijkstra被错误引用/引用脱离背景。纯数学是一个非常非常困难的领域。这是非常抽象的,没有应用数学的分支在难度上具有可比性。这是一个需要巨大想象力的领域。我获得了计算机科学的第一个学位,我专注于理论CS和编程,操作系统,编译器等应用领域。我还获得了电气工程学位 - 可以说是最困难的工程学分支 - 并且在麦克斯韦方程,控制理论和偏微分方程等应用数学的困难领域工作过。 我也做了应用和纯数学的研究,直到今天我发现应用更容易。至于纯数学家,他们是一个完全不同的品种。
现在有人倾向于研究一年或两年的微积分学习,并得出结论纯粹的数学很容易。他们不知道他们在谈论什么。从应用程序中学习微积分甚至拓扑结构并不能让你对纯数学家所做的事情有所了解。实际证明这些定理的任务非常困难,我将推迟计算机科学家指出这种区别: “如果P = NP,那么世界将是一个与我们通常认为的完全不同的地方。在'创造性飞跃'中没有特殊价值,在解决问题和识别解决方案之后没有根本的差距。每个能够欣赏交响乐的人都会成为莫扎特;每个人都可以按照一步一步的论证来参加高斯......“ - 斯科特·亚伦森,(理论计算机科学家,麻省理工学院)
答案 14 :(得分:2)
编程可能最初是作为数学的准子集开始的,但随着时间的推移,该领域日益复杂,导致编程成为为信息处理和计算创建良好抽象的艺术和科学。
编程确实涉及数学,工程和美学意义,以实现良好的设计和实施。算法是数学的延伸,系统工程方面在某种程度上与其他工程学科重叠。然而,数学和其他工程领域对复杂,灵活且可理解的抽象都没有相同程度的需求,这些抽象可以在很多不同的层次上使用和调整,以解决新的和不断变化的问题。
需要有用,灵活和动态的抽象,这首先导致创建函数库,然后创建类/组件库,并在最近几年创建设计模式和面向服务的体系结构。虽然后者有更多的设计重点,但它们是对在编程问题和解决方案之间构建高级抽象桥梁的日益增长的需求的反应。
由于所有这些原因,编程既不是数学的子集,也不是数学的超集。它只是另一个使用数学的领域,它比其他领域具有更深的根源。
答案 15 :(得分:2)
你实际上可以说,逻辑证明形式的数学类似于编程 -
查看Curry-Howard correspondence。它可能更像是数学家看待事物的方式,但我认为这会让人头疼。
答案 16 :(得分:2)
数学+艺术+逻辑
答案 17 :(得分:2)
我会说...
这部分是数学,特别是在理论水平。想象一下设计高效的搜索/排序/聚类/分配/欺骗算法,这些都是数学运算......从数论到统计运行。
这部分是工程学的。复杂系统很少能达到理想的性能和可靠性水平,软件也不例外。许多软件开发都是为了在面对不可靠的硬件和(人类)时实现稳健性。
这部分是艺术。创造性和特殊的软件设计经常会提出很多新的想法......比如汇编语言,多任务操作系统,图形用户界面,动态语言和网络。
只是我的2¢......
答案 18 :(得分:2)
我不相信我听说编程是数学的一个子集。甚至你提供的链接也只是一种提议的编程方法(并不是说它是数学的一个子集),而且wiki页面也存在很多分歧。
编程需要(至少一些)应用数学。数学可用于帮助描述和分析程序和程序片段。编程与数学有着非常密切的关系,并且使用它和它的概念。但子集?号
我很想看到有人真的声称这是一个有明确推理的人。我认为我没有
仅仅因为你可以使用数学 推理某事没有 意味着事实上它是一个 数学对象。数学是 用来推理内部 内燃机,放射性衰变 和杂耍模式。运用 数学不是在做数学。
答案 19 :(得分:1)
作为一名数学家,我很清楚Math不等于编程,但用于解决这两种学科中的问题的过程非常相似。
解决更高层次的数学问题需要分析性思维,解决问题的可能方法的工具箱,对该领域的经验,以及构建答案的一些形式化方法,以便其他数学家同意。如果你找到一种特别聪明,抽象或优雅的方法来解决问题,那么你就可以从同行的数学家那里获得荣誉。对于特别困难的数学问题,您可以分阶段解决问题,并使用称为猜想和证明的东西来编写阶段参数。
我认为编程涉及相同的技能。在编程中,同一组原则适用于解决和呈现问题的解决方案。如果您对编程困境有部分解决方案,则将其作为个人库的一部分包含在内,并在以后将其作为另一个更大问题的一部分使用。这些技能似乎与数学中使用的技能非常相似。
数学和编程之间的主要区别在于后者在编程的不同学科之间有比“数学”更多的共同点。两个数学领域的表现形式可以非常非常不同,用于传达领域的东西也是如此。相比之下,至少在我看来,编程结构在许多不同的语言中看起来非常相似。
答案 20 :(得分:1)
编程是一个过于宽泛的主题。良好的软件不仅基于数学(逻辑),还基于心理学,语言学等。算法是数学的一部分,但除了算法之外还有许多其他与编程相关的东西。
答案 21 :(得分:1)
如果你只是想要老板发给你的设计规格,那么它的数学并不多,但这样的工作根本就不好玩......但是,提出如何做事确实需要数学思想,至少像抽象,图形,有时数字理论的东西,并根据问题,微积分。就个人而言,我更多地参与编程,更多的是我看到它的数学方面。但是,大多数时候IMO,你可以从图书馆拿起这本书,查看你需要做的事情的基础知识,但这需要一些数学上的掌握。
如果不理解背后的数学,你真的无法设计出“好”的算法。在谷歌搜索只能带你到目前为止。
答案 22 :(得分:1)
编程与纯数学之间的区别在于国家的概念。程序是使用逻辑(数学)在状态之间转换的状态机。用于在状态之间转换的实际逻辑通常非常简单,这就是为什么作为一个数学天才并不一定能帮助你作为程序员。
答案 23 :(得分:1)
我是程序员的部分原因是因为我不喜欢数学。我对数学本身没有任何问题,我在概念上很好,我只是不喜欢手工计算。当我发现我可以告诉计算机数学问题是什么并让它为我计算时,终生的激情和事业就诞生了。
要回答这个问题,根据我的母校,math ==编程,因为他们允许我参加C ++入门以满足我的数学要求。
编辑:我应该提到我的学位是电信,当时只有一个学期的标准文科数学要求。
答案 24 :(得分:1)
数学是最纯粹的真理形式。一切都源于数学。
阿门。
答案 25 :(得分:1)
我想说,编程不像以前那样是数学,因为我们升级到第四代语言。汇编非常关注数学,C#,而不是那么多。想法?
答案 26 :(得分:0)
将节目与音乐进行比较也很有趣。无论如何,在英国,有一些基于计算机的本科大学课程,由于所涉及的逻辑,模式等原因,将接受基于音乐资格认证的申请人。
答案 27 :(得分:0)
数学很强大,编程功能强大,如果数学是编程的一个子集,那么说编程是数学的一个子集同样正确。
使用语言描述数学,通常写下来。因此,数学也是写作的一个子集吗?
历史上的数学是在计算机编程之前出现的,但是数学之前的列表和过程可能同样被认为是数学或者编程。
可以使用数学来表示非常简单的编程,因此有一些基础可以确保编程是数学的子集。然而,计算机程序也可以实现数学,象征性地表示信息,正如数学通常在纸上完成时所做的那样,包括从基本公理中无限且仅在某种程度上定义,以及允许定义更高级别的结构,这些结构使用彼此和除了组合之外的其他各种关系,支持绘制图表并允许系统扩展。数学同样是编程的一个子集。
虽然数学可以表示单词等结构,但数学是设计数字的。例如,字符串比数学更具编程性。
答案 28 :(得分:-5)
这是半数学,半人说话,呃。