我应该继续投资于数据结构和算法吗?[关闭]


28

这些天来,我在数据结构和算法上投入了大量资金,并试图解决一些编程难题。
我正在尝试使用Java和Clojure进行编码和解决。

我在浪费时间吗?我是否应该在我已经知道的技术和框架上进行更多的投资,以便获得更深入的知识(内幕和外幕)并能够更快地使用它们进行编码?

通过研究数据结构和算法,我是否将成为一名更好的程序员,或者这些学科仅在大学期间才重要?


5
您正在使用什么数据结构和算法?您正在使用哪些编程难题?
oosterwal 2011年

我正在/尚在处理哈希表,地图,堆,图形,树和随附的算法(遍历,哈希,搜索,插入,删除和某些排序算法)。难题来自TopCoder和Google Code Jam竞赛。
Chiron

Answers:


24

只需花费很少的算法和数据结构知识,就可以将大部分/全部职业花费在重要的,有用的工作上。

为了成功使用算法和数据结构的最低知识要求,您需要:

  • 注意其中的大多数(包括在出现新内容时偶尔阅读)
  • 知道在哪里可以找到良好的,经过测试的有效实施
  • 能够比较算法及其实用性
  • 只需一点点调整就可以将一个示例从一个开源示例正确复制到您的特定环境

没有* 最大 *。如果您愿意,您可以将您的研究提高到博士学位或更高水平。它的有用性与您感兴趣的工作类型直接相关,并且与您觉得最有趣和有意义的工作类型直接相关。

就是说,作为粗略(但不是绝对)的准则,您正在使用的语言,框架和应用程序越底层,资源占用率和自动化程度越低,则所需的技能水平就越高算法和数据结构。例如,在汇编中实现Ukkonen的算法可能(但不一定)意味着您需要掌握有关算法和数据结构的硕士学位。

在您的特定情况下,从Java开发背景到从事iO,在其他所有条件相同的情况下,期望您对算法和数据结构的一般理解有更高的要求。您将希望能够在可用资源较少的设备上高效运行。另外,期望在您的军械库中添加几个新类别-最值得注意的是,您将希望了解有关内存管理的更多信息。


2
非常同意。我几乎不必直接处理算法,因为所需的绝大多数算法已包含在基本库中。但是,如果我对性能特征不够了解,无法为特定的用例选择合适的算法或结构,就会遇到麻烦。OP,除非你想在算法的工作,你可以得到很多,很多很多的投资花在学习其他库和工具和技术时更好的回报。
2011年

1
gh,用Python编写Ukkonen的算法已经足够困难了,我什至可以开始想象在汇编中这样做。
rjzii 2011年

2
这属于“比较算法”范围之内,但我只是想阐述一下,您应该知道空间和时间复杂度之间的权衡。由于速度原因,台式机上常用的许多算法在iOS上可能不可行,因为它们需要大型数据结构。
Karl Bielefeldt

3
我不同意。一个简单的原因是,当某人花时间学习算法,设计或体系结构时,不仅仅与他打算何时/何地使用它有关。它只会使人变得更聪明,他可能会在解决其他问题的同时利用这些知识。它还鼓励最佳地做事。例如。可能没有一个万能的手工算法,但由于您了解很多东西,因此可能会自己拥有一些例外。
极客

14

没事 如果您只是刚刚起步,那么尝试进入诸如UI编程之类的大图之类的东西,只会使您退缩。最终,您确实需要去那里,学习更大的框架...如何使用其他人编写的数据结构和算法。当您刚入门时,最好坚持有限范围的问题。

算法和数据结构基本上是一切的基础,即使您在初学者阶段也可能永远不会自己编写一个。了解它们,或者至少了解它们,最终将使您成为更好的开发人员。您将知道何时以及为什么使用每一个,因为您将知道它们的工作原理。另外,使您的算法和数据结构通用,使其可以与任何类型的接口X一起使用,这实际上是您在整个职业生涯中都会使用的东西。

我看到太多的人跳入Qt之类的问题,他们最终提出的问题表明对C ++的知识为零。他们试图跳过太多的步骤,最终需要更长的时间来学习。我会说你在正确的道路上。


自2007年以来,我一直从事专业的Java编程工作(我的意思是被雇用)。现在(至少希望)我要进行一些iOS开发。
Chiron

9

您没有在浪费时间。

如果在工作过程中需要使用以前未使用过的工具或框架,那么您将学习并使用它。

但是,如果您需要使用以前未曾使用过的数据结构或算法,那么您甚至可能都不知道它的存在,那么您将使用一些令人费解的次优技术来解决您的问题努力,规模极高。

我想说的是,这是您不仅会边做边学的东西,您需要通过学习来学习,无论是在学术上还是在个人努力下,现在做。


6

在实践中,请了解可用的数据结构,它们的复杂性特征是什么,在哪里可以很好地实现它们以及在哪里保留“ 算法简介”的副本以在以后查找细节。


1

如果那是让您开心的原因,那么您绝对应该坚持下去。如果您担心自己没有运用足够的理论,可以考虑进行大量理论研究。从头开始构建一种小型编程语言,例如Potion。完整的实现将使用哈希表,图形,树和大量算法。如果看起来很有趣,您可以深入研究优化,本机代码生成或用户可扩展性。

当您保持兴趣和专注时,您将成为一个更好的程序员,而不是当您从事看起来可行但有点乏味的项目时。

在兔子洞里,多萝西!


1

我花了很多时间在OpenGL上用C / C ++编程。我非常了解这些语言和API ...由于这种经验,我已经成为一名合理的开发人员和程序员。也就是说,实际的算法解决我遇到的各种问题所需知识只是我真正能够掌握的。

从个人经验来看,如果您不了解与要构建的内容有关的问题域背后的理论,那么专注于构建应用程序将浪费您的时间。

对于许多不同类型的软件,这些领域将基于您从研究算法中学到的基础知识,以及它们自己基于特定细分市场的理论(例如,计算机图形学中的线性代数,密码学中的数字/信息论等)。

您不必一定要成为所有事物背后的计算天才,但要做这篇文章时您正在做的事情是一条非常非常必要的道路,至少可以减少一次编程之旅-无论是否他们不是自学成才。


0

我猜如果您不太了解它们,那么您将找不到使用它们的理由。我似乎一直在寻找适合他们的用途。但是,我不得不承认,随着过去六年左右仿制药的改进,对自己的专利申请的需求越来越少。这仍然不能消除知道如何以及何时使用它们的好处,并且它们可以极大地简化原本复杂的代码。

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.