我是一个自学成才的程序员。老实说我数学不好。您可以提出什么建议来提高我的数学技能,以使我不会对其他程序员那么没有安全感?您可以建议哪些步骤或指南来提高我的数学技能?
是否有一本书是事实上的标准,用于描述最佳实践,设计方法以及其他有关程序员的数学有用信息?那本书使它与众不同吗?
我是一个自学成才的程序员。老实说我数学不好。您可以提出什么建议来提高我的数学技能,以使我不会对其他程序员那么没有安全感?您可以建议哪些步骤或指南来提高我的数学技能?
是否有一本书是事实上的标准,用于描述最佳实践,设计方法以及其他有关程序员的数学有用信息?那本书使它与众不同吗?
Answers:
嗯,从您所说的看来,您想开始非常基础。没什么不好的,我做了同样的事情。我的数学大部分是高中阶段的,很多都忘记了。
从可汗学院开始,进入“练习”部分,看看能得到多少。这将给您一个很好的主意,您可以做什么以及从哪里开始学习。
不要打扰观看视频。至少对我来说,视频只是学习的一种缓慢方式,而可汗的视频则显得特别无聊。还有许多其他资源可用于学习基础数学。像某些WikiBook或ck-12
在Math.StackExchange上经常讨论该问题,搜索“免费资源”或“免费书籍”将为您带来很多信息和材料。搜索词(例如“开始”或“初学者”)也是如此。或在那里问自己的问题。在reddit 的/ r / math小节中,它也可以正常工作。在这里,您会发现更多子查询,例如,学习数学。
多多练习 仅了解一个概念然后继续进行下一个是不够的。您必须舒服地应用它。如果您不熟悉除法和乘法(例如),您将不会理解百分比。高级概念也是如此。这就是为什么对我来说,汗的练习部分比视频更有价值。
与编程一样,与社区保持联系将使您保持积极性。只需偶尔登录某个论坛并阅读人们在谈论什么。
具体的数学:计算机科学基础(第二版)是一本好的数学书的选择,该书涵盖了数学的各个领域,并且对书中的内容有所帮助。
来自Lamar University的Paul在线注释以PDF格式提供。快速参考非常有用,每个页面上都有示例。如果我想在某个话题上刷新自己或掌握一些东西,我倾向于回到该站点。
这是集合:
微积分I(数学2413):分为
您可以在网站上查看其余的主题清单。
我意识到这不是一本书,但我认为这可能是扩大您对数学的思考的好方法。 尝试解决Euler项目中的问题。
例如,第一个是:
如果我们列出所有低于10的自然数,它们是3或5的倍数,则得到3、5、6和9。这些倍数的总和为23。
找出1000以下3或5的所有倍数的总和。
我总是推荐肯尼思·罗森(Kenneth Rosen)的离散数学及其应用。它涵盖了许多不同的主题(就像任何一本出色的离散数学书一样),在理论和应用之间取得了很好的平衡。它也包含许多有趣的工具条,这些工具条涵盖了所涵盖概念的数学家和计算机科学家。
虽然阅读一千本离散数学书是一个很好的解决方案,但是如果时间有限,它可能不是最佳选择。如果您想深入了解多少数学,请查看(cormen)算法书简介的附录A:http : //www.acmsolver.org/books/ 简介%20to%20算法,%202nd%20Ed%20-%20Thomas%20H。%20Cormen.pdf
我阅读了附录,它使我可以更好地掌握应该复习哪些数学主题。一旦知道了期望,请看一下:
我认为,学习如何证明(尤其是通过归纳法)是理解分析算法的基石。不幸的是,大多数算法甚至CS数学课程都没有过多地关注证明。他们已经假设您在此方面胜任,所以不会超出几页。《数学之旅》非常小,易于阅读。它也使用CS问题及其数学方面。其他要学习的好主题还包括矩阵算术,概率,计数和图论。
另两本很受欢迎的大型教科书:EPP(我最喜欢)的《离散数学》及其应用,以及Rosen的另一本。
我没有读过题为《具体数学》的教科书的乐趣,但是我总是听到有关它的好东西。
坦率地说,如果您没有非常基础的数学知识,那么您可以在很多领域成为一名完全合适的程序员。当涉及到游戏引擎或网络路由优化时,您可能并不十分有能力,但是说实话,许多业务应用程序都非常简单。但是,我鼓励您保持希望,不要放弃数学。
在较低级别的数学与较高级别的数学之间存在很大的差异。说自己对微积分不好(我是-我第一次参加Calc我没通过Calc考试)与说对Graph Theory不好是完全不同的。在学习数学的过程中,坦率地说,重点并不是简单的问题解决程序,这些问题很无聊且重复,并且可能由图形计算器完成。相反,重点是逻辑思维能力:坦率地说,构造证明很像编写软件。
我有过的最好的数学课是我认为的第一门“真实”数学课:基本上是对证明类的介绍,涵盖了从图论到数论的各个领域。我们使用的文字很棒(D'Angelo和West撰写的《数学思维:问题解决与证明》。)您可能会发现,仅阅读该书以了解一些攻击证据的想法可能会很有用。
总的来说,我真的需要大学上的任何数学知识吗?不,可能不会。但是,拥有一定的正式背景可以使我拥有更好的批判性思维技巧,更好的想象力(通常有很多方法可以解决问题,有时是好事,有时是坏事,但独特的想法可能会有所帮助)和对解决问题的信心。
看,我擅长数学,但实际上我根本不使用它进行编程,而且我经常进行编程。我的建议只是习惯于对知识不了解,并请别人为您做数学。
有很多事情要知道,您不能指望他们都擅长,但是特别是数学,它不是很有用。
当然,您可能需要它,因为您的程序是科学的东西,否则请利用这段时间来学习更有用的东西。
查看ESSLLI的“逻辑与计算”部分中的(入门)课程的课程笔记(例如,即将发布的2011计划或2010计划,搜索更多内容)可能会很有趣。它会让您对编程领域相关的理论发展有个印象。然后,您可以决定对这些课程中涉及的某个子领域的基础进行更深入的研究。
(否则,很难回答您的问题,有太多不同的“数学”,您可能并不需要或对此不感兴趣。ESSLLI课程之所以对我们如此有趣的原因之一是,因为它们反映了一些最新的知识。研究,所以它们是关于解决某些难题的;而尝试解决某种难题是对理论进行真正理解,了解其背后有趣的事情的重要组成部分。)
如果您在正确地学习CS数学,那么您将学习诸如数学逻辑和集合论之类的东西。这些都是一些相当复杂的数学支持它们。因此,如果您的数学基础水平有点高,那么在进入与CS相关的更多领域之前,最好先从基础知识入手。
因此,我建议您从KA Stroud的工程数学开始。写得好,易于遵循,涵盖了基础知识和更高级的内容。