开发人员应该知道离散数学

时间:2010-09-05 20:37:57

标签: algorithm math

开发人员了解离散数学是否重要?关于算法和分析的大多数书籍至少都有一些数学参考。我原则上可以很容易地理解这些算法并且可以毫无问题地实现它们,但是当涉及到数学部分时,我会陷入困境。一般认为开发人员对数学有深入的了解,可以理解算法和方法吗?

10 个答案:

答案 0 :(得分:20)

这取决于您所谈论的开发人员的类型以及您正在谈论的数学类型。我很确定大多数“普通”开发人员不需要太了解数学。但是,你想成为“普通”的开发者吗?

  • 如果您正在开发仅显示并允许编辑数据库中的数据的Web应用程序,那么您可能永远不需要任何数学运算。
  • 另一方面,如果您正在开发一个显示目标路径的GPS系统(或其他执行更复杂计算的应用程序),那么离散数学将会很有用。
  • 虽然它不一定是离散数学 - 例如,在金融行业,人们更需要概率和统计数据。

那就是说,了解数学肯定会让你成为一个更好的开发者,因为它以一种不仅有助于解决特定(数学)问题的方式训练你的思维,而且教你如何以更正式的方式思考问题时尚(我相信,对于编写正确的代码非常重要)。

答案 1 :(得分:9)

我发现离散数学是计算机科学的核心。理解集合论,布尔代数,映射等都对开发人员有益,并且都是离散数学的一部分。

当然,这些概念并不总是适用于最具学术意义的。您几乎不会打开您的离散数学教科书并将某些内容复制到您的代码中以解决问题。但是,理解这些概念将有助于开发人员编写更好的代码,更好的算法,并更有效地使用设计模式。

答案 2 :(得分:3)

取决于开发人员可能正在做什么。如果你正在做网络,可能不是,可能有点安全。就像蛮力攻击在某个哈希下解码一定数量的比特的密钥一样。如果你正在为高端游戏做图形,你可能需要了解相当多的数学和方法的优缺点。作为数据库管理员或网络,您不应该。

答案 3 :(得分:1)

你有机会解决的问题取决于你所知道的。

如果你只知道四年级的数学,你只会被要求解决涉及4年级或更低等级数学的问题。

如果你渴望做更多事情或理解其他算法的基础,你将不得不学习任何必要的数学。

我认为你会发现,在你陷入困境的地方工作会提高你的数学水平,你对你解决的问题的理解,以及更好的机会将你学到的数学扩展到新的领域。

听到人们立刻贬低他们认为困难的地方,好像是为了证明他们不愿意克服无知和挣扎的痛苦,这让我感到恶心。学习任何新技能都需要你通过这个障碍,无论是数学还是其他任何东西。我建议你坚持下去并向自己证明你可以通过抵制放弃的冲动来掌握一些困难。

答案 4 :(得分:1)

您已经发现离散数学的结果在编程中很有用。我的经验是理解为什么某些东西有效,而不是试图简单地通过死记硬背,让你找到并解决许多错误和误解。它还允许您处理几乎(但不完全)它们在教科书中的方式,并实现教科书答案不再适用的情况。即使是你可能会使用或工作的一小部分内容所花费的时间也不会浪费。

答案 5 :(得分:0)

如果你的工作是像谷歌搜索这样纯粹的CS,那么你发明了新的算法,那么你需要能够很好地分析运行时间,还有像物理模拟这样的任何技术。 如果您是“普通”开发人员,那么您需要了解运行时间及其含义以及它们对您的应用程序的影响。

答案 6 :(得分:0)

我的经验是:

了解离散数学的一些事情是你永远不会后悔的。在许多情况下,即使是在平凡的任务中,它也会使您的工作变得更轻松,因为您将熟悉各种概念,这些概念至少可以让您构建更智能的Google查询。深入熟悉和通过死记硬背做这些事情的能力可能对大多数程序员没有帮助,但绝对是熟悉的。

也就是说,我遇到的大多数工业程序员(甚至是学术界的一些程序员!)对这些东西几乎一无所知,所以不知道在一些专业编程子程序之外它不太可能让你处于显着的劣势-disciplines。

答案 7 :(得分:0)

除非应用程序需要,否则通常不会对数学有深入的了解 - 例如你正在编写财务软件,或做一些3D建模,在飞机上进行负载平衡,编写一些定制的压缩算法等。我曾与那些在简单数学方面苦苦挣扎的优秀开发人员合作过。知道谨慎的数学似乎非常具体。了解各种算法如何工作可能会有所帮助,如果你能做到这一点,那么你无法构建最优性证明等等并不重要。

说实话,我认为最重要的是了解您正在构建的业务,以及如何编写代码(可读性,模块化等)

答案 8 :(得分:0)

离散数学的一些知识可能有一天会帮助你停止,然后花费大量时间尝试编写数学上不可能的东西或NP复杂性来解决。当一些提议的软件问题或解决方案路径更像一个简单的家庭作业,或者你班上没有人完成的那些学期项目之一时,你会获得更好的“感觉”。

答案 9 :(得分:0)

这取决于你所谈论的离散数学的哪一部分。当然,了解数学总是一个优势......但我认为了解离散数学的某些部分不仅仅是优势,而且对于开发人员来说非常重要(当然这取决于他/她正在工作的项目) 。

但主题如:

  • 设定理论
  • 图论
  • ALG。分析
  • ALG。复杂性
  • 排序
  • 等...

对开发者来说至关重要。