和传统学科相比,计算机的资料实在是太多了,互联网时代井喷的视频教程和书籍更是五花八门。那么我们应该怎样合理的利用视频与书籍学习计算机呢?这里我拿基础c++学习举例。
首先是学习c++基础语法,正常渠道的教程一般会有学校的课程,网络的课程,还有c++经典书籍(典型的就是c++primer)。初学者很容易做的一件事便是,到网络上到处收集各种各样的收费资料,越贵的越好,越大而全的越好,个人认为这是一个误区,对其他行业也是这样,只不过计算机有其特殊之处。第二个误区就是拿到像c++primer这样的书就开始硬啃,然后没啃几章就放弃了,就像背英语单词表一样,在总是背abandon,然后就abandon了。就我来说,以下的学习方式是我认为比较高效,也是比较舒服的。
首先,给所学的知识分类,明确要学的哪一些知识。
拿c++举例子,我把c++分成4部分,分别是:
- 基础逻辑语法。这部分就是if for switch那一些。
- 内存相关。这部分主要是指针与引用以及智能指针等知识。
- 面向对象。这部分就是经典的面向对象的知识。
- 模板。 template相关。
然后针对这一分类,看看哪一部分是暂时不想学习或者不用学习的,当然不同的人对知识点的分类也可能有所不同。可能有人问要是不懂如何分类怎么办?这里有一个诀窍,看经典书籍的目录加上搜索引擎的帮助,比如搜索知识点分类或者知识的思维导图,一般的思维导图总是会一层一层的往下展开。这样就有了学习的具体方向。
然后,针对每一个个小而精的点进行学习和练习。
比如我对于内存的理解很浅显,指针引用搞半天都搞不懂,书呢,又看不太下去,这时候该怎么办呢?我的建议是直接在B站上搜索相关的知识点,比如深入理解c语言指针,一般排名靠前的就是讲的比较好的。不知道是不是一种规律,大而全的动不动几百上千小时的视频对某个知识点的深度往往比不上10分钟左右的小视频,因此我在开头的时候才说某些噱头很大的全套教程是鸡肋。论知识的完整度,比不上经典传统的书籍目录,论小知识点的深度,比不上B站各位有才的up主免费的小课程。
看书和视频时应该最注意代码,有必要的话一定要自己敲一遍代码!代码才是帮助理解最有力的武器。
个人感觉这是最重要的,不知道为什么我总是很讨厌看别人的代码,书中的代码是这样,某些著名的项目代码是这样,甚至自己之前写的代码也是这样,就像看英文阅读题一样超级讨厌,但是最难接受的的往往就是真理。
在这里举一个例子。c++17入门经典这本书里第11章 11.4.7这一节,讲了explicit
关键字(虽然我个人觉得这个关键字比较鸡肋),这个关键字定义的功能是,当类的构造函数只有一个参数时,编译器可以使用这种构造函数把参数的类型转换为类类型。这样说是很难懂的,但是如果认真看一下它的代码,那么看懂代码之时,就是理解关键字之日。
项目应该怎样寻找学习
什么时候代码能力会突飞猛进呢,个人觉得做一个项目让人抓耳挠腮,失眠睡不着的时候,基本就是一段很大的成长。所以按道理说应该尽可能的找一些比较有挑战性的项目来做,但是项目太难就会打击人的积极性,难的项目很容易找的出来,合适自己的项目就很难了。可以看看很多人推荐的项目,或者没事的时候也可以在GitHub上闲逛,看得多了总会找到一些宝贝。
时间安排
之前学习某些比较难的知识点比如动态规划,模板的时候,总是想着拿出一个完整的时间,认认真真的完全搞懂。现在觉得这种方式学习完全就是bullshit,先不说一次搞懂是什么牛马想法,只要是这样打算的,那往往一个难点会一直被拖下去,或者时间拿出来了,看了几眼,哎说的什么玩意,转头就去刷抖音B站。时至今日,我才对鲁迅先生那句,时间就像海绵里的水,挤一挤总会有的。不是说我们每天要忙忙碌碌每时每刻都要过的“有意义”,而是不管时间长短,都是有意义的。拉屎的时间如果无聊,可以玩一会手机,看一会博客,或者发呆思考人生,但是像这样的“短时间”并不比完整的大段时间不值钱,反过来说刻意安排的一段时间,比如一整个上午,可未必比早起一个小时金贵,所以不管怎样,要做什么就从现在做起来吧。
做一件事最好的时间是10年前,次之是现在,最差的是当我做完某某事后空闲的时间。