【问题标题】:Is mathematics necessary for programming? [closed]编程需要数学吗? [关闭]
【发布时间】:2012-05-28 21:48:27
【问题描述】:

在大学期间,我碰巧和一位朋友争论过,高级数学是否对任何资深程序员都是必要的。他曾经激烈地反对这一点。他说,程序员只需要高中或大学一年级数学的基本数学知识,不多不少,几乎所有的编程任务都可以完成,甚至不需要高级数学。然而,他认为算法是程序员的基础和必备资产。

我的立场是,所有计算机科学的进步都几乎完全依赖于数学的进步,因此,全面的数学知识将极大地帮助程序员处理现实世界中的挑战性问题。

我仍然无法确定论点的哪一方是正确的。您能根据自己的经验告诉我们您的立场吗?

【问题讨论】:

标签: math


【解决方案1】:

要回答您提出的问题,我不得不说:“不,编程不需要数学”。但是,正如其他人在此线程中所建议的那样,我相信理解数学与能够“以算法方式思考”之间存在相关性。也就是说,能够抽象地思考数量、过程、关系和证明。

我在大约 9 岁时开始编程,如果说我在那个阶段学到了很多数学知识,那将是言过其实了。但是,通过一些努力,我能够理解变量、for 循环、goto 语句(请原谅我,我是 Vic 20 BASIC 并且我还没有阅读任何 Dijkstra)和基本坐标几何,以便将图形放在屏幕上.

我最终完成了纯数学的荣誉学位,辅修了计算机科学。虽然我主要专注于分析,但我也学习了相当多的离散数学、数论、逻辑和可计算性理论。除了能够将统计学、概率论、向量分析和线性代数的一些想法应用于编程之外,我学习的数学很少直接适用于我本科期间的编程以及我之后从事的商业和研究编程。

但是,我坚信数学所要求的形式化思维方法——仔细推理、寻找反例、建立公理基础、发现概念之间的联系——在我处理大型和复杂的编程项目时提供了巨大的帮助。

考虑运动员为他们的运动训练的方式。例如,毫无疑问,足球运动员的大部分训练时间都花在了基本的足球技能上。然而,为了提高他们的整体健康,他们可能还会在健身房花时间骑自行车或划船机、做举重等。

学习数学可以比作举重训练或交叉训练,以提高您的心理力量和编程耐力。练习基本的编程技能是绝对必要的,但学习数学是一项令人难以置信的脑力锻炼,可以提高你的核心分析能力。

【讨论】:

  • 我想补充一点,数学不仅仅是锻炼你的精神力量的重量训练,而且还为新的问题和解决方案打开了大门。例如,在我的图像处理实习期间,如果不彻底了解 PDE,我就无法实现我们的去噪算法。生成的代码很简单,但非常精确。数学是我们到达那里的原因。更令人惊奇的是这些配方的美丽。一个小的 PDE 表达式可以转换为几页代码。没有最初的公式,很难看出你最终会如何得到它。
  • 数学对于编程来说不是需要,因为编程数学。它可能是好的数学,也可能是不好的数学(比如猩猩的长调用被音译为Ook language),但每当程序员设计某个对象模型时,ze(通常在不知不觉中)执行数学行为。所以,再一次,编程不需要阅读数学书籍,但这并没有改变编程就是数学这一事实,而且(正如欧几里德所说),没有通往它的王道。
【解决方案2】:

虽然编程可能不需要高等数学(除非您具有高等数学能力),但编程和数学的思维过程非常相似。您从已知事物的基础(公理,先前已证明的理论)开始,并尝试到达新的地方。您不能跳过步骤。如果您确实跳过了步骤,那么您需要填写空白。这是一个批判性的思维过程,使两者非常相似。

此外,数学家和程序员都在抽象中进行批判性思考。现实世界的事物由对象和变量表示。从具体到抽象的能力也将这两个领域联系起来。

很有可能,如果你擅长某一方面,那么你很可能擅长另一方面。

【讨论】:

  • 因此您可以说,经常玩填字游戏或玩拼字游戏的人比不玩拼字游戏的人更有可能擅长编程。这种关系似乎是关于可能性而不是严格的依赖关系。
  • 解决数学问题的严谨性和纪律性转化为编程。您需要具备解构问题的能力,并首先从明显的方向着手,然后从两个学科中更具创造性的方向着手。
  • 我非常钦佩的两位伟大的程序员没有学习计算机科学,而是被训练为数学家并改变了职业道路:Miguel de Icaza 和 Alexander Stepanov。顺便说一句,Stepanov 曾经说过,在研究数学时“你不是从公理开始的:你以公理结束”。 :D
  • @Liam - 这是关于短期内存中的模式匹配和杂耍。这两项活动都需要这些技能。
  • +1 表示“如果你擅长其中一项,那么你很有可能擅长另一项。”
【解决方案3】:

计算机科学!= 编程

好吧,说真的,我认识英语和心理学专业的好程序员和坏程序员,还有一些计算机科学专业的程序员。作为开发人员,我钦佩的一些非常有名的人没有 CS 背景。例如,Larry Wall(Perl) 是一位语言学家。 另一方面,它有助于了解您正在处理的领域,因为这样您至少可以查看您的数据是否有意义并帮助您的客户/用户深入了解他们真正想要的内容。 是的,存在计算复杂性、高效数据结构和程序正确性的问题。这是你在计算机科学中学到的东西,对几乎任何领域都有用,但这既不是必要的,也不是充分的。

【讨论】:

  • 我认为我听过的最好的报价是“计算机科学与计算机无关,正如天文学与望远镜有关。”(Dijkstra)
  • 我认为 stackoverflow.com 的创建基本上是为了克服这种单行类型的答案,但有 15 位志同道合的人将这个无用的答案提升到了顶峰。我与您没有任何私人关系,但是我已将您的回答标记为“冒犯性”。至少对我来说是这样。
  • @simsim:我觉得人们认为 CS 学位与编程有关,这很冒犯。
  • @simsim:Joel 和 Jeff 在创建这个网站时的想法并不重要。这一切都是为了创建一个程序员互相帮助的社区。我认为大卫的简短回答是正确的。 +1
  • @Scottie:如果只是“创建一个程序员互相帮助的社区”,那么论坛和邮件列表就足够了。也许我的回答有点苛刻,但令人惊讶的是,在编辑之前,有 15 位用户投票支持一个完全毫无头绪的“答案”。 :-)
【解决方案4】:

我想我会成为第一个说你确实需要数学的人。正如其他人所说,数学对于发展的某些方面并不是那么重要,但批判性思维和结构化分析的基础非常重要。

更重要的是,数学对于理解调度程序、优化、排序、协议管理和计算机的许多其他方面等许多基础知识非常重要。虽然计算级别涉及的数学并不复杂(主要是高中代数),但理论和应用可能相当复杂,因为通过微积分对数学有扎实的理解将大有裨益。

没有它你能过得去吗,当然,你不应该让不那么透彻的数学知识阻碍你,但如果你有机会,或者我愿意尽可能多地学习数学,微积分,数字理论、线性代数、组合学、实际应用,在广泛的计算机科学中都有实际应用和理论应用。

我认识的一些人在两面都非常成功(那些对数学没有特别关注的人,以及那些上过物理或数学学校的人),但在这两组人中,他们都喜欢数值问题和学习算法和数学理论。

【讨论】:

  • 我同意这一点。虽然没有它也能过得去——一个人会后悔他/她的决定吗?如果您希望获得一份令人兴奋/具有挑战性的工作,那么您获得的那些数学技能肯定会对您有所帮助。
  • 很公平! GrayWizardx 等:作为自学者,你在阅读材料方面有什么建议?当我年轻的时候,我被教给我数学的糟糕透顶的方式让我非常反感。我不想把责任归咎于其他地方,但数学被恶毒地呈现了。现在是赎回的时候了。自己学习这里概述的数学(微积分、线性代数、离散数学等)有多容易?是否有针对这种方法推荐的特定教科书?大学学位不再是一种选择!
  • @Emmel,我实际上在 Barnes and Noble 看到了“数学漫画指南”和“微积分漫画指南”,我知道我看过“线性白痴完整指南”代数”前几天。至于实际资源,曾经有一些很棒的数学网站(针对学生等),但我不确定其中还有多少。我每隔一段时间做的一件事就是去一所社区大学并“审核”数学课(将其视为通过/失败),然后复习一下。 5-6 年没做过了,但上次还是很有帮助的。
【解决方案5】:

我有数学学位,但我不记得在我的职业生涯中有一次要求数学。它在训练我的逻辑思维方面很有用,但我没有使用流体动力学、量子理论或马尔可夫链编写任何代码。 (我怀疑最后一个是最有可能出现的。)

大多数业务线开发人员大部分时间都不需要高级数学。有时了解三角函数会有所帮助,当然能够理解足够的数学来实现数学描述的算法可能很重要——但除此之外呢?不。

不要忘记,大多数程序员并不是在推进计算机科学——他们是在构建应用程序。我不需要了解先进的工程技术来驾驶现代汽车,尽管几乎可以肯定这辆车已经通过先进的工程技术得到了改进。

【讨论】:

  • 我同意你所说的大部分内容,但是,难道不能说通过理解常见的数学原理,编程的许多方面都可以明显地变得容易吗?有时,某事物的公式比达到相同值的算法更容易编程......只要你知道那个公式
  • @balabaster:有时——但我想说这种情况并不经常发生。同样,您实际上并不需要事先知道公式即可使用它。在数学方面有能力很好,所以当你看到公式时你可以理解它们,但你很少需要学位级别的数学本身 IMO。
  • 数学学位?然后你知道这不仅仅是数字。我有两个数学学位,并且经常使用这些内容:用于分析/简化逻辑的布尔代数、用于 DSL 构造的自动机/语言理论、用于大 O 性能分析的代数等。
【解决方案6】:

我认为拥有高级逻辑(离散)数学真的很有帮助。这与集合论一起。在处理常见的计算机程序时,这些学科可以提供很大帮助。然而,我在大学里学的很多其他数学都是微积分,据我所知,它的用途非常有限。由于 90%(或类似的)编程都是用非常简单的数学来开发商业应用程序,我想说的是,在大多数情况下,你只需很少的数学知识就可以过关。但是,对布尔代数、逻辑、离散数学和集合论有很好的理解确实可以让你更上一层楼。

【讨论】:

    【解决方案7】:

    我会在这里反其道而行之,说“是”

    我从土木工程转向编程(混凝土糟透了!)。我的数学背景包括通常的第一年的东西、第二年和第三年的微积分(Diff EQ、体积积分、级数、傅里叶和拉普拉斯变换)和数值分析课程。

    我发现我的数学在计算机编程方面非常欠缺。我缺少离散数学和逻辑的整个领域,我只能依靠大量的教科书库、维基百科和 Wolfram 来生存。大多数高级算法都基于高级数学,如果不进行广泛的研究,我无法开发高级算法(基本上相当于半个课程的工作量。)我当然无法想出新算法,因为我只是不没有像巨人肩膀那样站立的数学基础。

    【讨论】:

    • 一个普通程序员真正编写了多少基本算法?我猜 80% 的编程工作不涉及基本代数以外的数学。
    • @dbkk:普通程序员最常见的任务是对象模型的设计,即某个领域的“业务逻辑”。而这样的过程只不过是数学,尽管它通常不会被执行任务的人所反映。
    【解决方案8】:

    这取决于你在做什么。如果您进行大量 3D 编程,那么 3D 几何知识当然是必要的,您不同意吗? ;-) 如果您想创建新的图像格式(如 JPG)或新的音频格式(如 MP3),如果您无法理解余弦或傅立叶变换,您也会很迷茫,因为这些是大多数有损压缩所基于的基础.如果您对自己的数学非常了解,则可以更好地解决许多其他问题。

    还有很多其他的编程任务你会发现不需要太多的数学运算。

    【讨论】:

      【解决方案9】:

      如果你觉得这个主题足够吸引人,可以发布这篇文章,那就继续学习吧。剩下的就自然而然了。

      【讨论】:

        【解决方案10】:

        是的,不需要高等数学——如果你是商业编程——现成的软件。

        但是,在处理诸如此类的核心问题时:

        • 计算要控制的轨迹 一个机器人
        • 创建类似 AI 的应用程序 支持不确定性和自动 推理
        • 玩 3-D 运动和图形

        一些高等数学知识可能会派上用场。并且这不像它们是“超出这个世界”的问题。

        我必须创建一个软件来尝试“预测”办公室所需的纸张数量(而只是找出近似值的最佳方法是地狱)。

        不过你必须小心,因为在使用高级的东西时很容易迷路——我的一个朋友为了正确显示它而求助于使用图灵来存储动态菜单的状态——嗯。 ..也许他的想象太过分了。

        【讨论】:

        • 您可以添加压缩文件或编辑 MP3 文件或任何需要实际了解计算机在做什么的内容,而不仅仅是将网站放在一起。
        • 他是如何使用图灵做到这一点的?显灵板或降神会?
        【解决方案11】:

        什么类型的编程?

        根据我的商业经验,我不需要高等数学,但这在很大程度上取决于您所在的领域。

        计算机图形学需要大量的高等数学知识。很多学术计算机编程都需要高等数学。

        也就是说,擅长数学的人和擅长编程的人之间往往存在相关性。

        我希望这个空洞的答案会有所帮助。

        【讨论】:

          【解决方案12】:

          某些领域的开发人员需要数学,但在其他领域几乎没有用处。

          如果您是一名游戏开发人员并且必须经常使用物理,那么理解数学至关重要。如果您正在使用高级视觉控件 - 如果没有几何图形,您将无能为力。如果您打算进行一些财务计算 - 掌握扎实的统计知识会非常有帮助。

          另一方面,在过去的 5 年里,我只有 2 或 3 个项目需要任何数量的数学。其中只有 1 次 Google 搜索没有帮助。

          在一天结束时,甚至财务计算也经常是您的客户为您做的事情,并为您提供要实施的公式。

          因此,如果您从事“应用软件”业务,您可能永远不会使用您的数学学位。如果你在学术软件领域,数学是至关重要的。

          【讨论】:

          • 对于“游戏开发者”,我会添加“模拟开发者”。我记得在 93 年的时候,我开车跑遍全城,试图找到一本足够先进的数学书来解释四元数是如何对我起作用的,这样我就可以正确地编写一个死去的 recokining 算法。感谢上帝今天的互联网!
          【解决方案13】:

          我同意克里斯的观点。我也会说“是”。但这取决于您的市场,如上所述。如果您只是创建一些基本的“现成”应用程序或编写工具来帮助您的日常工作......那么数学就没有那么重要了。

          设计定制软件解决方案需要大量的问题解决和批判性思维。当存在数学背景时,最肯定会增强的技能。我的计算机工程学位辅修了数学,我将我所有以数学为导向的背景归功于我今天的成就。

          那是我的 2 美分,从上面的阅读中我可以看出很多人不会同意。我鼓励所有人考虑一下,我并不是说没有数学背景就不能拥有这些技能,我只是说这些技能是拥有这种背景的副作用,可以对软件产生积极影响。

          【讨论】:

            【解决方案14】:

            根据我的经验,编程需要数学,你无法摆脱它。整个编程都是基于数学的。

            问题不是黑白,而是更加丰富多彩。问题不是你是否需要数学,而是需要多少。更高水平的数学将为您提供更多工具,并为您打开不同的思路。

            例如,如果您只知道加法和减法,您就可以编程。当需要乘法时,您将不得不执行很多加法。乘法简化了重复的加法。代数允许人们在将数学应用到程序中之前对其进行简化。线性代数提供了转换图像的工具。布尔代数提供了减少所有这些 if 语句的机制。

            不要忘记数学、逻辑和哲学的兄弟姐妹。 Logic 将帮助您有效地使用caseswitch 语句。哲学将帮助您了解编写您正在修改的代码的人的想法。

            是的,你不需要太多的数学来编写程序。有些程序可能比其他程序需要更多的数学。与那些了解较少的人相比,更多的数学知识会让你更有优势。在这个时代,人们需要他们可以获得的一切优势来获得这些工作。

            【讨论】:

              【解决方案15】:

              我从事专业编程已有 8 年了,从 12 岁开始,我就将其作为一种爱好。

              数学不是必需的,逻辑才是。数学非常有用,说没有必要就像说杀人不需要枪,你可以用刀。嗯,这是真的,但是那把枪让它变得容易多了。

              有几个最基本的要求,您应该已经满足了。您需要了解基本的代数表达式和符号,以及常见的计算机等价物。例如,你需要知道指数是什么(3到3位是27),常见的计算机表达式是3^3。代数的通用符号在语言之间确实会发生变化,但其中许多都使用某种统一的方法。其他人(看着你的 LISP)没有。您还需要知道操作的顺序。

              您需要了解算法思想。首先这个,然后这个,产生这个计算中使用的。有可能你明白这一点,或者你不明白,如果你不明白,这是一个相当困难的障碍;我发现这是你“得到”的东西,而不是你可以学到的东西。相反,有些人不会“得到”艺术。他们不应该成为画家。此外,CS 课程中的一些学生无法弄清楚为什么这不起作用: x = z + w; z = 3; y = 5; 不是他们不懂加法,而是他们没有掌握明确表达的要求。如果他们理解它,计算机也应该理解它,对吗?如果你看不出上面三行有什么问题,那就不要成为程序员。

              最后,您需要了解您的编程领域中的数学。会计软件可以停留在基本代数上。如果您正在编程物理,则需要了解物理(粗略)和 3 维几何(欧几里得)中的数学。如果您正在编写架构软件,则需要了解三角学。

              这比数学更进一步;无论您要编程的领域是什么,您都需要充分了解基础知识。如果您是编程语言分析软件,您需要了解概率、统计、语法理论(多语言)等。

              通常,某些领域需要或可以受益于您认为无关的知识。例如,如果您正在编写音频软件,您实际上需要了解三角函数来处理波形。

              大小也会改变事物。如果您正在对包含 1000 个项目的财务数据集进行排序,这没什么大不了的。但是,如果是 1000 万条记录,您将从实际了解向量数学并深入了解二进制级别的排序(系统如何按字母顺序排序?它如何知道 'a' 小于 'b '?)

              您会发现,作为一名程序员,您的一般知识库将会爆炸式增长,因为每个项目都需要在直接的编程领域之外进行更多的学习。如果您对自学过于敏感或懒惰,并且不喜欢每周花费 10 多个小时做基本“家庭作业”的想法,请不要成为程序员。

              如果你喜欢思维练习,如果你喜欢学习,如果你可以在没有计算器的情况下思考抽象的事物,或者没有素描板的设计,如果你对生活和爱好有广泛的品味,如果你自我批评并且能够扔掉“喜欢”的想法,如果你喜欢完善事物,那就成为一名程序员。不要将这个决定建立在数学上,而是建立在逻辑思考和学习的能力上。这些才是重要的;数学只是副产品。

              【讨论】:

                【解决方案16】:

                当然,这取决于你想成为什么样的程序员,或者更好的是你的雇主希望你成为什么样的程序员。我认为微积分和代数是必不可少的,统计和线性规划确实是您公文包中的好工具,也许分析(导数,积分,函数......)可以不用。但是,如果您想深入了解事物是如何工作的(例如电子学或一些重要的算法),那么您最好不要缺少“高级”数学。

                【讨论】:

                  【解决方案17】:

                  我完成的大部分编程都涉及用于研究的物理模拟,包括电磁学、量子力学和结构力学等。由于问题领域有与之相关的高等数学,如果不使用高等数学,我将很难解决它们。

                  所以你的问题的答案是 - 这取决于你想要做什么。

                  【讨论】:

                    【解决方案18】:

                    如果您要编写一门新的编程语言,高级数学知识至关重要。或者您需要编写自己的算法。

                    但是,对于大多数日常编程——从网站到保险处理应用程序——只有基本的数学是必要的

                    【讨论】:

                      【解决方案19】:

                      具有扎实数学(不仅仅是算术)或逻辑背景的人将很好地应对算法、变量使用、条件推理和数据结构。

                      • 不是每个人都可以设计 UI。
                      • 不是每个人都能编写高效的代码。
                      • 不是每个人都能清楚地评论和记录。
                      • 不是每个人都能做好算法

                      数学会帮助你达到一个点,但只能达到一个点。

                      【讨论】:

                        【解决方案20】:

                        我不认为高级数学知识是优秀程序员的必要条件,但根据个人经验,我认为对高级数学掌握得更好的程序员也会成为更好的程序员。这可能仅仅是因为他们有更合乎逻辑的思维,或者因为他们解决数学问题的经验更合乎逻辑。

                        【讨论】:

                          【解决方案21】:

                          数学的基本概念是遵循、设计、理解、实施和使用算法。如果你不能做数学,那是因为你不能做这些事情,如果你不能做这些事情,那么你就不能成为一个有效的程序员。

                          常见的编程任务可能不需要任何特定的数学知识(例如,您可能不需要矢量代数和微积分,除非您正在执行诸如 3D 图形或物理模拟之类的任务),但基本技能是相同的,并且一个领域的能力缺失将与另一个领域的相应能力缺失相匹配。

                          【讨论】:

                            【解决方案22】:

                            Math 是一个用于创建程序的工具箱。我推荐 Cormen's Introduction to Algorithms。它涉及更多“数学”的东西。

                            - Greatest lowest limit (managing resources) 
                            - Random variables (game programming)
                            - Topological sort (adjusting spreadsheets)
                            - Matrix operations (3d graphics)
                            - Number theory (encryption)
                            - Fast fourier transforms (networks)
                            

                            【讨论】:

                              【解决方案23】:

                              我不认为高等数学是成为一名优秀程序员的必要条件 - 一如既往,这取决于您编写的代码。

                              当然,如果您从事 3D 图形编程,您将需要矩阵之类的东西。作为商业软件的作者,您可能需要统计数学。

                              但是,作为一名近 10 年的专业程序员(以及另外 10 年的业余爱好者)“高等数学”并不是我经常需要的。在大约 99.8% 的情况下,它只是一些智能组合中的加、减、除和乘法 - 在大多数情况下,它与算法有关,而不是数学。

                              【讨论】:

                                【解决方案24】:

                                对于大多数程序员来说,学习高等数学很重要,因为它会让你的大脑产生逻辑思维,逐步从一件事到另一件事。

                                不过,很少有编程工作需要高中数学以上的知识。我曾经使用过线性代数。我从来没有用过微积分。我每天都在使用代数。

                                【讨论】:

                                  【解决方案25】:

                                  数学知识通常对程序员很有用,图形设计技能、解谜能力、职业道德以及许多其他技能和特质也是如此。很少有程序员擅长程序员可能擅长的一切。我不同意“你不是真正的程序员,除非你可以{在此处插入最喜欢的编程能力}”形式的任何陈述。

                                  但我会警惕不会做数学的程序员。比不会画画的人更是如此。

                                  【讨论】:

                                    【解决方案26】:

                                    我认为这真的取决于你想要做什么,但恕我直言,CS 和操作系统理论在这里比数学更重要,你真的只需要它们所涉及的数学。

                                    例如,在现代操作系统中的许多调度程序背后,有很多调度理论和优化的 CS 背景。这是一个需要一些数学运算的例子,虽然不是很复杂。

                                    但老实说,对于大多数东西,你不需要数学。您需要的是学习以 2 和 16 为基础的思考能力,例如心理 OR/AND 的能力。例如,如果您有一个字节,并且在该字节内有两个 3 位字段和 2 个浪费位,那么当字节值类似于 11 时,知道哪些位在哪些字段中处于活动状态将使事情变得比必须使用稍快一些笔和纸。

                                    【讨论】:

                                    • 你学过排队论吗?您是否研究过内存管理器和使开发人员选择其中一种的统计模型?我不一定不同意您的回答首当其冲,但您过于简单化了。
                                    • @San:我确信我过于简单化了,但我认为大多数系统开发人员从不需要在这个级别了解这些事情。在我的前两个学位中,我在基础水平上学习了它,在我的博士期间稍微深入了一些,但这从来都不是我的强项,我更愿意把它留给专家。我认识的操作系统人员的数学技能让我大吃一惊。
                                    • 我认为这是非常有效的。我认为有必要将系统编程与操作系统编程区分开来。紧密编织的概念,但仍然不同。
                                    【解决方案27】:

                                    我大约在进入代数预科课程的同时开始编程。所以我不会说数学就是那么重要,尽管它可以帮助某些类型的编程,尤其是函数式编程。

                                    我还没有学过离散数学,但是我看到了很多关于编程的理论知识,这些东西都是用本课程教授的数学符号编写的。

                                    此外,请确保您知道如何计算任何底数,尤其是底数 2、8 和 16。

                                    此外,真正让我了解一些概念的课程是预编程课程。我们学会了联合、交叉和所有快乐的东西,它几乎完全平行于按位数学。我们非常深入地介绍了布尔逻辑。我认为最有用的是我们学会了如何减少复杂的布尔语句。这非常方便:

                                    (x|y) & (x|z) & (x|foo)
                                    

                                    可以简化为

                                    x | (y & z & foo)
                                    

                                    这是我以前不太了解的。

                                    【讨论】:

                                      【解决方案28】:

                                      好吧,您产生了许多响应,不,我没有全部阅读。我在这个中间,不,你当然不需要数学才能成为一名程序员。 linux 中的汇编程序与设备驱动程序并不比另一个复杂,也不需要数学。

                                      无论如何,您都不需要为此参加或通过数学课。

                                      我同意编程的问题解决思维方式与数学解决方案的思维方式非常相似,因此数学可能很容易。或者相反,如果数学很难,那么编程可能会很困难。不需要课程或学位或任何纸张或奖杯,当然可以去学习东西。

                                      现在,如果您无法在头脑中、在纸上或使用计算器快速将十六进制转换为二进制再转换为十进制,那么您将会遇到困难。如果您想进入网络和其他涉及时序的事情,内核驱动程序通常会但不必这样做。你会挣扎的。我知道一长串拥有数学学位和/或计算机科学和/或工程学位的人在速率计算、每秒位数、每秒字节数、做某事需要多少内存等方面遇到困难。在某种程度上,它可能被认为是一些人拥有和其他人必须努力实现的某种诀窍。

                                      我的底线是我相信意志力,如果你想学习这些东西,你可以并且愿意,就这么简单。您不需要上课或花很多钱,例如 linux 和 qemu 可以让您忙碌很长一段时间,不同的 asm 语言等 内核开发、嵌入式等的易崩溃环境。您不仅限于此,但我不相信如果你不想,你就必须逃跑并参加任何课程。如果你想肯定会参加一些ee课程,一些cs课程和一些数学课程..

                                      【讨论】:

                                      • 这不是火焰诱饵,而是现实。从编程的角度来看,您需要了解的有关数字电子和软件工程的所有信息都可以总结出来。 0, 1, and, or, not.这五件事是数字电子产品和所有程序的运作方式。你可以用一大盒快速的 nand 门构建任何东西。
                                      【解决方案29】:

                                      你需要数学。编程只不过是数学。理论物理学的任何发现都不会成为实际(适用)的含义,除非它们用数学解决方案来解释。如果不能在计算机上解释,尤其是在编程语言上,这些都无法通过计算解决。因此,不同的语言旨在解决特定的问题。但是对于通用和广泛传播的编程语言,如 java、c、c++,我们的许多编程任务涉及重复(连续)解决相同问题,如从数据库、文本文件中提取值、将它们放在 Windows(桌面、Web)上、操作相同的值,有时从类似的设备访问一些数据(但给定不同的品牌名称,不同的端口和令人头疼的问题)等,不涉及单一方法,代数(计数器,一些逻辑),几何(图形)等。所以它取决于您要解决的问题。

                                      【讨论】:

                                        【解决方案30】:

                                        IMO,您可能需要具备数学能力,但不一定具备该领域的很多知识。所以你需要擅长数学的东西和你需要擅长编程的东西是相似的。

                                        但总的来说,我不记得上次在日常编程中使用任何高级数学是什么时候了,所以没有。

                                        【讨论】:

                                          猜你喜欢
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 2015-01-18
                                          • 2013-01-10
                                          • 2021-02-17
                                          • 1970-01-01
                                          • 2020-12-12
                                          相关资源
                                          最近更新 更多