有没有一本针对程序员的数学经典书?[关闭]


52

我是一个自学成才的程序员。老实说我数学不好。您可以提出什么建议来提高我的数学技能,以使我不会对其他程序员那么没有安全感?您可以建议哪些步骤或指南来提高我的数学技能?

是否有一本书是事实上的标准,用于描述最佳实践,设计方法以及其他有关程序员的数学有用信息?那本书使它与众不同吗?


8
你知道几何吗?代数?三角函数?线性代数?结石?你有多远
Marcelo

3
@ adietan63:除非您对当前的数学知识更为具体,否则建议只会是猜测。
David Thornley

1
我会在PyGame中使用Python。如果您想轻松进入3D,那么迪士尼影业公司的Carnegie Mellon制作的Panda3D非常容易学习。
thorstenmüller2011年

1
@FrustratedWithFormsDesigner | java是否适合于图形处理和游戏或其c ++?
adietan63 2011年

5
您能告诉我们更多有关您的程序员同伴如何使用数学的信息吗?如果您是在金融公司还是在编程商店工作,我会提供完全不同的建议。(如果让您更安全地在办公室周围扔诸如“希尔伯特空间”和“异方差”之类的字眼,则一定要学习一些线性代数和高级统计信息。只是不要期望会给hoi
polloi

Answers:


24

嗯,从您所说的看来,您想开始非常基础。没什么不好的,我做了同样的事情。我的数学大部分是高中阶段的,很多都忘记了。

可汗学院开始,进入“练习”部分,看看能得到多少。这将给您一个很好的主意,您可以做什么以及从哪里开始学习。

不要打扰观看视频。至少对我来说,视频只是学习的一种缓慢方式,而可汗的视频则显得特别无聊。还有许多其他资源可用于学习基础数学。像某些WikiBookck-12

Math.StackExchange上经常讨论该问题,搜索“免费资源”或“免费书籍”将为您带来很多信息和材料。搜索词(例如“开始”或“初学者”)也是如此。或在那里问自己的问题。在reddit 的/ r / math小节中,它也可以正常工作。在这里,您会发现更多子查询,例如,学习数学。

多多练习 仅了解一个概念然后继续进行下一个是不够的。您必须舒服地应用它。如果您不熟悉除法和乘法(例如),您将不会理解百分比。高级概念也是如此。这就是为什么对我来说,汗的练习部分比视频更有价值。

与编程一样,与社区保持联系将使您保持积极性。只需偶尔登录某个论坛并阅读人们在谈论什么。


谢啦!你的权利。我认为我需要从最基本的角度开始理解数学的广泛领域。
2011年

+100 KhanAcademy非常适合加强数学基础。从基础开始没有错。自定进度的学习消除了不了解某些简单数学基础的“屈辱因素”。评估系统可以很好地识别弱点并迅速克服弱点。
Evan Plaice 2014年

16

具体的数学:计算机科学基础(第二版)是一本好的数学书的选择,该书涵盖了数学的各个领域,并且对书中的内容有所帮助。


我也读过。一本好书。
安藤(Ando)

2
+1,因为这是一本非常好的书。不确定是否有人认为自己“数学不好”。
vartec

如果不是仅仅使用“ obvious”一词,Knuth会使某些部分更加明显,那将是很好的。但是,如果有扎实的数学背景,那么经过艰苦的努力,所有东西都可以理解。
gruszczy 2011年

8
请注意,这本书绝对不适合初学者。
MAK

2
诀窍是实际阅读它。我一直发现自己想像手册或网站一样浏览。那不行 单词或概念无法解释?如果您走得足够远,就会找到它。对我来说进展缓慢(从未完成演算-但更多的是因为在数学上不那么懈怠),但对IMO是一个很好的建议。他们解释得很好。请耐心等待,慢慢来。
Erik Reppen 2013年

10

来自Lamar University的Paul在线注释以PDF格式提供。快速参考非常有用,每个页面上都有示例。如果我想在某个话题上刷新自己或掌握一些东西,我倾向于回到该站点。

这是集合:

代数(数学1314): 完整笔记
目录清单

  • 初步知识-指数性质,有理指数,负指数,自由基,多项式,因式,有理表达式,复数
  • 解决方程式和不等式-线性方程式,二次方程式,平方求平方,二次方程式,线性和二次方程式的应用,可归纳为二次形式,具有自由基的方程,线性不等式,多项式和有理不等式,绝对值方程式和不等式。
  • 图形和函数-图形线,圆和分段函数,函数定义,函数符号,函数组成,反函数。
  • 常见图-抛物线,椭圆,双曲线,绝对值,平方根,常数函数,有理函数,移位,反射,对称。
  • 多项式函数-除多项式,多项式的零/根,找到多项式的零,绘制多项式,部分分数。
  • 指数和对数函数-指数函数,对数函数,求解指数函数,求解对数函数,应用程序。
  • 方程组-替代方法,消除方法,增广矩阵,非线性系统。

微积分I(数学2413):分为

  1. 内容清单
  2. 笔记
  3. 实践问题
  4. 实践问题的解决方案
  5. 作业问题

    • 代数/触发器复习-三角函数和方程式,指数函数和方程式,对数函数和方程式。
    • 限制-概念,定义,计算,单边限制,连续性,涉及无穷大的限制,医院规则
    • 导数-定义,解释,导数公式,幂规则,乘积规则,商规则,链规则,高阶导数,隐式微分,对数微分,Trig函数的导数,指数函数,对数函数,反三角函数和双曲三角函数。
    • 导数的应用-相关比率,临界点,最小值和最大值,增/减函数,拐点,凹度,优化
    • 积分-定义,不定积分,定积分,替代规则,求定积分,微积分的基本定理
    • 积分的应用-平均函数值,曲线之间的面积,旋转实体,功。

微积分II(Math 2414)完整说明

微积分III(Math 2415)完整说明

线性代数(Math 2318)完整说明

微分方程(数学3301)完整注释

您可以在网站上查看其余的主题清单。


1
不敢相信这没有更多的选票。保罗是神。
2011年

8

我意识到这不是一本书,但我认为这可能是扩大您对数学的思考的好方法。 尝试解决Euler项目中的问题

例如,第一个是

如果我们列出所有低于10的自然数,它们是3或5的倍数,则得到3、5、6和9。这些倍数的总和为23。

找出1000以下3或5的所有倍数的总和。


欧拉计画的问题肯定是基于数学的,但是我遇到的问题是它们是如此之快,以至于我能够解决它们的唯一方法是蛮力算法(除非我被骗了)。他们说,您应该能够找到一个优雅的解决方案,该问题可以在60秒内解决所有问题。
迈克

4
@迈克,我不认为研究类似的问题并试图充分理解潜在的概念以解决该问题是骗人的。通过这种方式“作弊”,然后不进行所有研究,您将学到更多。
Doug T.

1
我做了很多,这提高了我的编程技能。尽管就数学本身而言,您通常会学到很多巧妙的技巧,但对微积分或代数之类的基础知识却不会增加太多。但这增加了您进行数学的动机。
thorstenmüller2011年

1
@thorsten:我的妻子(家庭中的数学家)认为数学只是一堆巧妙的技巧。:-)
Peter K.

1
我通常遇到欧拉问题的方式是,首先我通常会尝试蛮力并对其进行优化。仅此一个就已经教了很多我不知道的数学事实。之后阅读解决方案论坛通常可以获得更多的数学见解。
系统停机时间

8

我总是推荐肯尼思·罗森(Kenneth Rosen)的离散数学及其应用。它涵盖了许多不同的主题(就像任何一本出色的离散数学书一样),在理论和应用之间取得了很好的平衡。它也包含许多有趣的工具条,这些工具条涵盖了所涵盖概念的数学家和计算机科学家。


谢谢!但是学习离散数学等的先决条件是什么?
adietan63 2011年

1
@ adietan63:代数是一切,我会说是必需的。我的大学让我们先采用离散数学,然后再采用微积分或统计,但先学习那些当然不会有任何伤害。
比尔蜥蜴

@ adietan63:如果您需要复习一下,或者还想看一些免费的在线视频讲座,您可能还想看看一些Head First数学书。
比尔蜥蜴

@比尔谢谢!也许我在学习这些东西方面感到有压力,因为我想在短时间内学习很多编程知识。也许我一次可以吃一次。我认为这是学习过程的一部分。再次感谢!
adietan63 2011年

7
别客气。另外,“我想在短时间内学习很多东西”的感觉永远不会消失。:)
比尔蜥蜴

4

虽然阅读一千本离散数学书是一个很好的解决方案,但是如果时间有限,它可能不是最佳选择。如果您想深入了解多少数学,请查看(cormen)算法书简介附录Ahttp : //www.acmsolver.org/books/ 简介%20to%20算法,%202nd%20Ed%20-%20Thomas%20H。%20Cormen.pdf

我阅读了附录,它使我可以更好地掌握应该复习哪些数学主题。一旦知道了期望,请看一下:

http://www.amazon.com/Journey-into-Mathematics-Introduction-Proofs/dp/0486453065/ref=sr_1_15?ie=UTF8&qid=1308591694&sr=8-15 在此处输入图片说明

我认为,学习如何证明(尤其是通过归纳法)是理解分析算法的基石。不幸的是,大多数算法甚至CS数学课程都没有过多地关注证明。他们已经假设您在此方面胜任,所以不会超出几页。《数学之旅》非常小,易于阅读。它也使用CS问题及其数学方面。其他要学习的好主题还包括矩阵算术概率计数图论

另两本很受欢迎的大型教科书:EPP(我最喜欢)的《离散数学》及其应用,以及Rosen的另一本。

http://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0534359450/ref=sr_1_4?ie=UTF8&qid=1308591784&sr=8-4

http://www.amazon.com/Discrete-Mathematics-Applications-Kenneth-Rosen/dp/0073229725/ref=sr_1_1?ie=UTF8&qid=1308591784&sr=8-1

我没有读过题为《具体数学》的教科书的乐趣,但是我总是听到有关它的好东西。


1

坦率地说,如果您没有非常基础的数学知识,那么您可以在很多领域成为一名完全合适的程序员。当涉及到游戏引擎或网络路由优化时,您可能并不十分有能力,但是说实话,许多业务应用程序都非常简单。但是,我鼓励您保持希望,不要放弃数学。

在较低级别的数学与较高级别的数学之间存在很大的差异。说自己对微积分不好(我是-我第一次参加Calc我没通过Calc考试)与说对Graph Theory不好是完全不同的。在学习数学的过程中,坦率地说,重点并不是简单的问题解决程序,这些问题很无聊且重复,并且可能由图形计算器完成。相反,重点是逻辑思维能力:坦率地说,构造证明很像编写软件。

我有过的最好的数学课是我认为的第一门“真实”数学课:基本上是对证明类的介绍,涵盖了从图论到数论的各个领域。我们使用的文字很棒(D'Angelo和West撰写的《数学思维:问题解决与证明》。)您可能会发现,仅阅读该书以了解一些攻击证据的想法可能会很有用。

总的来说,我真的需要大学上的任何数学知识吗?不,可能不会。但是,拥有一定的正式背景可以使我拥有更好的批判性思维技巧,更好的想象力(通常有很多方法可以解决问题,有时是好事,有时是坏事,但独特的想法可能会有所帮助)和对解决问题的信心。


| 谢啦!我认为,即使Math不能一直为您提供帮助。也许它的存在会帮助您进行批判性思考并提高分析能力?
2011年

坦率地说,我认为您喜欢“坦率”一词。
bukzor

1

看,我擅长数学,但实际上我根本不使用它进行编程,而且我经常进行编程。我的建议只是习惯于对知识不了解,并请别人为您做数学。

有很多事情要知道,您不能指望他们都擅长,但是特别是数学,它不是很有用。

当然,您可能需要它,因为您的程序是科学的东西,否则请利用这段时间来学习更有用的东西。


2
不同意,良好的编程技能与良好的数学技能有关。
Marcelo

1
好吧,我认为您可以不同意。我认为分歧是对的,但是如果您认为自己有权拒绝我的贡献,那确实是有风险的。
安藤

特权-否决权-需要125点声望;您已经获得了此特权。
Marcelo

1
我赞成这一观点,因为我同意,您不需要数学就可以成为许多领域的优秀程序员。尽管我非常不同意数学不是很有用。即使您在日常工作中不需要数学,也可以从学习数学的某些方面中学到很多,并且只要了解big-O表示法就可以了。
thorstenmüller2011年

1

查看ESSLLI的“逻辑与计算”部分中的(入门)课程的课程笔记(例如,即将发布的2011计划2010计划,搜索更多内容)可能会很有趣。它会让您对编程领域相关的理论发展有个印象。然后,您可以决定对这些课程中涉及的某个子领域的基础进行更深入的研究。

(否则,很难回答您的问题,有太多不同的“数学”,您可能并不需要或对此不感兴趣。ESSLLI课程之所以对我们如此有趣的原因之一是,因为它们反映了一些最新的知识。研究,所以它们是关于解决某些难题的;而尝试解决某种难题是对理论进行真正理解,了解其背后有趣的事情的重要组成部分。)


1

如果您在正确地学习CS数学,那么您将学习诸如数学逻辑和集合论之类的东西。这些都是一些相当复杂的数学支持它们。因此,如果您的数学基础水平有点高,那么在进入与CS相关的更多领域之前,最好先从基础知识入手。

因此,我建议您从KA Stroud的工程数学开始。写得好,易于遵循,涵盖了基础知识和更高级的内容。


1

从基础开始,然后转向专业:《数学家的喜悦》和《如何解决》是两本不错的书。数学家的乐事以人类友好和有趣的方式处理基本的数学主题(例如,几何,代数,微积分等)。我还没有读过《如何解决》,但它专注于如何通过推理来解决数学问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.