编程是math的一个子集?
我听过很多次,所有的编程都是math的一个子集。 有人认为面向对象的本质是基于math的,但除了一些明显的例子之外,我没有得到这种联系:
- 用归纳法来certificaterecursionalgorithm,
- forms正确性certificate,
- function语言,
- lambda微积分,
- 渐近复杂性,
- DFA,NFA,图灵机和一般的理论计算,
- 以及盒子上的所有东西都是二进制的。
我知道math对于编程非常重要,但是我正在为这个“子集”而努力。 用什么方法编程math的一个子集?
如果有足够强的联系,我正在寻找一个可能与企业/ OO开发相关的解释。
总体而言,请记住,math是逻辑的正式编纂,这也是我们在软件中所做的。
在你的问题主题列表加载math问题。 我们可以在相当高的抽象层次上进行编程,所以原始的math可能不会在你面前盯着你。 例如,你提到了DFA ..你可以在你的程序中使用一个正则expression式,而不需要知道任何math,但是当你想要devise一个好的正则expression式引擎时,你会发现更多的math需求。
我认为你有一个有趣的观点。 编程是一门艺术和一门科学。 有很多“交易工具”,你不一定坐下来做很多高水平的math,只是写一个程序。 事实上,当你编程的时候,许多人并没有真正在做math或计算机科学。
当我们开始解决计算机科学中的难题时,math就显现出来了。 你走得越深,它就会越充实,往往在较低的抽象层次。
也有一些编程领域,你不一定要工作,但他们涉及更多的math。 例如,虽然你当然可以学习一门语言,而不需要任何正式的math书写一些应用程序,但是如果没有一些应用math的话, algorithm分析就不会有太大的进展。
这是math,它需要对algorithm等进行抽象思考。
当涉及计划时间表,可交付成果,testing时,它就是工程。
当你不知道最后会如何发展的时候,这是艺术。
编程是应用math中最难的分支之一, 较贫穷的math家最好还是纯粹的math家。
– Dijkstra
好的,我是大学的math和CS专业。 我会说,如果集合A是math,集合B是CS,那么A与B相交。它不是一个子集。
毫无疑问,许多计算机科学的父亲和母亲都是像图灵和戴克斯特拉这样的math家。 互联网的大多数创始人都是math,物理或工程博士。 计算机科学的大多数核心概念都来自math,但编程行为并不是真正的math。 math在我们的日常生活中帮助我们,但是两者不一样。
但毫无疑问,计算机背后的原始推理是很好的,计算的东西。 在这么短的时间内,我们已经走过了很长一段路。
不提编程,但想法仍然相关。
爱因斯坦在1917年被认为是一位着名的math家。 直到广岛,广大公众才终于认识到物理学不仅仅是应用math。
当人们不理解某些东西时,他们试图把它理解为一种他们明白的东西。 他们用类比思考。 程序devise被描述为一门math,工程,科学,艺术,工艺,build筑等领域。这些都不是完全错误的。 它从所有这些借用。 真正的问题是编程领域只有50岁左右。 人们还没有把它整合到他们的心理分类学中。
这里有很多困惑。
首先,“编程”并不(现在)等于“计算机科学”。 当Dijkstra称自己为“程序员”(或多或less地发明了这个头衔)时,他并没有抽出CRUD应用程序,而是实际应用了计算机科学。 不要让我们感到困惑 – 今天,大多数商业环境中的程序员和计算机科学之间有着巨大的差异。
现在可以说,计算机科学是math的一个分支, 但是正如Knuth所指出的(在他的论文“计算机科学及其与math的关系”中,收录在他的计算机科学论文集中 ),也可以说math是计算机科学的一个分支。
事实上,我强烈推荐这篇文章给任何想到math与计算机科学之间关系的人,因为Knuth很好地devise了这个领域。
但是,回到你原来的问题:对一个从业者来说,“企业/ OO发展”离math还有很远的距离,但这主要是因为在较低级别的操作中涉及的大部分严重math已经被抽象出来了(编译器,操作系统,指令集等)。 同样,对于驾驶汽车不需要内燃机物理学的先进知识。 当然,如果你想devise一个更高效的汽车….
如果你的math定义包括所有forms的逻辑forms,而编程仅仅由代码中存在的逻辑和计算来定义,那么编程是mathQED的子集;-)
但这就好像说绘画只是在表面上涂上彩色的颜料 – 它完全不顾艺术,洞察力,直觉,整个创作过程
人们可以争辩说,音乐是由相同的推理math的一个子集
所以我不得不说,编程不是math的一个子集。 编程使用math的一个子集,但也需要非math技能/天赋[非常像音乐作曲]
免责声明:我作为IT顾问工作,主要开发门户网站和架构。 我有心理学学位。 我从未在大学学过math。 我完成了我的工作。 而且通常很好。 为什么? 因为我不认为你需要知道math(如在“重”math的东西)来编写代码。 你需要分析思考,解决问题的能力和高度的抽象。 但math不会给你的。 这只是另一个需要类似技能的学科。 在处理可用性问题和数据存储时,我的心理学研究也适用于我的日常工作。 语言学和符号学也起了一部分作用。
但是等等,不要火焰我。 我并不是说计算机上根本不需要math – 显然,在deviseencryptionalgorithm和硬件等时,您需要真正的math技能 – 但是,如果像很多程序员一样,只是使用中/低级语言(像C)或者更高层次的东西(比如C#或者java),主要使用预先构build的框架和API,你并不需要理解傅里叶变换或霍夫曼树或者Moebius条带背后的math原理……让其他人处理那么,让我在它上面build立价值。 我不傻。 我知道线性和指数algorithm和数据结构等等之间的区别。我只是没有兴趣重写quicksort或一个漂亮的新的video压缩技术。
那么, 除了这一切…!
math用于诸如编程的许多方面
- 创build高效和智能的algorithm
- 了解大O符号
- 安全性(如RSA)
- 还有更多…我认为编程需要math来生存。 但我不会把它称为一个子集。 这就像吹玻璃使用物理学的属性,但这些艺术家不称自己的物理学家。
我们所做的一切的基础是math。
幸运的是,我们不需要擅长math本身就可以做到这一点。 就像你不需要理解物理学驾驶汽车,甚至是飞机一样。
编程和纯math的区别在于国家的概念。
看看http://en.wikipedia.org/wiki/Dynamic_logic_(modal_logic); 。 这是一种math分析事物随时间变化的方式。 此外,Hoare三元组是forms化程序的input – 输出行为的一种方式。 通过一些公理处理程序的顺序组合和分配是如何工作的,你可以很好地处理状态随时间变化的严格的math方法。
如果你认识的math不够,“发明”一些新的math来处理你想要分析的东西。 牛顿和莱布尼茨做了分析(又名微积分,我认为)。 没有理由不做计算和编程。
我不相信我听说编程是math的一个子集。 即使你提供的链接只是一个build议的编程方法(不是声称它是math的一个子集),维基页面也有很多分歧。
编程需要(至less一些)应用math。 math可以用来帮助描述和分析程序和程序片段。 程序devise与math的关系非常密切,大量使用它和概念。 但子集? 没有。
我希望看到有人确实声称这是一个明确的推理。 我不认为我有
仅仅因为你可以用math来推理某个事物并不意味着它是一个math对象。 math被用来推理内燃机,放射性衰变和杂耍模式。 使用math不是在做math。
我会说…
这部分是math,特别是在理论层面。 想象一下,devise高效的search/sorting/聚类/分配/富裕algorithm,这是所有的math…运行从数论到统计的色域。
这是部分工程。 复杂的系统很less达到理想的性能和可靠性水平,软件也不例外。 很多软件开发都是为了在不可靠的硬件和(人气)的情况下实现稳健性。
这部分是艺术。 创意和独特的软件devise通常会有很好的新想法,比如汇编语言,多任务操作系统,graphics用户界面,dynamic语言和networking。
只是我的2¢…
math+艺术+逻辑
实际上,你可能会认为,逻辑certificateforms的math与编程相似,
看看咖喱霍华德的信件 。 这可能更像是一个math家看待事物的方式,但我认为这是头上的谚语。
我是程序员的部分原因是因为我不喜欢math。 我对math本身没有任何问题,从概念上来说我没有问题,我只是不喜欢手工计算。 当我发现我可以告诉一台电脑什么是math问题,让它为我做计算,一个终身的热情和事业诞生了。
回答这个问题,根据我的母校,math==编程,因为他们让我把介绍到C + +来满足我的math要求。
编辑:我应该提到我的学位是在电信方面,当时只有一个学期的标准文科math要求。
编程可能最初是作为math的一个准子集开始的,但随着时间的推移,这个领域日益复杂的性质导致编程成为为信息处理和计算创造良好抽象的艺术和科学。
编程确实涉及math,工程学和良好的devise和实现的审美意识。 algorithm是math的延伸,系统工程方面在一定程度上与其他工程学科重叠。 然而,无论是math还是其他工程领域,对复杂的,灵活的,可理解的抽象需求都没有相同的需求水平,可以在很多不同层次上使用和调整抽象以解决新的和不断发展的问题。
这就需要有用的,灵活的,dynamic的抽象,首先要创build函数库,然后是类/组件库,以及最近几年的devise模式和面向服务的体系结构。 虽然后者有更多的devise重点,但它们是对在编程问题和解决scheme之间build立高级抽象桥梁的需求日益增长的反应。
由于所有这些原因,编程既不是math的一个子集也不是一个超集。 这是另一个使用math的领域,比其他领域有更深的根源。
您列出的主题是理论计算机科学的主题,而这是纯math的一个分支。 编程是一门运用理论计算机科学的应用科学。 程序devise本身并不是math的一个分支,而是程序devise语言所基于的Lambda微积分/计算理论/forms逻辑/集合论等。
我也完全不同意Dijkstra。 这是要么自我祝贺,要么是迪克斯特拉被错误地引用/引用的背景。 纯math是一个非常非常困难的领域。 这是非常抽象的,没有任何应用math的分支难以比拟。 这是一个需要巨大想象力的领域。 我在计算机科学专业取得了第一学位,主要研究理论CS和应用领域,如编程,操作系统,编译器。 我还取得了电子工程学位 – 可以说是工程中最困难的一个分支 – 并且在一般应用math的困难领域,如麦克斯韦方程,控制理论和偏微分方程。 我也做了应用和纯math的研究,直到今天,我发现应用起来要容易得多。 至于纯粹的math家,他们是一个完全不同的品种。
现在有人倾向于学习一两年的微积分,并得出结论:纯math很容易。 他们不知道他们在说什么。 学习微积分,甚至拓扑结构都不会让你对纯math家有什么看法。 实际certificate这些定理的任务是非常困难的,所以我会按照计算机科学家的观点来指出这个区别:“如果P = NP,那么这个世界将会是一个与我们通常假定的完全不同的地方。在“创造性飞跃”中没有什么特别的价值,一旦find解决问题和认识解决之间没有根本的差距,那么每个能够欣赏交响乐的人都是莫扎特,每个可以循序渐进的论点的人都是高斯。 ..“ – 斯科特·阿伦森,(理论计算机科学家,麻省理工学院)
我认为math为程序员提供了一套工具,他们在抽象层面上使用它来解决现实世界的问题。
我想说的是,编程不如以前那样是math,因为随着我们迈向第四代语言。 大会非常关心math,C#不是那么多。 思考?
如果你只是想要你的老板给你的devise规范,那么这个math并不算很多,但是这样的工作根本就没有趣味性。然而,如何做事情需要math的思想,至less是事物像抽象概念,图表,有时是数论的东西,还有依赖于问题的微积分。 就个人而言,我参与编程的人越多,我越看到math的一面。 然而,大多数情况下,海事组织,你可以拿起图书馆的书,看看你需要做的事情的基本知识,但这需要一些math的前沿。
如果不理解背后的math,你实在无法devise出“好”的algorithm。 在谷歌search只有你到目前为止。
编程是一个太广泛的课题。 好的软件不仅基于math(逻辑),而且还基于心理学,语言学等。algorithm是math的一部分,但除了algorithm之外还有许多其他与编程有关的东西。
作为一名math家,我很清楚math不等于编程,但用于解决任何一个学科问题的过程是非常相似的。
解决更高层次的math问题需要分析性思维,解决问题的可能方法的工具箱,与该领域的经验,以及一些forms化的答案构build方法,以便其他math家同意。 如果你发现一个特别聪明,抽象或优雅的解决问题的方法,你会得到你的math家的荣誉。 对于特别困难的math问题,您可以分阶段解决问题,并使用称为猜测和certificate的东西来编写您的阶段论证。
我认为编程涉及同样的技能。 在编程方面,同样的一套原则适用于解决问题的解决scheme。 当你对编程困境有一个部分的解决scheme时,可以把它作为你的个人库的一部分,并在以后作为另一个更大的问题的一部分来使用它。 这些技能与math中使用的技能非常相似。
math和编程的主要区别是后者在编程的不同学科之间比math有更多共同之处。 两个领域的math在expression方面可以非常不同,用于沟通领域。 相比之下,对于我来说,编程结构至less在许多不同的语言中看起来非常相似。
编程和纯math的区别在于国家的概念。 程序是使用逻辑(math)在状态之间转换的状态机。 用于在状态之间转换的实际逻辑通常非常简单,这就是为什么math天才对于程序员来说并不一定能够帮到你。
我想math!=编程:P
math是真理的最纯粹的forms。 一切都从mathinheritance。
阿门。
编程与音乐比较也很有趣。 在英国,无论如何,还有计算机基础的本科大学课程,将接受申请人在音乐资格的基础上,由于所涉及的逻辑,模式等原因计算。
math是强大的,编程是强大的,如果math是编程的一个子集,那么同样正确地说,编程是math的一个子集。
math用语言来描述,通常写下来。 所以math也是写作的一个子集?
历史性的math在计算机编程之前就已经出现了,但是列表和过程可能在math之前,这两者可以同样被认为是math的或者是与编程有关的。
编程可以用math来表示,所以编程是math的一个子集有一定的基础。 然而,计算机程序也可以实现象征性地表示信息的math,因为math通常在纸上完成,包括无限且仅仅是有些定义的基本公理,并且允许定义更高层次的结构,以相互使用和其他种类的关系超越了构图,支持绘制图表并允许系统扩展。 math同样也是编程的一个子集。
虽然math可以代表结构,如单词,math是关于数字的devise。 例如,string比math更具编程性。
这是一半的数字,半人说话,呃。