【问题标题】:How to improve my math skills to become a better programmer [closed]如何提高我的数学技能以成为更好的程序员 [关闭]
【发布时间】:2010-10-26 03:45:08
【问题描述】:

尽管我认为自己是 CompSci 课程中最优秀的程序员之一,但我对真正擅长数学的人着迷。我不得不说,每当我有数学类型的作业或考试时,我的方法都是非常公式化的,即如果我遇到一个看起来像 A 的问题,我必须使用方法 B,结果应该看起来像 C,否则我犯了错误。我只知道如何解决我修改的问题。

今年夏天我真的很想花一些时间来更好地理解数学问题及其解决方案,以便更深入地研究算法和计算复杂性领域。

有什么建议吗?

【问题讨论】:

    标签: math


    【解决方案1】:

    我认为这取决于。我喜欢阅读的一本书——从数学回顾开始——是 Matt Buckland 的Programming Game AI by Example

    一个快速的谷歌产生了this book,但这又取决于你正在做什么或计划做什么。

    我个人认为,对物理和代数数学有很好的理解是不会出错的。

    【讨论】:

      【解决方案2】:
      1. 练习练习练习
      2. 使用大多数大学普遍提供的辅导服务(这通常是免费的,使用您的学费付费)。

      【讨论】:

        【解决方案3】:

        听起来你有不错的数学技能——你了解机械原理,也许还有一点你所学知识背后的直觉——但是你在解决问题的能力方面有点欠缺,尤其是你说“我只知道如何解决我[以前遇到的]问题”。

        要解决这个问题,我会查看Project Euler。解决这些问题肯定没有规定的方法,它们通常需要综合多个知识领域才能成功解决每个领域。你会得到你的蛋糕并吃掉它——成为一个更好的程序员/数学家一个更好的一般问题解决者,通过了解如何使许多事情来解决一个特定的问题。您将更深入地了解看似完全不同的事物如何真正融合成一个统一的整体。 (许多数学领域尤其如此。)

        最后,感谢您渴望成为更好的手艺实践者!如果每个人都表现出同样的雄心壮志,我​​不禁认为软件总体上会好很多。

        【讨论】:

        • +1 表示 ProjectEuler 链接。我一直在寻找这样的东西。
        【解决方案4】:

        让我想起了研究生时代。我很快了解到,提出数学问题并找到数值或蒙特卡罗解决方案比分析解决问题更容易(即没有计算机的数学教授在黑板上的方式)。这适用于数值问题,通常不会帮助你通过数理经济学考试。

        在计算机上进行数学运算的另一种方法是使用 Mathematica 或类似工具,但这会使许多数学问题如此容易解决,您实际上并没有学到任何东西。手工集成任意复杂的功能是火箭科学。在 Mathematica 中集成任意函数(分析!)并不比使用 calc.exe 更困难

        我建议重新发明轮子并使用您选择的大括号语言编写一个开源、自包含的库,以针对您最喜欢的应用数学分支,无论是素数还是线性编程。数学 API 库以极难编写的黑匣子而闻名,这种黑匣子无人能再触碰。一个例子是 Excel 中的统计插件,它看起来几十年来没有任何人改进过。写过数学库的人会学到很多东西。

        【讨论】:

          【解决方案5】:

          如果你想了解软件,学习category theory

          【讨论】:

            【解决方案6】:

            我会选择这些字段:

            离散数学、线性代数、 组合学、概率和 统计学、图论、数理逻辑。

            这将使您掌握 CS 的大多数领域。如果你想进入特殊领域,你必须深入一些领域,特别是:

            Computer graphics -> Linear Algebra
            Gaming -> Linear Algebra, Physics
            Computer Linguistics -> Statistics, Graph Theory
            AI -> Statistics, Stochastics, Logic, Graph Theory
            

            您当然会找到这些条目:blogs to freshen up my math in practicemath programming and learning。他们会有一些建议。

            除此之外,还可以为自己准备一些关于线性代数和逻辑的基础书籍。 Sedgewick 有一些关于基本数学概念的算法的好书。 John Vince 在match concepts for computer graphics 上有一个。

            【讨论】:

              【解决方案7】:

              转到 www.projecteuler.net 网站。 你会发现具有挑战性的问题。尝试解决它们,总有一天你会为自己感到骄傲。 祝你好运

              【讨论】:

                【解决方案8】:

                最终,您需要“花一些时间在马鞍上”,挑选一些感兴趣的东西,然后学习如何使用它。我对游戏编程数学很感兴趣,并拿起了关于这个主题的 New Riders 书——现在不记得名字了。它有概念和练习,随着我的进步,我觉得我不仅理解了概念和理论,还理解了如何将其付诸实践。

                您可以查看其中一些相关问题。那里有一些很好的答案。它们可能并不都适用于您的情况,但有些适用。

                How can I learn the math necessary for working with computer vision?

                How to learn mathematical notation?

                https://stackoverflow.com/questions/651865/basic-math-book-for-a-programmer

                Learning Applied Statistics with a focus on R

                https://stackoverflow.com/questions/568899/user-friendly-math-textbooks

                https://stackoverflow.com/questions/509488/recommendations-for-discrete-math-resources

                https://stackoverflow.com/questions/488502/best-language-to-program-some-math-free-fast-easy-cool-etc

                Learning game programming (part 2) (math)

                Math Resources for C/C++ Programmers

                https://stackoverflow.com/questions/420500/helpful-math-classes-for-programmers

                Math, programming, and learning

                【讨论】:

                  【解决方案9】:

                  实施。很多。

                  微积分和线性代数是一个不好的方法。数值方法会对你有所帮助(它们是为了在计算机中实现的),因为如果你能实现它们,你就可以通过一些努力来实现任何与数学相关的东西。

                  以下是我建议您开始寻找的一些主题。我已经实现了至少一种,它们不仅帮助我理解了数学,还帮助我理解了如何实际编写一些困难的数学问题。

                  寻根。 解决线性系统和其他矩阵操作(如 LU 分解和有效的行列式算法)。求解非线性系统。 最小二乘法(连续和离散)。 插值(主要是拉格朗日多项式,以及简单的矩阵插值。) 数值积分(我认为这是最简单的...... Newton-Cotes、Chebyshev-Gauss、Gauss-Laguerre 等) 数值常微分方程(RungeKutta 和多步法)

                  现在,一些非数字科目:

                  运筹学/线性规划/优化:从带矩阵表示法的 Simplex 开始(我个人称之为 Complex),然后尝试 BranchAndBound 并自己冒险进入动态规划..

                  数论有一些有趣的应用,特别是安全和密码学

                  自己实现一个 Vector3D 类。

                  此外,享受图表的乐趣,包括大多数最短路径算法和搜索。我认为这是最重要的数据结构。

                  如果您想挑战自己,请深入研究优化:队列理论。做决定。蚁群优化。

                  我希望我给了你一些见解,并没有吓跑你! :)

                  【讨论】:

                  • 我认为这是一个非常不错的答案,不值得 -1,尽管它可以缩短。学习如何通过计算解决数学问题可以让您深入了解问题本身。计算是关于洞察力,而不是数字。
                  【解决方案10】:

                  练习,练习和练习就是答案。我的孩子在数学上有问题,我通过养成他几乎每天练习数学 30 分钟的习惯来克服这个问题,这还不到他玩 Wii 游戏时间的一半。这种做法是通过 www.ourflashcards.com 上的这个工具完成的。我不是在为这个工具做广告,我保证你也会有同样的感受。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2010-09-06
                    • 2020-03-26
                    • 2020-10-23
                    • 2011-02-17
                    • 2023-04-02
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多