对算法和数据结构怀揣着敬畏感和神秘感,至今未解开,越学越迷茫
老师您好,目前学习您的课程已经有三两周了。
我今天无意间打开leetcode中的题看的我一脸懵逼,顿时一种挫败感就上来了,有些难过。我是之前一直学习的C语言,后面又学习了java,我现在想把java这一门语言吃透。
之前对算法和数据结构之前怀揣着一种神秘的感觉,感觉是很厉害的东西,第一个问题:觉得学习了算法和数据结构+精通于某一门语言的语法之后就可以解决leetcode上的大多数题目了吗?
目前学习到动态数组这儿,还没有揭开我对算法的神秘感,并没有那种敞开一件新世界大门的感觉,应该肯定是我学的还不到位。我的学习过程是有点完美主义的,学习过程比较慢,但我会再老师讲一个方法前我会先自己动手去尝试做,再对比和老师的有什么不同。
总之当初花钱买课原因也是自己没有合理的规划,不知道该怎么入手去学习,所以那我就按照这个课程去认真的把每一节课学精,然后后续的规划再想把.....就是现在感觉练的有点少,再网上不会找合适的题目,找的题目和学的不符合,不会就会产生焦虑感。
emmmmmmm,第二个问题:就是老师,您能给我的未来学习计算机提一些明确的目标吗,我该朝着哪个方向去攻克它,学完这个课程我会得到什么我又该如何后续的学习,现在学习的这套课程需要边学习边找习题练习,还是把老师给的例题学懂就足够了。我承认自己的学习是有些浮躁的,短时间还行,长时间学习没有实质性的进步就会产生一些恐慌感和焦虑感。
正在回答 回答被采纳积分+1
有很多你的具体情况我不了解。但看你的问题,你应该不是计算机专业的,问的问题中存在一些误区,我看我能不能再回答你的问题的过程中,把这些误区解释明白。
首先,你说的:自己的学习是有些浮躁的,短时间还行,长时间学习没有实质性的进步就会产生一些恐慌感和焦虑感。这完全不是你的问题,也不是浮躁。任何学习的过程都是需要正反馈的,没有正反馈,就会焦虑,迷茫,这太正常了。所以千万不要埋怨自己。
==========
你的第一个问题是:找错了反馈的渠道。其实我在这个课程的一开始就强调过:这不是一个刷题课,这个课程的目的不是让大家随便打开一个 Leetcode 的题目就会做。而是讲解算法和数据及结构的基础。
你的问题:学习了算法和数据结构,就可以解决 leetcode 上的大多数问题了吗?答案是:是,也不是。关键看你怎么定义“学习了算法和数据结构”。但我要很遗憾地告诉你,学习完这门课程,达不成这个目标。
我之前回答过类似的问题,对于计算机专业面试中的算法问题,通常涉猎哪些问题,可以参考这里:https://class.imooc.com/course/qadetail/330554 整体可以分成两部分:经典的算法和数据结构 + 算法设计。这个课程只涉及第一部分,不涉及算法设计(另:这个课程也不涉及图论)。但是,绝大多数算法 OJ 上的问题,以算法设计为主。
但是,不要气馁,我可以很负责地告诉你:
学习这个课程的内容,不仅是进一步学习算法设计的基础,更是进一步学习大多数计算机其他领域的重要基础。有很多同学 Leetcode 都刷了好几百道题了,再回来学习这个课程,还会收获满满。甚至会发现刷了很多题,只是知其然,却不知其所以然。这个课程的内容不是在教你“解题技巧”,而是在真正教你计算机领域非常常用的很多东西的底层原理。我可以毫不夸张地说,从正常计算机专业的工作角度,不会 Leetcode 上的问题很正常,但是这个课程中介绍的很多东西如果没有概念,那是绝对不行的。
比如你已经学完了动态数组,动态数组是什么?Java 中的 ArrayList 就是动态数组;C++ 中的 vector 就是动态数组。这个课程在告诉你这些语言的标准库背后的逻辑和底层原理。你说要精通某一门语言的语法,而实际上,如果你对这门课程中的很多知识不了解的话,根本就无法精通任何一门语言。因为这门课程背后的很多知识,都已经融进了语言中。
那么学习这门课程的过程中,如何知道自己掌握了?其实你不需要找什么练习题。你可以看到,这门课程在花极大的时间,带着你从底层一点一点搭建每一个基础算法和数据结构的逻辑。这些东西就是学习这门课程应该掌握的。学习完这门课程,你真正应该能做到的是:
1)对于很多基础的算法和数据结构,知道其原理;
2)通过其原理,能变写出相应的程序;
3)编写相应的程序,不是被程序,是根据原理,用程序语言书写其逻辑。写出来有问题,很正常,可以通过调试,把程序调通。
换句话说,你已经学完了动态数组,那么现在让你编一个动态数组,你能编出来。那么动态数组,你就掌握了。实际上,这种问题,近乎永远不会在力扣上出现。
==========
你的第二个问题是:有些着急了。不过可能正如你所说,因为没有正确的反馈机制,所以就着急了。
假设解决 Leetcode 上的大多数问题需要的只是储备量是 100 的话,你刚看完这个课程的动态数组部分,基本上你的只是储备量只有 5 左右。相差太大了,需要学的东西还太多了。如果你不是计算机专业的学生,之前没有接触过算法和数据结构的话,你现在的知识储备量,对于 Leetcode 上的很多问题,可能甚至不是"不会做"的问题,而是:连题都看不懂的问题。很多题目的描述中如果不涉及专业术语,你能看懂要求什么,一看题解也很可能就蒙了,因为题解中的解题思路中的术语你根本没有接触过。
(但是,道理上,Leetcode 上大多数简单的题目不涉及什么算法和数据结构,都是直接暴力就可以搞定,应该能做。但是做那种题目意思也不大。)
我的建议是:请你现在忘掉 Leetcode。踏踏实实地学习这门课程。不要想着做题,真正把这个课程中的内容学明白,我敢保证,你对算法和数据结构的理解,乃至于对编程或者对计算机的理解,都一定上一个台阶。
==========
至于你的最后一个问题,关于学习计算机的明确目标。我不确定你要的目标到底是什么意思?更关键的是,我不确定你学习计算机的目的在哪里?是找工作?读研?还是什么?
但不管怎样,我曾经回答的这个问题你可以看一下,在我看来是计算机专业的同学都应该接触一些的领域。尤其是国内的环境,其实面试不完全看算法,对计算机综合能力的要求还是有的。你可以看看这个问答是不是你想要的答案:https://class.imooc.com/course/qadetail/328724
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星