一个好的开发者应该知道什么是核心math概念?

自从2006年gradle于一所非常小的学校,一个forms很糟糕和过时的项目(我是一个外国人,当时还不知道更好的学校),我意识到我错过了很多基本概念math和软件的angular度,大多是其他更高的概念的基础。

也就是说,我试着听麻省理工学院的“开放式课件”听课,但很快意识到我错过了几个math概念,以便更好地理解课程。

那么一个好的软件工程师应该知道什么是核心math概念呢? 哪些书籍/网站可以推荐给我?

math程序员 。 一个很好的阅读。

布尔代数是理解控制结构和重构的基础。 例如,我看到许多程序员不知道(或不能使用)德摩根法则导致的许多错误。 又如,有多less程序员立即认识到这一点

if (condition-1) { if (condition-2) { action-1 } else { action-2 } else { action-2 } 

可以改写为

 if (condition-1 and condition-2) { action-1 } else { action-2 } 

离散math和组合学在理解各种algorithm和数据结构的性能方面非常有帮助。

正如Baltimark所提到的那样,math归纳在推理循环和recursion方面非常有用。

集合论是关系数据库和SQL的基础。

举个比方,让我指出,木匠通常使用各种经验法则来build造屋顶和楼梯等东西。 然而,几何知识可以让你解决你没有“jar装”经验法则的问题。 这就像学习通过语音阅读与基本词汇的视觉识别一样。 90 +%的时间没有太大的差别。 但是,如果遇到陌生的情况,使用自己的工具来解决问题是非常好的。

最后,无论具体的技术如何,math所要求的严格性/精确性都是非常有用的编程准备。 再次,我在职业生涯中看到的编程(甚至是规范)中的许多错误,根本原因都是sl thinking不驯的。

我会和兰登所说的那些田地一起走。

离散math,线性代数,组合,概率统计,图论

并添加math逻辑。

这会让你抓住CS的大部分领域。 如果你想进入特殊领域,你必须特别注意一些领域:

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

按重要程度排列:

  • 计数(循环所需)
  • 加法,减法,乘法,除法。
  • 代数(只有真正需要了解variables的使用)。
  • 布尔代数,布尔逻辑和二进制。
  • 指数和对数(即理解O(n)符号)。

比这更先进的任何东西通常是特定于algorithm的或特定于域的。 根据您感兴趣的领域,以下内容也可能是相关的:

  • 线性代数和三angular(三维可视化)
  • 离散math和集合论(数据库devise,algorithmdevise,编译器devise)。
  • 统计(对于统计和/或科学/经济应用,也可能对algorithmdevise有用)。
  • 物理(模拟)。

理解函数也是有用的(不要记住那个区域的math术语),但是如果你知道如何编程,你可能已经做了。

我的观点是:一个十岁的孩子应该懂得足够的math能够理解编程。 对事物的基本理解没有太多的math要求。 这完全是关于逻辑,真的。

“归纳certificate”是程序员知道的核心math概念。

一般algorithm分析中的大O表示法 ,以及与标准集合(sorting,检索插入和删除)

对于离散math, 这里有一组来自Arsdigita大学的20个讲座。 每个约一个小时二十分钟。

从我们CS人所谓的“离散math”开始。 微积分和线性代数也可以非常方便地使用,因为它们让你踏足了很多应用领域。 一旦你掌握了这三个,去概率论。 这4个将使你在95%(我做到了)的应用领域胜任。

具体math涵盖了大部分的主要议题。 关于离散math的一本好书,如罗森的离散math及其应用 ,将填补任何空白。

我认为这取决于你的重点。 几年前,我购买了唐纳德·克努特(Donald Knuth)的一套计算机编程艺术(Art of Computer Programming)。 看完书后,我意识到几乎所有的东西都是微积分certificate。 如果你有兴趣为自己开发自己的通用algorithm和certificate,那么我build议你能够理解上面这本书,因为它将在这个世界上与你打交道。 另一方面,如果你只想要/需要使用各种sorting/search/树/等…例程,那么至less大O表示法,布尔math和一般代数将罚款。 如果你正在处理3D,然后几何和触发。

我倾向于在使用方面做比certificate更多的事情,虽然我从来没有坐下来想过自己做了一些聪明的事情,并开发了一个新的分类程序。 我能给出的最好的build议是学习你所需要的领域,但是让自己更上一层楼,这样你就知道它存在了,还有更多的东西要学,否则就不会有太多的成长。

我会说布尔逻辑。 AND,OR,XOR,NOT。 我发现作为程序员,我们比其他的math概念更频繁地使用它。

基础代数和统计学是很好的起点,也是很多其他领域的基础。

这是一个简单的问题,当我看到开发人员不理解它的时候,
– 操作顺序

“计算机程序devise艺术”第一章旨在提供这一点。

有一本被推荐的书…标题就像混凝土math。 有几个问题被推荐。

回到学校,我的教官说,商业应用程序,所有你需要知道知道加,减,乘,除。 请求者将知道的所有其他公式,并通知您需要什么。 现在认识到这是为融资报告和应用集中的学校。 直到今天,这对我来说也是如此。 我从来就不需要知道更多。

检查计算机科学基础的书
本书由Al Aho和Jeff Ullman撰写,整本书在线提供。

这就是作者在他们的序言中所说的关于本书目标的内容:

计算机科学基础 ”涵盖经常发现分裂的主题
在离散math课程和计算机的二年级序列之间
数据结构中的科学。 我们打算selectmath
而不是基于计算机用户真正需要的基础
一个math家可能会select什么“。

一个网站刷上了math: http : //www.khanacademy.org/

我的math背景真的很差(地质学家经过培训),但是我在高中时学了一门离散的math课,每天都把这些概念作为程序员使用。 这可能是我所接受的最有价值的课程,因为这与我目前的职业有关。

离散math
线性代数
组合学
概率和统计
图论

  • 布尔代数
  • 集合论
  • 离散math

那么,这取决于你的目标是什么。 正如有人所说,线性代数,组合,概率统计和图论是重要的,如果你正在解决难题。 函数的渐近增长(bit-Oh符号)非常重要。 如果您需要分析一些更复杂的algorithm,您还需要掌握总结和系列(请参阅关于Cormen和其他algorithm介绍的附录)。

即使你进入“企业Java”或“服务器端PHP”,当你的老板想让你获得服务器时,你会发现一些统计和algorithm复杂性(因此组合,归纳,求和,系列等)加快工作速度,添加新硬件似乎没有帮助。 :-)我曾经经历过那一次。

  • 布尔代数
  • 集合论

为什么每个人都包括概率和统计数字而不提微积分呢? 人们无法理解什么概率和统计数据是关于没有限制,衍生物,积分和系列的工作知识。 总而言之,微积分(连同线性代数)是所有math的主力。

我认为algorithm和理论是非常重要的。 能够提出一个快速, 正确的解决scheme是区分好的程序员和其他人。 此外,能够certificate你的algorithm(使用标准的certificate技术 – 诱导,矛盾等)同样重要。

是的,我想说对归纳的基本理解有助于理解algorithm中代表什么。 另外一些逻辑和离散结构是有帮助的。

概率和统计是非常有用的,如果你必须做任何类似机器学习。

我在“ 计算您的技能 ”博客文章中介绍了基本知识,在这篇文章中我将讨论Xbox Live的TrueSkill排名和匹配algorithm是如何工作的。