数学和编程

6
我阅读了很多关于编程中数学的博客和论坛帖子,并得出结论,编程需要基础数学知识。我不是一名优秀的数学家。但是否有可能在不深入研究数学科学的情况下提高我的逻辑和算法思维能力?是否有任何练习或一些书籍可以帮助我提高这些技能,以便我可以成为一名优秀的架构师?谢谢您的帮助。

3
你能告诉我们你的数学水平如何吗?请问在这个列表中你认识哪些?你会说自己精通哪些?-三角函数-微积分-概率/离散数学-线性代数(矩阵)-统计学-分析学(无穷级数、无穷求和等) - spencer nelson
我认为这是一个比更常见的https://dev59.com/n3VC5IYBdhLWcg3w4VRz更合适、更易处理的问题。 - mctylr
我不能说它很好。三分之五的评分。我在学校错过了一些东西,导致难以理解更高级的数学。 - Azat
Stack Overflow上的每个问题都应该与编程有关,因此该标签没有帮助。 - dmckee --- ex-moderator kitten
你可以给我们展示一些你认为需要学习的数学例子吗?因为我在业界已经35年了,几乎没有用过它。 - John Saunders
11个回答

7

完成欧拉计划

CLRS 算法导论的开篇介绍了一些数论、离散数学、组合数学、概率论、图论等非常有用的内容。它准确地讲授了与算法相关的知识,并跳过了其他无关的内容。


6

3

3

以上有很好的建议 - 为了让一些内容更加清晰,这里有一个非常棒的项目,旨在改革高中数学教育。它可能有助于您理解学习数学的挫折以及如何克服这些困难。

请记住 - 数学教育的许多内容是锻炼您抽象思维和解决问题的能力。这两种技能都需要实践,即使您可能看不到问题与所谓的“现实生活”之间的直接联系,通过解决问题总会有东西可以学习和练习。


2
“但是,有没有办法在不深入数学科学的情况下提高我的逻辑和算法思维能力?”
“但是,逻辑和问题解决是数学的基础。”
“我怀疑真正的问题在于如何教授数学,以及你(和你之前的老师)认为数学是什么。我建议阅读《数学家的哀叹》,更好地解释了什么是数学,与我们通常所学到的数学的区别。”
“有没有一些练习或书籍可以帮助我提高这些技能,以便我成为一个好的架构师?”
“是的,其他人已经给出了比我更好的建议清单,但基本想法是可以的,您可以学习更好的数学技能,特别是那些与计算机科学和编程密切相关的数学技能。”
“我假设您指的是软件架构师,因为传统的建筑,如工程学,有着牢固的应用数学基础。无论如何,优秀的软件架构师需要足够自信,能够进行非正式的问题和算法分析,这确实需要数学基础。”
我通常会说,如果你能学习相当于计算机科学学位的典型第一年大学数学要求(即微积分的第一年、离散数学或线性代数),这将对使你成为更好的计算机科学家、更好的程序员或架构师有很大帮助。没有这些不是不可能,但这可以让你更擅长工作(更快地评估或正确、高效地解决问题)。

祝你好运。

是的,没错。我指的是软件架构师。 - Azat

2
我会说,你需要的数学取决于你需要解决的问题。
你需要解决的问题取决于你所拥有的数学技能。
任何声称你只需要四年级的数学的人也在告诉你,你不能合理地期望有机会解决更具挑战性的问题。
我想指出,计算机已经改变了数学和应用。我的工程教育包括很多微积分和使用铅笔和纸张的闭式解。
我的第一个职业意味着将这些技术的离散、数值模拟应用到计算机上。
如果你想做这种工作,最好学习很多关于数值方法和线性代数的知识。
当谷歌的 Page Rank 发布 this paper 时,它是一个价值 $25B 的特征值问题。今天,谷歌的市值为 $144B。
计算机图形学非常数学密集型。如果你喜欢图形,最好好好学习矩阵。
统计数据非常重要,特别是当你在网上有海量数据可用时。要彻底学好R基本统计学
阅读类似"Programming Collective Intelligence"这样的书籍,了解哪些新颖问题需要一些复杂的数学知识。
如果你想解决这些问题,最好快点行动起来。

1
四十年来,在计算机科学本科课程中,“离散数学”的重点已经发生了变化。过去,这样的课程会涵盖抽象代数等内容,并讨论“排序”和“类别”等概念,这对于程序的代数规范非常有用。如果这是你认为会喜欢的数学内容,那么就买一本旧版的离散数学书籍,比如《计算机科学中的离散数学(1977)》Discrete Mathematics in Computer Science (1977),只需$5即可配送! 我不认为昂贵的Susanna Epps的书籍包含类似的内容,我应该知道,因为在我大一的离散数学课上我就使用了这本价格昂贵的书籍(2003)- 我无法相信它的价格几乎翻了一番,而当时它的价格已经非常过分了!

1

你不需要知道微积分才能编程。计算机编程由非常简单的数学运算组成,只有加法、减法、乘法、小数舍入,甚至长除法(四年级的数学也很有用)。

计数器非常有用;你需要知道如何从零开始计数。简单明了。大多数语言都是以零为基础,而不是以一为基础。许多学习者会忘记这一点。增量和预增量(例如,i++++i)在语句中使用变量 i 之后或之前将其增加一。

逻辑运算符在编程中非常重要。小于和大于经常用于测试某个值并保持在适当的范围内。你需要意识到 i < 55 > i 是相同的,但它们计算出的结果要么是 true 要么是 false。当像这样使用时:if (i < 5) ...i = 4 时,它等价于 if (true) ...

同样地,AND、OR 和 NOT 运算符对于布尔测试非常重要。您可能想知道 if (i < 5 && i >= 0) ... 这意味着如果 i 小于五且大于或等于零,则执行该操作。NOT (!) 和 OR (||) 以类似的方式运作。
一些编程语言要求您区分整数和小数(或浮点数)。整数数学使用舍入方式与每种语言不同。随着操作变得更加复杂,十进制数具有不同的精度问题。
一些高级技巧涉及模数操作 (%)。它所做的就是取两个数字相除的余数。这对于区分偶数和奇数(例如表中的行)非常有用。
更多关于计算机编程基础知识包括控制结构和运算符的一般信息: http://computerprogramming.suite101.com/

0

数学基础好确实对编程有很大帮助!为了增强你的算法思维,可以尝试解决组合数学问题。有时候一些数学结果可以减少代码的复杂度,所以如果你想解决基本问题,至少要熟悉高中数学。我建议你阅读Donald E. Knuth的《计算机程序设计艺术》和Ronald L. Graham、Donald E. Knuth和Oren Patashnik的《具体数学》。我认为《具体数学》会为你的计算机科学数学基础打下坚实的基础,你应该试试。

祝编程愉快!


0

编程有很多种类型。如果你正在设计无线压缩算法,你可能需要工程硕士学位。如果你正在制作在线颜色选择器,用高中三角函数知识就可以应对。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接