如果您想成为Java / C ++程序员,是否必须学习数据结构?

所以我真的需要了解它们吗? 是不是有一种有趣的方式来了解堆栈,链表,堆等? 我发现这是一个无聊的主题。

**在发布此问题时,它显示了一些警告。 我不允许发布这样的问题吗? 管理员请澄清,我将删除它:/

警告::您提出的问题似乎是主观的,可能会被关闭。

好吧..我明白了什么是最好的学习方法? 我推荐什么书? 什么网站?

如果你想成为一名程序员,必须学习数据结构。 如果你不理解至少基本结构(数组,链表,堆栈,队列)的行为,用途和运行时复杂性(’big-O’)之类的东西,那么数据结构就是你的佼佼者。 ,树(二进制/ n-ary,自平衡varietes),哈希表,堆,图)和运行它们的算法(插入/定位/删除),你不知道哪个适合使用什么情况。

每个行业都有自己的工具; 这些是我们的。 数据结构是您将要学习的几乎所有算法的最基本的基础。 除非你想成为一名货运程序员 ,否则你需要了解他们的工作方式。

是否有有趣的方法来了解它们完全是一个单独的问题…… 🙂

我甚至会说大多数编程围绕着操纵数据结构,它毕竟是计算的基础:你得到一些数据,你处理它,你可能给出输出。 所有数据通常都存在于数据结构中,选择不合适的结构会对项目越大产生更大的影响。

随着您获得更多经验,您会发现算法和数据结构对于您的日常开发非常宝贵,而且实际上非常有趣。

通过了解它们,您将学习:

  • 哪种数据结构适合哪种上下文,即何时使用单链表,何时使用堆栈,何时使用队列,何时使用树
  • 哪种算法适合于哪种目的,例如树深度优先搜索或广度优先搜索。
  • 算法的空间和时间复杂性,例如为什么快速排序有时是最好的解决方案,有时候是heapsort。
  • 总的来说,它将教你计算机科学的起点和基础知识,即使你再也不必实现一个堆栈,你就会知道它的思想和考虑。 如果您必须实现自己的OWN数据结构(并且很可能会经常),您将知道该做什么和不该做什么。

如果您想成为一名成功的程序员,数据结构是必须的。 如果您不了解数据结构和算法,您将如何编程?

无论您喜欢与否,所有编程都是围绕数据结构构建的。 您可能永远不必写一个,但您必须选择多次使用哪一个。 一般来说,编程并不是一个真正的要求,但如果你想在这个领域取得优异成绩,那么理解基础知识是必须的。

任何人都可以在不了解材料或施工技术的情况下建造棚屋。 你甚至可以在别人的命令下在一个房子里放置砖头和灰泥,但如果你想自己建房子,你需要了解材料和技术。

数据结构是编程材料。 算法是技术。 你会使用数据结构吗? 您将每天使用最简单的一个,每个都经常需要解决需要特定数据结构的问题,而您可能设法不建立自己的砖块,您将需要了解是否需要砖块或为您的目的混凝土墙。

如果您需要一些有关数据结构重要性的证据,请查看Google 招聘流程 。 无论你如何看待谷歌作为一家公司,无可否认,他们有一些非常优秀的人为他们工作。 他们的访谈过程旨在确定候选人对数据结构和算法的了解。 因为当它归结为它时,这就是编程的核心,无论您使用的语言是什么,或者您正在编程的域名。

如果您正在计划作为专业程序员的职业生涯,您需要了解基础知识,而不仅仅是如何制定“有效”的代码。 否则,你刚刚玩。

学习算术成为工程师是强制性的吗?

如果你对编程语言的任何构建块采取“是必须的”的态度,你可能不会被裁剪成编码器。 无论是否“必修”,您都应该始终寻找新概念来学习和了解它是否会改进您的编码风格/标准。

但是回答你的问题:是的。

我认为在你的发展中某些时候必须牢牢把握。 我不一定确定标准的数据结构课程是最好的学习方法。 有时候,学习它们的最好方法是“我有问题X.出于某种原因,它需要我的算法很长时间来解决X.我怎样才能让它更快?”

我强烈推荐的一本书是Programming Pearls。 它有一些非常好的分析,有很多例子可以说明解决方案的真实动机来自哪里。 它以一种有趣的方式呈现问题,并且从不通过为您提供数据结构的清单来教导它们。

是的,99%的数据结构书籍都很乏味,而且练习也很简单。 他们觉得他们只是在弥补服务没有实际意义的问题:(这本书是我遇到的规则的一个例外。在本书的最后你将有一个天真但工作的RPG游戏: Data Structures for游戏程序员

阅读上面的书,你将解决你的鸡和鸡蛋问题,看到你毕竟没有数据结构真的不能做多少。

嗯,这可能听起来有点尴尬,但我不会说将数据结构学习成为一个普通的开发人员是强制性的 。 认真! 如果你努力学习,那么它将为你提供很多关于几个编程方面的见解和知识,而且总是很好。 但是必须……好吧,我认为这太过分了。 非常好就足够了。

让我解释一下原因。 今天,编写数据结构代码并不常见,因为 – 让我们面对它 – 这将是重写,重新发明我们已经知道多年的东西! 我要说的是COMPULSORY只是研究它们的一般理论和已经普遍使用(并经过测试和优化)的API /库,如Java中的Collections API。 您必须清楚地了解List和Set之间的区别(例如Java)及其function和正确用法,但您不需要确切知道它们是如何实现的 – 检查每个私有方法和属性 – 以处理大多数常见的,日常的,编码问题。 如果没有数据结构的所有“胆量”,你会做得很好。 我们现在面临不同的挑战。

但是不要误会我的意思 – 不要以为我疯了或天真! 当然,有些情况下你需要实现某种自定义数据结构(也许你自己的BalancedBinaryTreeMap!)。 你必须为一切做好准备。

我只是在争论是否是强制性的。 我不认为是强制性的,但确实非常好。 干杯。

我想你可以在不学习数据结构或算法的情况下学习编程。 为了做一个相同的例子,想想就像木匠知道如何建造东西,但不知道测量等。 他能否从事木工事业? 可能,但是我要说他需要知道完成一个项目所需的确切材料。 他可能会被解雇,因为他不知道使用什么样的材料或尺寸。

因此,对于数据结构和算法,您可以说它能够对应用程序进行精确测量,并了解您将获得哪种性能。

像音乐家学习规模一样,数据结构是软件贸易工具的一部分。 当然,你可以在没有知识的情况下以程序员的身份工作,但是你自己就是在设防。 如果我正在采访两个人以获得一个职位,其中一个人理解并使用结构,而另一个人甚至无法解释堆栈是什么,我的选择非常明确。

如果您想成为一名称职的,可就业的程序员,您需要学习自己的技巧。

学习它们是否必须?

不,您可以在没有它们的情况下进行编程,因为不必将代码分解为函数。

话虽这么说,如果你想成为一个有效的程序员,可以编写至少体面的代码而不让你的同事怂恿你的车,你想要至少能够选择合适的库类。

每个程序员都应该理解LinkedList和Array之间的权衡,或者为什么二进制搜索和二叉树对排序数据有用。 这不仅仅是关于性能 – 它也是关于正确性的,因为你不能只将任何东西放入树集中。

这是否意味着您需要知道如何实现自己的AVL树,构建超智能数据结构等? 不必要。 这是一个问题,你想知道你在“引擎盖下”发生了什么,以及你的任务是否需要它。

我不是采访中深度数据结构和算法问题的忠实粉丝,因为绝大多数开发人员不需要实现这些东西,只是为了使用库的东西。 我更愿意在面试中询问与工作相关的问题。 但是,接受如果你不学习那些东西,你将面临更艰苦的战斗,以获得其他工作。

它应该是,是的……

没有人会强迫你学习任何你不想学的东西。

如果你是那种被迫成为他/她所能做的最好的人,并且你热爱自己的生活,你将会自己学习所有知识。符合。


@happysoul:你应该问问自己为什么学习数据结构会让你烦恼。 此外,如果您还确定了什么不会让您厌烦,这将有所帮助。

如果你至少喜欢学习算法,我相信我们都可以建议两者的完美结合,这将是令人兴奋的学习!

我建议最好的算法/数据结构组合,以获得最有趣的学习体验: 图表 。