2010-09-05 98 views
16

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

+9

我相信开发者应该知道一切。那会比不了解一切都好。 – 2010-09-05 23:05:51

回答

3

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

+2

数据库管理员可以从了解一些排队理论中获益。 – 2010-09-05 21:27:06

+2

@彼得G:网络基本上非常专门排队理论。电信网络的主要编程语言是以排队论的发明者命名的,这并非偶然。 – 2010-09-06 00:46:48

0

如果你的工作是纯粹的CS,就像你发明新算法的Google搜索一样,那么你就需要能够很好地分析运行时间,以及任何像物理模拟的效率。 如果您是'普通'开发人员,那么您需要了解运行时间及其对您的应用程序的影响。

+0

是的,当然我可以计算出运行时间和影响......至少对于标准算法。但这不是唯一的要求。 – NixDev 2010-09-05 21:05:55

19

这取决于您所谈论的开发人员的种类以及您所谈论的数学种类。我很确定大部分“普通”开发人员不需要知道多少数学知识。但是,你想成为“普通”开发者吗?

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

这就是说,知道数学一定会使你成为一个更好的开发者,因为它训练你的思维方式不仅有助于解决特定的(数学)问题,还教你如何思考问题更正式的方式(我相信这对于编写正确的代码非常重要)。

+0

GPS系统何时将不涉及连续数学? – Gian 2010-09-05 20:53:04

+0

那么...什么是学习路径? – NixDev 2010-09-05 21:04:03

+0

@Gian:我不清楚 - 我正在考虑在图中寻找路径(或基于离散数学问题的类似图) – 2010-09-05 21:33:56

0

我的经验是这样的:

知道一些关于离散数学的东西,你永远不会后悔。在许多情况下,即使在平凡的任务中,它都会使你的工作变得更加轻松,因为你将熟悉各种概念,至少可以让你构建更智能的谷歌查询。对于大多数程序员来说,深度熟悉和能力去做这些事情对于大多数程序员来说可能是没有帮助的,但是绝对是熟悉的。也就是说,我遇到过的大多数行业程序员(甚至一些学者!)对这些东西几乎一无所知,所以不知道它不太可能让你处于一些专业编程之外的显着劣势分学科。

0

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

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

9

是。

我发现离散数学是计算机科学的核心。理解集合论,布尔代数,地图等对开发者都是有利的,并且都是离散数学的一部分。

当然,这些概念在大多数学术意义上并不总是适用的。你将几乎从不打开你的离散数学教科书,并将一些东西拷贝到你的代码中来解决问题。但是,理解这些概念将有助于开发人员编写更好的代码,更好的算法并更有效地使用设计模式。

+1

好吧,但是软件开发是计算机科学核心的知识。我不相信。 – 2010-09-06 01:24:44

+3

我相信是的。也许不是每个开发者都需要CS背景,但每个项目都需要。我的工作需要采取可能非常复杂的客户需求,并为他们找到优雅的解决方案。没有CS学位,大多数人会在这项任务中失败。当我完成后,我将设计转交给外包组,基本上完成了代码。他们不理解CS,离散数学等 - 但我确实。 – 2010-09-06 12:21:05

+3

不得不说,我同意John Saunders的看法,这取决于你在做什么,如果你正在用高级动态语言进行开发,那么关于CS的错综复杂的知识可能不是必需的,语言水平越高,更简单的是,它变得更加复杂,确保它们在机器使用方面的效率较低,但这是提高程序员生产力的一个折衷方案,它取决于哪种类型的项目能够确切地说出一个in深入了解CS的知识确实非常必要。 – Rick 2010-09-07 07:50:12

0

离散数学的一些知识可能有一天会帮助你停下来,然后花费大量的时间试图编写一些数学上不可能的或NP复杂性来解决的问题。当某些提出的软件问题或解决方案路径更类似于简单的作业分配或您班中没有人完成的那些任期项目之一时,您将获得更好的“感觉”。

1

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

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

如果你渴望做更多或理解其他算法的基础,你必须学习任何数学是必要的。

我想你会发现,通过卡住的点来改善你的数学,你对所解决的问题的欣赏,以及将你学习的数学扩展到新领域的更好机会。

令我恶心的是,听到人们立即贬低他们觉得困难的地方,好像证明他们不愿意推翻无知和斗争的痛苦。学习任何新技能需要你通过这个障碍,无论是数学还是其他任何东西。我建议你留下来,并向自己证明,通过抵制放弃的冲动,你可以掌握一些难题。

1

您已经发现离散数学的结果在编程中很有用。我的经验是,理解为什么有用的东西,而不是试图简单地遵循它,让你找到并解决许多错误和误解。它还使您能够处理几乎但不完全像教科书中的情况一样的情况,并且了解何时教科书的答案不再适用。花费时间去理解即使你可能使用或工作的东西的一小部分也不会被浪费。

0

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

但是主题,如:

  • 集理论
  • 图论
  • ALG。分析
  • Alg。复杂
  • 排序
  • 等...

是为开发至关重要。

相关问题