Skip to content

持续学习

假如读者喜欢学习新技术,那么描绘无数种广袤的前景是不难的事情。读者可以学习传统的前端后端框架1,搭建非常炫酷的网页(比如本博客就是在模板的基础上加入了大量自己的修改形成的);也可以深入 Linux 系统2,折腾 ArchLinux3,搭建美观且实用的开发与生产环境;也可以苦练算法,了解那些前人创造的精妙思想,并且在算法竞赛上一较高低;或者学习大模型的一系列技术栈,训练自己的模型,并且在科研上有所建树。同样的路还有无数条,学习计算机图形学4了解渲染的机理;学习 CPP5 或者 C#6 之后用 Unity7 或者 Unreal8 搭建自己的独立游戏,甚至参加 GameJam9,和其他开发者们即兴创作;甚至是研究 TCS10 或者计算机体系结构,有趣的知识是无穷的,等待着你的探索。

经过了笔者的一系列报菜名中,那些热爱学习的读者心中不难涌现出一团烈火,想要用自己有限的大学时光,充分了解这些技术,把自己发展成一个更强大的人。但是在经历了无数学弟学妹的请教以及后续的观察之后,笔者不得不得出一个结论,在绝大多数时候,兴趣所带来的学习动力都是不能持久的,然而只有持久的学习才能让你真正掌握某个技能。而这一切的关键在于正反馈。

记笔记是笔者推荐的一种极佳的学习方法。

笔者不了解读者在高中期间对于记笔记的看法,例如是否会在复习的时候回顾这些笔记,或者认为记笔记是否是一种累赘,但是在高中的生活中,笔者从来没有记过一行笔记。

尽管如此,笔者依然推荐在大学期间使用记笔记作为最核心的学习方法。

一种广泛的论调是,大学的学习以自学为主,这一点是不可置否的,而在自学的过程中,能否让自己获得持续学习的动力,这成为了自学过程中最关键的一环。

一种常见的现象是,每每开学,无论之前在高中,还是如今的大学,都有很多同学向笔者咨询学习相关的事宜,仿佛准备大干一场,在学业中一展宏图。而在开学两个月之后,一般他们的朋友圈或空间便被二次元或者现充生活占据了,而全然不见当初的拼搏模样。有时候学习的难点并不在于如何高效的学习,反而在于更为基础的一点:如何坚持学下去。

假如并非十分自律的人,在学习的过程中,毫无疑问,正反馈是十分重要的。适当的正反馈不但可以让读者有学习的动力,也可以让读者保持学习的节奏。

令人遗憾的是,在大学中,正反馈往往不是如此的常见。在不经常存在考试,甚至课程质量良莠不齐的大学当下,在学习中获得的反馈是十分难得的。更加经常的情况是,你有数不尽的内容可以学习(学完课内可以拓展课外知识),但是每每学习结束之后你并不知道自己的学习是否为自己带来了改变,这与高中阶段学习少量的内容,但是在重复性的刷题以验证自己的学习成果不同,而一味地向前冲有时会带来迷茫,从而让读者失去兴趣。

关于笔记的用处,不排除一些人通过记笔记起到加深记忆,以及获得一手的复习资料的作用,但是在此之外,记笔记也是一种记录,如日记一般,可以告诉读者:“我今天学习了很多内容”。

故也便不难阐述记笔记带来的正反馈了。事实上,正反馈的缺失往往来自于难以对自己的学习成果带来一种定量的总结,这是显而易见的,因为并不存在大量的考试,而学习的内容也远远多于考试的内容。但是通过频繁的记笔记,笔记的字数以及内容的积累可以带来一种最为直观的反馈,尤其是当读者自己的笔记从千字到万字再到数十万字的时候,便可以很明显的感知到,如今的自己已经今非昔比。

在后文中,笔者会介绍自己使用的工具流。也就是 Obsidian,以及使用 Markdown11 进行记录笔记。使用Markdown 进行笔记的记录是一件非常常见的做法,这一属于程序员的记录语言提供了极佳的记录效率以及内容的规整性,而在如今的编程世界中,基本上全部的文档,包括本篇博客的背后都是 Markdown 正在书写。

尽管我们有了记笔记这一带来正反馈的利器,但是在学习的过程中依然可能存在不少的挫折,使得读者难以集中精神,或者最后也会半途而废。怀着满腔热血冲进一个自己喜欢的领域,即使自己一无所知,但是闷头苦学,这种想法毫无疑问是不可取的。

事实上每一个领域,伴随着它涉及的知识与你目前掌握的知识面的交集越来越少,越来越多的内容将涉及不断地自我递归式的学习,即对于自己不懂的内容进行查询,然后再将查询内容中不懂的内容进行查询,以此类推,直到了解整体的知识脉络。这种频繁的递归式学习只会让你的学习负担越来越大,而难以对于整体的知识脉络有一个清晰的认识。

我们推荐在一些局部使用递归式学习,这有助于你在小范围内规避多余的学习内容,而聚焦在必要的内容上,但是当将视野放大到整个领域之后,我们需要的是如庖丁解牛般的游刃有余,将领域的大块知识进行分解,了解自己需要掌握的知识边界,再自底向上进行学习。

没有了解全貌,就难以进行笔记的记录,至少大多数人都难以提起兴致记录笔记。人们往往因为内心清楚自己对于这部分知识还没有完全掌握,便断定自己梳理出来的记录也一定毫无章法可言,从而拒绝进行笔记的记录,而笔记的缺失有进一步带来了正反馈的缺失,从而影响了学习的节奏。

在学习之前,读者有必要详细了解自己需要学习的领域。就像之前所说到的那样,你需要通过提问或者搜索来让自己先了解某个领域的学习内容,以及如何阶段式的完成一个一个目标。尽管其中的很多中间状态并不是我们目的所在,但是阶梯式的划分有助于成就感的增加,而且在前人基础上总结出来的阶梯会使得学习更具条理性,并进一步降低学习的门槛。在后文中会详细介绍人工智能这类专业如何进行详细的阶梯式分解,并且假如上且有余力,给出一些其他的领域的介绍。

行文至此,读者们已经开始逐渐接近笔者的思想了,我们在追求的是一种高效的学习方法,并且可以长久进行学习,而在这一语境下,听课是一种糟糕的学习方法,也是一种平庸的学习方法。

这并非一种暴论,笔者并不是高傲地站在一种高位者的视角上,将那些只会听课的学生们评价为庸才与平庸之辈,事实上他们之中不少人都天赋异禀,但是学习的方法或许不是最本质的。我们需要意识到,学习这一过程本质上就是接受知识、提出疑问、获得答案的过程,并且在这个过程中不断迭代自己的认知,从而获得更好的理解。提出疑问以及获得答案的过程往往是通过自己的悟性以及之前学习的知识,包括提问以及请教他人,而接受知识的速度往往很大程度上取决于你受到的教育的知识密度。

回想一下课堂的场景,即使是最为经验丰富的老师,也不可避免地要解决一个难题,他需要将文字甚至符号化的知识进行口述,并且在课堂中再现接受知识、提出疑问、获得答案的循环,这一循环需要关照课堂里面的每一个学生,自然也包括某一位悟性比较差,并且距离前排比较远的同学。优秀的教师在教授知识的时候总是娓娓道来深入浅出,并且受到同学们的广泛好评,但是读者需要注意的是,我们在追求的本质上只有一件事情,那便是尽可能高效的获取知识,而上述的过程显然不是最快的。

一个有趣的事实是,假如说读者在期末周进行过考试前的突击,对于那些广泛存在在各个专业之间的通识课程,网络上往往充斥着无数的速通课,那些仅需不到三四个小时的视频便可以概括你横跨整个学期,高达四个学分的大课,并且假如选择恰当,几乎可以 cover 老师课堂上讲解的 99% 的内容。这个现象从侧面反映了常规课堂中知识密度之低,其中充斥着提问、重复的回顾、对于大量练习题的讲解甚至还有课堂小测。

事实上,我们对于知识的掌握程度的需求其实更加朴素,掌握知识的大概,并且在需要运用这一知识的时候,直到如何搜索关键词,再次搜索出来的时候知道如何去用,毕竟实践是一场开卷而非闭卷考试。用一个更加恰当的比喻,我们只需要学习到可以抄懂答案的程度,而不是独立解决难题的程度,在大多数时候就已经足够。

一种笔者推荐的最高效的学习方法当然是看书,书籍中包含最凝练的符号化表达,而同时,一个令人惊喜的事实是,虽然说那些符号乍一看令人生畏,但是假如沉下心来仔细阅读,事实上一切内容也并没有那么难懂。

  1. 前端框架是用于构建网页界面和交互效果的工具,常见的有 React、Vue 等,负责用户在浏览器中看到和操作的部分;后端框架则用于处理服务器端的逻辑,如数据存储、接口响应等,常见的有 Django、Express 等,负责支撑整个应用的功能实现。

  2. Linux 系统是一种基于 Unix 设计思想开发的自由开源操作系统,具有高稳定性、高安全性和良好的可定制性,广泛应用于服务器、开发环境、嵌入式设备等领域,是现代互联网和云计算基础设施的重要组成部分。

  3. Arch Linux 是一个轻量、灵活、以滚动更新为特征的 Linux 发行版,强调极简主义、用户控制与 KISS(Keep It Simple, Stupid)理念。它适合有一定技术基础的用户,提供几乎纯净的系统环境,用户通过手动配置构建出完全符合自身需求的系统。

  4. 计算机图形学(Computer Graphics)是研究如何使用计算机生成、表示和处理图像与几何信息的学科,涵盖图形建模、渲染、动画、图像处理等内容,广泛应用于游戏、电影特效、虚拟现实、CAD、科学可视化等领域。

  5. C++(CPP) 是一种通用的编程语言,兼具过程式和面向对象编程特性,以性能高、可操作性强著称,广泛应用于系统开发、游戏引擎、图形渲染、嵌入式系统等对效率要求极高的领域。

  6. C# 是由微软开发的现代化、面向对象的编程语言,运行在 .NET 平台上,语法风格与 C++ 和 Java 接近,广泛用于桌面应用、Web 开发、企业级软件以及 Unity 引擎中的游戏开发。

  7. Unity 是一款由 Unity Technologies 开发的跨平台游戏引擎,以易用性强、上手快和良好的社区支持著称,广泛应用于 2D/3D 游戏开发、虚拟现实、交互式应用和教育可视化等领域,支持使用 C# 进行脚本编程。

  8. Unreal(全称 Unreal Engine)是由 Epic Games 开发的高性能游戏引擎,以强大的图形渲染能力、蓝图可视化编程系统和跨平台支持著称,广泛应用于游戏开发、影视制作、虚拟现实和建筑可视化等领域。

  9. GameJam 是一种限时游戏开发活动,参与者需在规定时间内(通常为 24 至 72 小时)围绕指定主题独立或协作完成一款可玩的游戏,旨在激发创意、锻炼开发能力,并促进游戏开发者之间的交流与合作。

  10. TCS(理论计算机科学) 是研究计算本质及其基本原理的计算机科学分支,涵盖计算模型、复杂性理论、算法设计与分析、可计算性理论、自动机与语言理论等内容,是整个计算机科学的数学基础和理论核心。

  11. Markdown 是一种轻量级标记语言,用于使用纯文本格式快速编写格式化内容,如标题、列表、链接、图片和代码块。它语法简洁,易于阅读和编写,广泛应用于文档写作、博客撰写、代码说明和 README 文件等场景。