很多同学看到这一小节,都表示自己对C++不熟悉。甚至有的同学说回头去重新学C++了。我个人认为大可不必。在这里,和大家分享一个我的学习心得。最重要的一条,就是学习千万不要完美主义。
首先,要冲着自己的目标去。相信选择这个课的同学都是冲着学习算法去的。那么就把主要精力放在算法的学习上。课程中代码实现细节上,可能会存在一些不懂的C++专有的概念。比如友元函数。其实理解一个大概,知道是干什么的就好。说实话,我在准备这里的时候也很纠结,一度思考要不要使用一个自定义函数,比如叫showResult一类的直接取代这个友元函数。但是最终为了严谨起见,还是选用了C++的正规写法。但是大家在这一部分完全可以自己灵活处理。我们的目的只是打印出结果。达到这个目的就好了。
我了解到很多同学的首选语言不是C++语言,那么,就不需要把C++语言理解透。我个人是很建议大家能够把算法的思维掌握,用自己熟悉的工作语言再做算法的实现的。在这个课程的后续,会有不少指针对内存的处理,大家了解,是在开空间;回收空间就好。包括函数指针,就是把函数当参数而已,C++的具体写法貌似很复杂,但是接受他,用自己熟悉的语言改造。其实这个过程,也是在锻炼自己能更灵活的使用自己熟悉的语言。
第二点就是,学习不要奔着100分儿去。60分万岁。(注意,是学习,不是考试。)举个简单的例子——背单词。我发现很多同学拿着红宝书,第一个list都没翻过去就放弃了。这是因为每天背完第一个list以后,第二天发现第一个list还是有很多单词没掌握,然后就继续背第一个list。然后一周后,发现自己第一个list都搞不定,觉得英语好难,彻底放弃了。这样是不对的。背了一个list,能多记一个词,都是进步。就算一个词都没记住,模糊有了印象,也是一种进步。我们不应该过度着眼于我们还不够完美。学习不是要么0分,要么100分的。80分是收获;60分是收获;20分也是收获。有收获最重要。但是因为着眼于自己的不完美,最终放弃了,那就是彻底的0分了。
其实学习计算机同理。如果你去听顶级学府,比如斯坦福的课程,就会发现,老师是不可能把所有细节都讲清楚的。大家一定都学过C语言。C语言读取数据,scanf("%d",&a); 这个&a为什么要有个&?可能有的老师会讲什么地址符一类的。但是我认为,顶级的老师会告诉你:先接受他,记下来,scanf中,变量前面就是先加个&。因为如果非要介绍什么地址符,相信99%的同学在初学的时候根本无法理解,反而头大,搞晕了。挫败感强,觉得这东西好难。但其实这个难度是初学C语言没必要接触的难度。等我们真正深入以后,再回头看,就自然而然理解了。千万不要试图一上来就搞懂一切。所谓的“抓大放小”。如果一时没搞懂,问自己一句,这部分内容是不是当前一定要搞懂的知识。如果是,当然要死磕;但如果不是,记录下来,尝试继续前进,以后回头再看。
对于学习的知识,不要妄图一次性的完全掌握。所谓温故而知新。多给自己一些回头看的机会,相信很多东西都会柳暗花明的:)
注:关于这篇学习内容,我后续又写了一份加强版。有兴趣的同学可以在我的公众号收看:
也欢迎大家关注我的微信公众号:是不是很酷
大家加油!:)