您需要多少数学程序设计?

2020-12-26 18:44:09

每当我想学习算法时,在那里使用的数学似乎都是一个障碍。我承认我的数学不是那么好,但也没那么糟糕,但是这种“不错”的知识水平不足以在四大算法的算法水平,时间和时间上与四大公司进行面试。涉及的空间复杂性以及排序和搜索技术的比较。我需要学习所有这些知识,在搜索过程中,我遇到了几篇有关编程所需数学的文章。在编程方面,最知名的数学支持者是史蒂夫·耶格(Steve Yegge)。这是我在编程所需的数学上找到的内容:

史蒂文·诺布尔(Steven Noble)写了一篇文章,以回应埃文·米勒(Evan Miller)计算斐波纳契数的例子

如果您没有阅读以上所有内容,则可能会错过我的博客文章的意图。按照史蒂夫·萨米特(Steve Summit),埃里克·雷蒙德(Eric Raymond)和保罗·格雷厄姆(Paul Graham)的观点,您无需过多地关注数学就可以成为一名出色的程序员,黑客(维基百科的定义以及埃里克·雷蒙德(Eric Raymond)关于黑客的定义的文章)。史蒂芬·诺布尔(Steven Noble)说,您应该学习一点数学,而埃文·米勒(Evan Miller)似乎在某种程度上同意所有人。我本人只是出于对它的热爱而开始编程的。

自2009年以来,我主要使用C进行专业编程,有时使用C ++,几乎总是在Linux和UNIX上进行编程。我对编程的热情使我以多种不同的语言读写代码,因此我不得不学习不同的思维方式。编写代码很容易,按照范式的思路思考,在该范式的顶部建模特定的语言是一项艰巨,艰巨且非常耗时的任务。我所经历的是:计算机编程不是数学。我再说一遍,计算机编程不是数学,而且永远不会。您想学习计算机编程,然后学习计算机编程。不要翻阅数学书籍,不要阅读在特定新闻组(例如comp.lang.c,comp.lang.lisp)上写的任何内容。使用新闻阅读器(例如Pan):

阅读来自GNU的所有软件,并将Linux发行版专门用于日常任务(我更喜欢发行数量最少的二进制blob的发行版)。如果您想学习计算机编程而学习大量数学知识,那么您会感到困惑并朝错误的方向前进,并且不会学到太多编程知识。

作为计算机程序员,我们编写程序,但是为什么呢?我们编写程序来解决这个世界的问题。那就是计算机程序员所做的,他们解决问题。

现在,数学家是做什么的?他试图理解自然,并使用数学作为语言来做到这一点。数学帮助解决了这个世界上的许多问题。看看什么是量子物理学,物理学的一个分支实际上改变了我们几千年来对原子的假设,在很大程度上取决于数学。数学无处不在,从化学工业到社会问题,我们都使用统计学。占据日常生活的任何部分,您都会看到它对我的数学有多深的影响。数学不仅被用来理解自然,还被用来解决这个世界的问题。这是有原因的,所有这些属性都是Math固有的。

我不擅长数学,因此我试图用自己的直觉,常识,流程图和更多其他类型的图来解决作为程序员所面对的日常问题。这种情况持续了几年,我提出了一些规则和想法,并以此为基础建立了解决问题的模型。建立此模型的目的是:对问题和解决方案要非常清楚和简短。我正在创建一个模型,您将向该模型输入问题,并使用英语,流程图和我创建的许多其他类型的图作为输出来产生解决方案。该模型具有某些假设,规则和条件,这些假设同样非常明确。清晰和简单是当务之急。它是一种通用的抽象机制,可应用于问题以获取解决方案。几个月前,当我阅读了所有这些数学文章之后,我又遇到了Evan Miller的另一篇名为《不要杀死数学》的文章,该文章实际上是为回应布雷特·维克多的《杀死数学》而写的。

这两篇文章对我影响很大。首先,布雷特(Bret)尝试做几年以来我尝试做的同样的事情,尽管他在创作方面比我更成功。我永远想不出任何人都可以使用的可靠模型,而布雷特(Bret)已经做到了。是的,我很高兴是因为我找到了我想要的东西,并且准备跟随Bret的脚步,但是我从没有这样做。为什么?

有一个原因我永远无法提出一个实体模型。我一直以为它缺少什么。无论我做了什么以及我做了多少工作,我始终感到缺少一些非常基础和基本的东西。每当我研究Schrodinger方程,Maxwell方程,牛顿定律,开普勒定律,不确定性原理或Shulba-Sutras时,我总是感到所有这些方程都是完整的,但我的模型却并不完整。这两篇文章《杀死数学》和《不要杀死数学》都使我意识到了完整性。这是“不要杀死数学”中提到的数学属性。埃文(Evan)在本文中提出的问题以及他以非常简单和基本的细节进行解释的方式结束了我对模型的搜索。数学是解决问题和理解现象的简洁,简洁明了的方法。这些残酷的特征是数学固有的,就像灵魂是每个生物固有的一样。与不使用数学相比,使用数学可以以更短,更好的方式解决问题。

这使我想到一个非常基本的问题:为什么我讨厌数学?在学校和大学里,数学就是这样教我的。我被教导死记硬背,而不是真正的数学。这是学校的错,我们的教育系统的错,而不是学生的错。回到我们是否需要数学才能成为一名优秀的程序员这一主要问题,这就是世界如何在开始时解决其问题的方式:

埃文·米勒(Evan Miller)说,您可以在不使用大量数学的情况下成为一流的黑客,我认为他是对的,并且与所有其他作者一样。他强调的重点是数学在解决这个世界中的问题上的作用,即数学在解决现实世界中的问题上非常有效。作为程序员,我们可以解决问题,但是如果我们使用数学解决问题,然后将编程解决方案应用于解决方案的数学模型,那么我们可以通过一些惊人的方式来提供更好的解决方案,从而使我们作为程序员的生活更加轻松(副作用):

您不需要数学就可以成为一流的程序员,因为我们不会直接使用大量Math。如果您想成为程序员,请学习编程。计算机编程与数学有很大的不同,作为计算机程序员,您必须更多地专注于如何编写更好的程序,如何在特定的范式中思考(例如,函数,OO,泛型,过程,逻辑,声明性等),找到更好的方法。在创建软件的方式上,您需要了解设计模式,更不用说学习和使用C了几年,这将为您的思考增加新的维度。无论如何,所有这些都与数学无关。您需要先学习这些知识,并且要花几年的时间才能掌握它们,然后如果需要的话可以学习数学。阅读Roberrt J. Chassell的《使用Emacs Lisp进行编程简介》,了解如何解决创建可自定义,自记录,可扩展的实时显示文本编辑器的问题。阅读《 GNU Make手册》,了解为什么需要M4和Autoconf。

数学是理解自然和解决世界难题的最广泛使用的工具。通过学习数学方法,我们可以学习更多解决问题的方法。我本人已经开始研究概率,因为就像史蒂夫·叶格(Steve Yegge)所说的那样,一旦您了解了数学,就可以查看问题,看看它是概率问题,微积分问题还是统计问题等。对于软件,软件具有解决问题的自己的方法和工具,请牢记这一点。

版权所有©2014 Telangana海得拉巴Arnuld Uttre – 500017(INDIA)根据知识共享署名-NoDerivs 3.0许可获得许可(也称为CC BY-ND)