HOME/Articles/

学编程,应该看书还是看视频?

Article Outline

这是一个特别好的时代。

在线课程、直播、播客、短视频……现在有足够多种资源来帮助我们学习新知识、掌握新技能。

只要你想,你甚至可以在著名视频网站 Pornhub 上学习考研数学,生活学习两不误。

null

比如,我有一个互联网业的朋友每天都要听播客,他说这是他了解行业动态的渠道。

另一些则很喜欢视频课程。前几年有一位想学 Python,问我的第一个问题就是“有什么免费的视频教程吗”。

嗯……我推荐不出来啊,因为我认为要学一门语言,那看官方提供的资料是最不容易出错的做法。但这让我陷入困境:

  • 如果我随便找个视频推荐了,那是对人不负责了
  • 如果我给他推荐成体系的课程,恐怕是要永远停留在下单界面了
  • 如果我跟他说看文档就很好,这又不是他想要的了

想学轻松又想学得快还要免费,比又想马儿跑又要马儿不吃草还要让人为难呢。

在斟酌片刻之后,我还是选择小心翼翼地说官方文档教程就很好,比如 Python 官方教程

看书和看视频的区别是什么?

有的朋友以为问题在于“效率”:对效率有追求,会偏向于读书;对效率没有追求,会偏向于看视频。

当然这是不对的。在学习上,人人都追求高效率

我认为阅读和视频主要差异有这么些:

知识掌握程度

  • 短小的视频教程让你迅速了解一个陌生领域的概貌
  • 阅读书本需要艰辛的过程,不过能让你深刻理解其中的概念和问题。

被动与主动

  • 看视频是一种被动学习方式,更适合跟着学
  • 阅读是一种主动学习方式,更适合自学

内容形态

  • 视频包含动态影像和声音,调动多感官利于记忆和理解。
  • 阅读实体书本触感强烈,能留下深刻的印象。

组织方式

  • 视频大部分是线性的,编排过的;没有分叉,但也不会有惊喜。
  • 书本会给你很多个起点,很多条支线,需要通过理解去补全其中的空白;当然,也会在其中发现意外的好玩的东西

学东西,应该看书还是看视频?

对比以上差异会发现,看书和看视频不存在孰优孰劣,而是各有千秋。

什么时候选择看书,什么时候选择看视频,应该取决于学习这件事的各类外部原因:时效上,要长期记忆还是临时用用;内容上,学的编程还是外语还是音乐;目的上,要备考还是要学着玩;方式上,自己学还是有老师教。

对我来说,所有“吃饭的工具”——例如计算机——我都会在二者之间选择阅读。因为我需要:

  1. 深刻地理解其中的概念和问题,而不是一瞥而过;
  2. 其中的备注、脚注、参考文献可以拓宽对该内容的理解;
  3. 拥有主动思考的空间。

既然是吃饭的工具,那么对于深入地掌握这些知识是必须的,否则会吃不上饭。

相对地,如果我只是要快速获得知识,或者单纯为了愉悦,我会选择视频。

比如做菜,我会直接看视频,因为跟着做很便利,而我并不需要深刻理解其中做法的深意。

不过在严肃学习中,视频并非一无是处。例如我去年推荐的视频“经济机器是怎样运行的">经济机器是怎样运行的” 就是一个很好的例子。

学编程,应该看书还是视频?

在回答这个问题之前,先看看什么是编程。

所谓“编程”,字面上的意思,就是“编写程序”:你需要让计算机按照你的意愿来运行,不能告诉计算机你要什么,要告诉计算机怎么做(除非你学的是 Prolog 语言)。

所以在编程之前,你必须对达成你的目的的流程、条件、预期结果都了然于胸。这也就意味着,每一次开始编程之前,你都要针对要解决的问题进行深入的思考,这个思考没有老师能帮你,因为每次解决问题是一个完全独立的、主动的过程。

视频课,从形式上就很难让你主动思考。所以我认为视频课不是最好的学习编程方式。

我们学计算机的人,都觉得“谭浩强”系列教材很“不好”。怎么不好呢,有明确的理由:作为书本,它居然不深入、不准确、不能帮助学者深刻理解。

同样地,我会觉得大部分此类视频课程也都很“不好”。怎么不好呢,也有很明确的理由:作为视频,它天生不深入、不准确、不能帮助学者深刻理解。

所以啊,我建议学编程是看书的。

是否有更好的学法?

有啊。

首先,学了东西就得用啊,那最好的方式就是练习,练习,练习,反复练习。

其次,学编程是有方法论的:

  1. 思考解决问题和达成目的的正确步骤
  2. 将这个步骤翻译成计算机能理解的语言
  3. 理解并且识别出不同问题和目的背后的抽象问题
  4. 针对抽象问题设计和实现通用解决方案
  5. 组合运用通用方案来解决更加复杂问题和达成更加复杂的目的

发现没有,狭义的“编程”,指的是步骤 2;而广义的“编程”,指的是一个完整的自底向上建立思维方式的过程。在这个过程中,你永远都在考虑如何解决问题,以及如何更好的解决问题——也就是说,你得不断地动手实践。

所以,我现在真正要推荐的是 Jupyter Lab,它是一个非常好的学习编程的环境,可以组合文档、代码、运行结果、图表等等在一个文档中。可以支持多种语言。可以根据你的想法,随意动手实践,直接就能看到结果。

null

实际上,现在很多机器学习工程师都会先用 Jupyter 来做实验,然后再写成真正的符合生产要求的代码。他们的工作就是学习。

不过在自己电脑上搭建 Jupyter 还是有一些难度的。那么如果想用 Jupyter 进行有体系的学习,又不想自己搭建,怎么办呢。

也有办法,你可以去 XUE.cn 学习。

如果你看过哈利波特,应该记得魔法界报纸是活的。报纸上图片中的人物会活动。

null

XUE.cn 提供的就是“活的”编程书——你不但可以阅读这本书,还可以直接在书本上改代码、写代码、然后看看效果怎么样。

null

而且在 XUE.cn 你可以得到更多,他们承诺在未来,会提供:

  • 更多内容:可动手实践的书籍、习题、知识点测验
  • 记录成长:个人学习行为记录与成就系统
  • 课程问答:围绕章节或知识点展开的问答与讨论
  • 学习攻略:社区参与贡献的学习攻略
  • 内容管理:载入管理分享个人 .ipynb 文档(就是 Jupyter 的源码文件)
  • 共同进步:加入学习计划和互助小组

既然有现成的,而且还很好用,为什么不用呢?