这是我先前的问题的延续,我曾问过有必要学习算法和数据结构。我觉得是的。
现在,我在这样的环境中工作:我永远不会有机会通过实验或实践或任何作业来学习它。什么是正确的方法,例如正确的书籍,正确的问题,正确的资源,我可以花六个月或一年或两年的时间来学习算法和数据结构?并且以一种可以将问题与数据结构和算法相关联的方式来塑造我的思想。
这是我先前的问题的延续,我曾问过有必要学习算法和数据结构。我觉得是的。
现在,我在这样的环境中工作:我永远不会有机会通过实验或实践或任何作业来学习它。什么是正确的方法,例如正确的书籍,正确的问题,正确的资源,我可以花六个月或一年或两年的时间来学习算法和数据结构?并且以一种可以将问题与数据结构和算法相关联的方式来塑造我的思想。
Answers:
读。
不,真的,读。
阅读可能找到的有关算法和设计的所有内容。那里有很多很棒的书。Sedgewick算法书籍很好。Skiena的《算法设计手册》也不错。这些书以及《神话人月》一书跟随我一起走在我从事的每项工作的每个书架上。
然后问。
与您尊敬的人交谈。问他们有哪些决策点,以及为什么要做出决定。好人总是可以告诉你“我选择X是因为在这些方面它要比A,B好。我本来可以选择C的,但由于这个原因,我觉得这是一个更好的选择”。
接下来,做。
建立东西。构建您永远不会使用的东西。构建您永远不需要的东西。去写一个解决数独难题的程序。现在再去做一次。然后再次。用5种完全不同的方式构建它。构建一个生成Sudoku拼图并将其输入求解器的程序。查找哪个求解器最快。然后...
找出为什么。
“什么”几乎从来都不重要。我的意思是,是的,完成手头的项目至关重要,但是最后,如果您知道“什么”而又不知道“为什么”,那么您可能一开始就不会做。您的简历上有一个要点。去拿一个饼干,祝贺自己。“为什么”比“什么”重要得多。
从记录来看,数独就是一个例子。我花了大量的空闲时间来进行该练习,并在Kongregate上找到了大量的逻辑难题,并且在此过程中学到了很多东西。
http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/
我十二岁的时候在小组课上上了魔术课。魔术师的名字叫乔·卡罗塔。他曾经骗过我一次,我脱口而出:“你是怎么做到的?” 从那以后,他说了那句话,一直困扰着我。
乔的回答是:“迈克尔,如果您真的想知道该技巧是如何完成的,则必须弄清楚自己将如何做。”
好吧,这当然不是我想听的,但这确实使我专注于解决问题。从我的角度来看,这是解决问题的方法。如果我第一次尝试解决该问题时采取了17个步骤并且真的很笨拙,那么好消息是我解决了问题。
然后,通过查看我开发的解决方案并寻找改进该解决方案的方法,我将学习如何简化最终结果。后来,在我的计算机编程生涯中,我发现此过程称为“逐步优化”。我认为今天他们称之为重构。
它起作用了,但是现在仍然起作用。
在这里,以下链接将您重定向到我所关注的MIT最成功的DS和Algorithms类之一。
http://academicearth.org/courses/introduction-to-algorithms
希望您会喜欢这个视频系列。祝好运 !!!
查看您是否可以参加在线课程或获得辅导。失败的话,它会在谷歌快速搜索中弹出。 去年春天,我刚刚上过一堂课(有史以来第一次,我从EE转到软件),如果您对指针的理解很好,就不难上手。
如果您不能上此课程,则建议您参阅《算法设计手册》。有一个免费的PDF 在这里,但它的价值得到真正的图书,如果你计划编程专业。
尝试报读数据结构和算法的本科课程,与其他概念一起学习始终是一件好事。
您总是可以尝试这样的事情:http : //codekata.pragprog.com/
通过思考而不是阅读,我总是学得更好。但是,您应该具有可用的文档/阅读材料来寻找答案。