我是Java的新手并参考Head-First书。
我是否必须学习算法才能用Java编写程序?
我应该首先学习算法,还是只学习有效Java,Java益智游戏等Java书籍?
我想成为一名成功的企业开发人员。那么我应该精通哪些算法和数据结构?你会推荐我什么书?
要成为一名成功的Java开发人员,我是否需要了解所有高级算法,例如CLRS中提供的算法?
PS:在我过去的学期里我有C和C ++,我在他们身上得到了很好的分数,但这有点像抢劫。我知道编程的基础知识。我不是新手。事实是我没有任何语言的知识,我也想成为一名开发人员,而不是算法主义者。答案 0 :(得分:10)
如果你想成为一名成功的开发者,你需要学习很多东西。主编程语言(java)和CS基础(例如算法)只是其中的两个。其他的是:沟通技巧,测试(我说TDD但我不想开始战斗),数据库处理,网络资源,OOD等等。此外,许多您可能不会直接使用的东西仍然可以通过拓宽视野来扩展(功能编程,高级CS概念)
没有固定的顺序来学习这些东西。由于学习在您有动力时效果最佳,因此只需选择您最感兴趣的内容或最有帮助您的内容。在这里学习一点,然后在那里学习一点。睁大眼睛练习很多,你会没事的。
在你目前的情况下,我建议你选择一本算法书并在java中实现算法。它教你java和算法。
另请阅读“清洁代码”,“实用程序员”和SOLID http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod原则
答案 1 :(得分:2)
我的建议 - 学习Java的一个子集,然后学习一些基本算法,然后找出你想从那里去的地方。
您无需了解所有Java就可以尝试实现算法。您需要能够在一个类中包含一些方法(通常只有一个)(甚至只是因为Java坚持所有类都是一个类)。你需要条件和循环结构和数组。对于数据结构,您可能需要了解Java引用,尽管您可以使用整数伪造指针作为数组下标。
重点是算法很重要,但规模相对较小。数据结构通常需要一些算法才能使它们工作。但是,您不需要了解面向对象设计等大规模问题来试验算法。
修改强>
通过评论,我发现你已经很好地进入了“从那里去的地方”的舞台。
不要忘记算法(或离散数学),因为你不关心分析。广泛的(不一定是深入的)理解是一种有用的资源 - 它们非常适合解决问题的方法。
例如,我最近在一个关于如何处理周期的依赖顺序问题上感到困惑。我忘记了有向图中的“强连通组件”。一旦我被提醒,问题变得微不足道 - 没有必要尝试在强连接组件中进行排序,但这些组件形成了一个非循环的有向图。从那里开始,答案只是一个拓扑结构。
了解拓扑排序使得最后一步变得微不足道。忘记强关联组件会让我花费相当多的时间。了解Tarjans如何强有力地连接组件算法的工作......维基百科和笔和纸几分钟就足够了,一旦你知道要寻找什么。
实际上,我应该承认 - “我被提醒”意味着我查找了一篇关于拓扑排序的旧Dobbs博士使用相同方法的文章。
答案 2 :(得分:2)
我大部分时间都在使用Steve314但想要指明一些事情。
了解足够的Java(或其他任何东西)是危险的。然后是主要的数据结构(列表,堆栈,映射,树等),其中包括一些用于遍历它们的算法。在那之后,其余算法是否正常工作。以下是一些具体目标,如果您需要,可以或多或少地反映Data Structures & Algorithms in Java的顺序。
一旦你深入了解像 Algorithms 这样的书,你就会知道几件事:
说到视频,我认为这是一个更好的起点:Programming Abstractions (Stanford, Julie Zelenski)。我很高兴那些存在。
(碰巧我正在使用binary search tree实施地图。)
答案 3 :(得分:2)
我建议您开始使用Head First学习。 functionx.com也是一个不错的网站。大多数Java书籍都将算法描述为本书的一部分,因此不要担心算法。首先学习Java。
让我给你一个简单的方法来找到好书。始终在amazon.com中查找评分较高的图书,然后从wowebook.be下载。
我推荐Michael T. Goodrich和Roberto Tamassia撰写的“Java中的数据结构和算法”。 “像程序员一样思考”是与算法相关的好书。
答案 4 :(得分:0)
@Chankey:据我所知,你应该携带Java和算法。首先学习一些Java编程语言的基础知识,比如什么是类,数据类型,函数等。然后学习一些排序和搜索的基本算法。而且,现在应用您的Java知识来实现这些算法。
干杯!! 穆库尔古普塔