路人问:一本数据结构与算法的书,以数组举例,本来数组的概念挺简单的,但是书上写得像一种更广义的数学概念一样,有没有必要去理解?
智者回答:该不该学,用不用学,这种问题,就是属于让别人没法回答的问题。严格意义讲,所有知识都是有意义的,肯定或者否定的回答都是片面的。但具体对于你现在的阶段需不需要学,是因你而异的。我的建议是,你已经有这个困惑了,其实就是不想学了,那就跳过去,等你以后发现这个知识有用,再回头仔细看,捡起来。学习就好比旅行,任性一点儿没关系,向你喜欢的风景出发。有时候回头看,发现自己错过了什么风景,再回头去追寻并不晚。不用害怕错过,重要的是一直在旅程上。
以上这个小对话,正对应着我们在学习中的心态问题。
比如在学习数据结构这门课时,很多同学都表示自己对 C 已经遗忘了。甚至有的同学说要回头去重新学 C 。我个人认为大可不必。
在这里,和大家分享一个我的学习心得。最重要的一条,就是学习千万不要完美主义。
首先,要冲着自己的目标去。数据结构课程就应该把主要精力放在算法思路的学习上。课程中代码实现细节上,可能会存在一些不懂的编程语言的专有概念。其实理解一个大概,知道是干什么的就好。
第二点就是,学习不要奔着 100 分去。我们不应该过度着眼于我们还不够完美。学习不是要么 0 分,要么 100 分 的。80 分是收获;60 分是收获;20 分也是收获。有收获最重要。但是因为着眼于自己的不完美,最终放弃了,那就是彻底的 0 分 了。
如果你去听顶级学府,比如斯坦福的课程,就会发现,老师是不可能把所有细节都讲清楚的。大家一定都学过 C 语言,C 语言读取数据 scanf("%d",&a)
,这个 &a
为什么要有个&
?可能有的老师会讲什么地址符一类的。但是我认为,顶级的老师会告诉你:先接受它,记下来,scanf 中,变量前面就是先加个 &
。因为如果非要介绍什么地址符,相信 99% 的同学在初学的时候根本无法理解,反而头大,搞晕了,挫败感强,觉得这东西好难。但其实这个难度是初学 C 语言没必要接触的难度。等我们真正深入以后,再回头看,就自然而然理解了。千万不要试图一上来就搞懂一切。
就好像大一刚刚入门 C 语言的时候,很多同学在学习过程中就一直在诉苦,说很难,为什么这里是这样写,为什么那里是那样的。力求从一开始就搞明白一切。这样只会越学越体会不到用处。想要更快入门,就多了解怎么用,而不是为什么这么用。会使用工具才能更好地理解工具。
我们没有那么多时间去把东西一开始就完美地弄明白,我觉得这也不现实。但能在一开始优雅地用起来,不是更让人有成就感吗?
所谓的「抓大放小」。如果一时没搞懂,问自己一句,这部分内容是不是当前一定要搞懂的知识。如果是,当然要死磕;但如果不是,记录下来,尝试继续前进,以后回头再看。
对于学习的知识,不要妄图一次性的完全掌握,所谓温故而知新。多给自己一些回头看的机会,相信很多东西都会柳暗花明的。
本文是系列二,之后会陆陆续续补全系列其他。