极客时间已完结课程限时免费阅读

97 | 高效学习:源头、原理和知识地图

97 | 高效学习:源头、原理和知识地图-极客时间

97 | 高效学习:源头、原理和知识地图

讲述:杨超

时长11:37大小10.62M

你好,我是陈皓,网名左耳朵耗子。
有了上一篇文章中分享的那些观点,我们来看看应该怎么做。下面是我觉得比较不错的一些学习的方法,或者说对我来说最有效的学习方法。我相信,只要你和我一样,做到的话,你的学习效率一定能够提升很快。

挑选知识和信息源

还是我在《程序员练级攻略》中说的那样,英文对于我们来说至关重要,尤其是对于计算机知识来说。如果你觉得用百度搜中文关键词就可以找到自己想要的知识,那么你一定远远落后于这个时代了。如果你用 Google 英文关键词可以找到自己想要的知识,那么你算是能跟得上这个时代。如果你能在社区里跟社区里的大牛交流得到答案,那么你算是领先于这个时代了。
所以,我认为你的信息源要有下面几个特质。
应该是第一手资料,不是被别人理解过、消化过的二手资料。尤其对于知识性的东西来说,更是这样。应该是原汁原味的,不应该是被添油加醋的。
应该是有佐证、有数据、有引用的,或是有权威人士或大公司生产系统背书的资料。应该是被时间和实践检验过的,或是小心求证过的,不是拍脑袋野路子或是道听途说出来的资料。
应该是加入了一些自己的经验和思考,可以引发人深思的,是所谓信息的密集很大的文章。
顺便说一句,我发现 Medium 上的文章质量比较高,很多文章都 Google 到了 Medium 上。
我在《程序员练级攻略 》后期的文章中罗列了很多文章资源,有的读者很不能理解,他们觉得我多少应该导读一下或是写上一些自己的想法,而不是只是简单地罗列出来。这里请允许我辩解一下,我之所以这样做,并不是因为偷懒,我完全可以把这些信息资料全部隐藏起来,翻译也好,搬运也好,导读也好,自己消化完后再写出来。那么,我可以写出多少个专栏来?
我觉得,只要我有时间,极客时间上的所有专栏都不用写了,我一个人就 OK 了。我可以写得又快又好,而且超出所有的人。那我可以挣到很多钱。但我不想这样,我想把我读过的好的文章推荐给大家,就像推荐书一样。那些是信息源头,已经写得非常不错了,我不用再多废话。而且那些文章底部都有很多的引用,你可以一路点过去。
我想通过这些简单链接的方式,为我的读者打开一个全新的世界,他们可以在这个世界中自己找食吃,而不需要依赖我,这才是我想给大家带来的东西。我不知道,我的那些推荐文章,有没有让你看到了一个很广阔的世界,在那里,每天都在产生很多最新、最酷、最有营养的一手信息,而不是被我或他人消化过的二手信息。
这里,我只想说,对于一个学习者来说,找到优质的信息源可以让你事半功倍。一方面,就像找到一本很好的武林秘籍一样,而不是被他人翻译过或消化过的,也不会有信息损失甚至有错误信息会让你走火入魔。另一方面,你需要的不只有知识和答案,更重要的是掌握学习的方法和技能。你要的是“渔”,而不是“鱼”。

注重基础和原理

我在很多的场合都提到过,基础知识和原理性的东西是无比重要的。这些基础知识就好像地基一样,只要足够扎实,就要可以盖出很高很高的楼。正所谓“勿在浮沙筑高台”。我说过,很多人并不是学得不够快,而他们的基础真的不行。基础不行,会影响你对事物的理解,甚至会让你不能理解为什么是这样。当你对事物的出现有不理解的东西时,通常来说,是因为你的基础知识没有跟上。
在《程序员练级攻略 》一文中,我用了很大的篇幅给出了学习基础技术的路径。只要你努力学习那些基础知识,了解了其中的原理,就会发现这世界上的很多东西是大同的。
举个例子,如果你学习过底层的 Socket 编程,了解多路复用和各种 I/O 模型的话(select, poll, epoll, aio, windows completion port, libevent 等),那么,对于 Node.js、Java NIO、Nginx、C++ 的 ACE 框架等这些中间件或是编程框架,你就会发现,无论表现形式是什么样的,其底层原理都是一个样的。
无论是 JVM 还是 Node,或者是 Python 解释器里干了什么,它都无法逾越底层操作系统 API 对“物理世界”的限制。而当你了解了这个底层物理世界以后,无论那些技术玩成什么花样,它们都无法超出你的掌控(这种感觉是很爽的)。
再举一个例子,当学了足够多的语言,并有了丰富的实践后,你开始对编程语言的各种编程范式或是控制流有了原理上的了解,这时再学一门新语言的话,你会发现自己学得飞快。
就像我 2010 年学习 Go 语言一样,除了那些每个语言都有的 if-else、 for/while-loop、function 等东西以外,我重点在看的就是,出错处理是怎么玩的?内存管理是怎么玩的?数据封装和扩展怎么玩的?多态和泛型怎么搞的?运行时识别和反射机制是怎么玩的?并发编程怎样玩?……
这些都是现代编程语言必需的东西,如果没有,那么这个语言的表达能力就很落后了。所以,当知道编程语言的本质和原理后,你学习一门新的语言是非常非常快的,而且可以直达其高级特性。
最最关键的是,这些基础知识和原理性的东西和技术,都是经历过长时间的考验的,所以,这些基础技术也有很多人类历史上的智慧结晶,会给你很多启示和帮助。比如:TCP 协议的状态机,可以让你明白,如果你要设计一个异步通信协议,状态机是一件多么重要的事,还有 TCP 拥塞控制中的方式,让你知道,设计一个以响应时间来限流的中件间是什么样的。
当学习算法和数据结构到一定程度的时候,你就会知道,算法不仅对于优化程序很重要,而且,会让你知道,该如何设计数据结构和算法来让程序变得更为健壮和优雅。
有时候,学习就像拉弓蓄力一样,学习基础知识感觉很枯燥很不实用,工作上用不到,然而学习这些知识是为了未来可以学得更快。基础打牢,学什么都快,而学得快就会学得多,学得多,就会思考得多,对比得多,结果是学得更快……这种感觉,对于想速成的人来说,很难体会。
这里我想再次强调一下,请一定要注重基础知识和原理上的学习!

使用知识图

先讲一个故事,2000 年我从昆明到上海,开始沪飘的岁月。刚到上海,找不到好工作,只能大量地学习和看书,C/C++/Java,TCP/IP,Windows 编程,Unix 编程,等等。结果呢,书太多了,根本看不过来。我想要更多地掌握知识,结果我发现以死记硬背的方式根本就是在使蛮力学习,我很难在很短的时间内学习很多的知识。
于是我自己发明了一种叫“联想记忆法”的方法,比如,在学习 C++ 的时候,面对《C++ Primer》这种厚得不行的书,我就使用联想记忆法。
我把 C++ 分成三部分。
第一部分是 C++ 是用来解决 C 语言的问题的,那么 C 语言有什么问题呢?指针、宏、错误处理、数据拷贝…… C++ 用什么技术来解决这些问题呢?
第二部分是 C++ 的面向对象特性:封装、继承、多态。封装,让我想到了构造函数、析构函数等。构造函数让我想到了初始化列表,想到了默认构造函数,想到了拷贝构造函数,想到了 new……多态,让我想到了虚函数,想到了 RTTI,RTTI 让我想到了 dynamic_cast 和 typeid 等。
第三部分是 C++ 的泛型编程。我想到了 template,想到了操作符重载,想到了函数对象,想到 STL,想到数据容器,想到了 iterator,想到了通用算法,等等。
于是,我通过“顺藤摸瓜”的方式,从知识树的主干开始做广度或是深度遍历,于是我就得到了一整棵的知识树。这种“顺藤摸瓜”的记忆方式让我记住了很多知识。最重要的是,当出现一些我不知道的知识点时,我就会往这棵知识树上挂,而这样一来,也使得我的学习更为系统和全面
这种画知识图的方式可以让你从一个技术最重要最主干的地方出发开始遍历所有的技术细节,也就是画地图的方式。如果你不想在知识的海洋中迷路,你需要有一份地图,所以,学习并不是为了要记忆那些知识点,而是为了要找到一个知识的地图,你在这个地图上能通过关键路径找到你想要的答案

小结

总结一下今天的内容。首先,我强调了,挑选知识和信息源的重要性,因为优质的信息源可以让你事半功倍。其次,我认为,一定要注重基础和原理,基础打牢,学什么都快,而学得快就会学得多,学得多,就会思考得多,对比得多,结果是学得更快。
最后,我指出,学习时一定要使用知识图,学习并不是为了要记忆那些知识点,而是为了要找到一个知识的地图,你在这个地图上能通过关键路径找到你想要的答案。我相信,只要掌握了好的方法,你能做到的话,你的学习效率一定提升很快。
下篇文章中,我将接着介绍几个不错的学习方法。希望对你有帮助。
下面是《高效学习》系列文章的目录。
分享给需要的人,Ta购买本课程,你将得29
生成海报并分享

赞 52

提建议

上一篇
96 | 高效学习:端正学习态度
下一篇
98 | 高效学习:深度,归纳和坚持实践
unpreview
 写留言

精选留言(94)

  • ZYCHD(子玉)
    2018-08-30
    耗子叔是真心对待订阅的读者,一定努力学习。

    作者回复: 谢谢,我感动坏了

    137
  • 二胡1999
    2018-08-30
    这句话是这个专栏里面,不对,应该说是整个极客时间所有专栏里面,最霸气的一句话了:“我觉得只要我有时间,极客时间上的所有专栏都不用写了,我一个人就 OK 了。我可以写得又快又好,而且超出所有的人。”大赞! 另外想问一下:不知道有没有第二季?

    作者回复: 汗,但这不是我原来的意思啊!我是反讽啊……

    71
  • 微leng
    2018-08-30
    读耗子叔的文章,能读到对读者得尊重,能读到老师对学生的谆谆教诲,在这个复制拷贝的年代,遇到这样的作者,是我们的幸运,谢谢老师。

    作者回复: 看到你的留言,我也感动坏了

    70
  • 右耳朵猫咪
    2018-08-30
    耗子叔在上海呆了多久才找到好工作?

    作者回复: 右耳朵猫咪,我当时不是缺工作,而是缺好工作,当时找到的是连温饱都有点困难的工作。1500的月薪,租房800元……一年半后,我能找到月薪5000的工作了,又过了半年,找到了月薪8000的……

    共 5 条评论
    43
  • Philon
    2018-08-31
    耗哥,我是你老乡,刚满30,从毕业到现在就呆过两家公司,现在这家一呆就是6年不问大环境怎么样,当了个小中层后看到公司内斗很严重真心累啊,想走却突然发现自己除了Linux+c和web开发之外技术面很窄(我做嵌入式软件,昆明这个岗位真心不多啊),现在以一个初学者的心态在重学java和spring,重新巩固自己的知识体系,感谢您推荐的书!

    作者回复: 加油老乡。Linux+C会对你未来会很有帮助的

    20
  • 道行三易
    2018-08-30
    非常感谢老师的分享。深深的理解到老师提到的基础原理基础知识的重要性。就像上大学时对C指针理解了就对java传递引用变量就有深入的理解;从汇编层面理解了C函数的调用机制就理解了递归机制。我一朋友是搞逆向工程的,他对我说,如果逆向搞得好,其他高级语言,框架也不会差。我想请问下老师,他说的这个道理和老师说的基础知识的重要性本质上是一样的吗?如果从逆向角度去学习基础,老师觉得这个方法可行吗?谢谢老师

    作者回复: 本质上,你在问:“为什么要玩引用而不是指针”,为什么“函数调用慢”之类的问题,你还可以问,为什么TCP要有状态机,这会让你了解更多的网络底层。你的这个方法非常好,也是我喜欢用的,坚持住!

    16
  • webwombat
    2018-09-02
    学coding想绕开英文就如同写程序不想学算法,或者…打算结婚但是不想入洞房…可是总有人打算这么做…

    作者回复: 应该是入洞房不想谈恋爱,嘿嘿

    共 2 条评论
    13
  • ken
    2019-05-10
    可能我买这个专栏比较晚,但是给了我非常大的启发。我做了6年程序,1年java,5年php,学习过python,go语言,结果我还是一只菜鸡。我能很深刻的体会到老师说的基础不行,学东西慢,并且无法举一反三,东西永远停留在表层的感受。可能我年龄也相对大了起来,但是没有放弃,也正是因为最近半年时间找到了真正的动力,开始努力学习起来,看到老师的专栏,感谢🙏。
    共 4 条评论
    12
  • 老K
    2018-09-02
    正在自考,数据结构原理,挂了三次了~~~燃起斗志!
    9
  • slam
    2018-08-30
    受益匪浅,感触比较深的是这两三年,为跟上技术的发展,去系统的接触微服务、ML、区块链等,才发现英语不行对查找并获得最有价值的内容的阻碍,经常是筛选的好内容原来只是翻译,而且还只是翻译一部分,另外也发现阻碍学习的不是工作忙时间不够,反而是基础不扎实,学习新系统新框架新语言不得不一次一次去翻查操作系统原理、网络协议、语言特性,尤其痛苦学习ML,完全暴露数学没基础,唯独有安慰的一点也是如耗子哥所说的,面对知识的海洋,要有知识的地图,自己现在也是这么做,把一个大的领域放入思维导图,梳理的知识往图上挂,至少感觉可以沉下来学了
    展开
    共 1 条评论
    10
  • caohuan
    2018-10-22
    看完 耗子哥 的 专栏,发现 自己 被社会 抛弃好几个世纪了-好悲催,因为 现在我基本在百度,还有自己一直没有航海图,所有在职场的海洋中的跌跌撞撞,导致我 只有疲劳 没有功劳,现在知道错了,就得改进,就像 之前 自己不写设计文档,不会UML,做完项目 回头看 早忘记当初自己的 业务和设计 思路,看见 前辈的规范化的各类文档,才知道 自己太low,知错得改,耗子哥,我这样应该还是有救的吧。
    共 2 条评论
    9
  • 小夜
    2018-09-01
    从2010年开始看coolshell,这么多年我的技术观一直受耗子哥的影响。现在想来,如果没有耗子哥,也许我早就放弃对技术的追求了。我要衷心感谢陈皓😊
    9
  • 中山浪子
    2018-08-30
    知识图谱感觉是在画一个思维导图,把一个东西(比如某个语言)拆分细化,填上空白。自己对每一个分支脉络都有所把握,也就掌握了一门语言。

    作者回复: 可以用思维导图。我后面的文章会有教你怎么画

    8
  • 彭发红
    2020-06-08
    啧啧啧,早遇到你。今天我就叫彭发财了
    7
  • Luke
    2018-08-31
    现在能达到耗子哥这样深度和广度兼具,同时对后生循循善诱的大牛真的不多,点个赞👍🏻
    7
  • Geek_8cf9dd
    2019-03-31
    耗子哥,工作八年多,大部分时间在外包公司做开发,技术没深度,感觉虚度了几年光阴,现在在恶补基础,很高兴认识你,找到了继续学习的动力
    4
  • zart
    2018-10-02
    请教耗哥个问题: 如果是您,怎么处理现在公司996的时间占用和需要打基础学原理需要大量时间,两者的矛盾
    共 3 条评论
    5
  • 小鱼儿
    2018-08-30
    老师,有没有基础和原理的知识图谱分享?知识地图真的很重要,至少不会迷失方向

    作者回复: 你试试自己画一个,我再来帮你提建议。😊

    5
  • 昇、
    2018-09-02
    耗子哥,我想知道你列的书单是不是尽量只看英文版的?不要看中文版?

    作者回复: 书不一定。但是文章还是看英文的。

    4
  • 天行者阿七
    2020-04-27
    真的感受到了作者的用心,对比自己,感觉自己好多年都虚度了,浪费了太多时间,毫无长进。
    2