什么是好的课程-一点思考
在帮老师审核《编译原理》课程AI生成视频的录音和讲稿是否对应,有几点感慨。本科以来,我没有思考什么是好的课程(大概是高中之前好的讲课方式习惯了,所以很多时候我很奇怪为什么大家都觉得某些课很烂),这里写下一点思考。此外,如何找到好的课程,也是一个很大的问题。
初中时代的课程
初中时代,实际上是我交互最多的时候,尤其是在数学课上。对于一个证明,王mj和另外一个老师(忘记名字了,朱??)会在纸上写详细过程,然后问大家一些过程是否正确,同学们也会有相应的回复。老师也会提出一些问题,底下的同学也会回答。这种积极的互动方式大概在之后的阶段都没有出现了。
高中时代的课程
我是乡镇读的初中,所以不知道城市(虽然我读的高中所在的也只能算一个小县城了)里面的同学是怎么上课的。也许是初中的上课体验过于特殊,所以在数学课上当朱jh老师提问的时候,我很惊讶大家居然都是沉默,没有反应和回复。水哥和春哥的互动还是很多的。
大学时代的课程
PPT reader的重灾区以及缺失的attention。
不同于高中的课程,大学课程更多使用了一块大的幕布和PPT展示。虽然有激光笔的帮助,但是激光笔晃来晃去实在是很难让人集中注意力。在黑板上写字确实会效率比较低,人手的范围也不够大,但是真是这种慢速给了人接受的时间和集中注意力的时间。人的注意力是有限的(attention is all you need),所以更少的指示抖动(即人手抖动相比于激光笔抖动)实际上在帮助学习者更好学习理解新的观点和内容。
此外,大学也是静态PPT的重灾区,很多时候,只是展示了一些静态的知识点和一些静态的关系,却缺失了动态的生成过程。可以说这是一种抽象,但是人要理解抽象必须从具象入手,即不同对象之间的关系是怎么建立的。这就需要动态的一些演示。而动态演示最简便的方式也就是人在黑板上写字画画。slides可以展示动态效果,但这受限于工具(只要是工具,就一定有其局限性,这点在 如何记笔记 中也有提到),包括人需要掌握这些工具,人需要检查效果是否符合预期。此外在USTC这个重视科研但对教育激励政策很少的条件下,大多数教授更倾向于减少在PPT上的投入,所以也就出现了PPT reader的情况。人都是有精力限制的,在当前环境下,受到各种限制(包括这次AI生成视频)以及科研成果的要求,很难做到兼顾。
AI生成教学视频的“噱头”
这里终于可以谈到AI生成教学视频的“噱头”了。到底是不是噱头呢?我觉得更多是被绑着走了。
首先为什么会有AI生成教学视频这一件事情?因为AI很火。啊,AI可以自动化好多东西。但是现状呢?因为各种基础设施的不完备,AI还没有办法做到完全自动化。所以需要alignment,需要对齐人们的需求。那再问:为什么需要生成教学视频?因为其他欠发达地区的同学要看。这是非常合理的。但是现状是什么呢?这些教学视频真的可以帮助他们吗?我想不完全是的。
这些生成的视频现状是什么呢?有一个PPT展示,有一个AI虚拟人按照稿子念,同时加一些重复的手势。
按照前面几节提及的内容,这里存在的问题是什么呢?
- attention取决于slides的动态演示
- AI虚拟人只会无情念稿,无法互动,无法根据反馈实时调整(当然这也是网课固有的缺点,但是更多的问题在于生成的东西本身不会基于反馈做调整,而网课则可能会根据反馈进行调整)
- 稿子毕竟是写好的,可能会存在书面语的情况(当然也不排除有人语音转文字了,那为啥不直接语音录制全部内容呢)
当然AI视频也有优点,例如更少的瑕疵(这是因为本身的准确率和human alignment)和可回放(这当然是所有网课的优点)。但是人从自然学习的过程本来不就是从不确定性中抽取确定性的过程吗?AI生成的视频是没有瑕疵了,但是代价呢?人缺少了focus的能力,这在 AI的其他噱头 也会提及。瑕疵对于学习来说是负样本,提出是好事,可以让人更快接受正样本,避免负样本干扰。但坏处是:世界本来就是一个噪声世界,如果在学习过程中,无法接受一些轻量的负样本干扰,那在真实场景下会是什么情况呢?(暴论预警)人类的本质是复读机,LLM也不例外。如果人类过拟合了,抗噪能力或者说减噪能力下降了,那谁来做减噪呢,谁来make the machine focus呢?如果哪一天machine自己会focus并有自由探索能力,那确实就共同富裕了(期望那时候世界不要掌握在坏人手里,分权制衡会发挥作用)。
回到这个话题。有以上的那么一些问题,我们还需要审核教学视频吗?需要,当标注员就标注员吧,也算一些贡献(估计还包含上级领导的KPI指标,以及成为AI视频生成的垫脚石)。如果有更多的人可以因为这个视频而受益,对世界产生了一些积极影响,那也是挺好的。
头歌教学平台
说到头歌,至晚21年(可能最早是19年),老师就开始采用头歌平台了。然而头歌平台的坏处是什么?它封装了所有配置环境的过程,对于教学团队的支持也不是那么友好,不像github和gitlab一样开放API。这会导致很多原本可以自动化的东西无法自动化,比如自动拉取所有同学的仓库,自动为同学发邮件等。开放一定的接口才能形成生态,而不是自己一个公司闷头搞。很多时候客户比公司还急,客户甚至还有能力在接口基础上实现一套自己的东西。生态不是由一家公司创建的,而是公司提供好的平台,提供好的接口,在稳定的接口之上形成生态。
OpenAI提供了openai的接口,形成了LLM应用开放的标准,MCP协议提供了不同软件和LLM交互的协议,形成了事实的标准。再往前看一点,计算机的ISA何尝不是标准呢?ARM指令集还有授权,没有授权不能使用。RISC-V为什么是好东西,因为开源,大家都可以用。deepseek为什么是好东西,因为开源,大家都可以用。
AI的其他噱头
AI的其他噱头包括用AI读文献等(我日常接触到的东西就这些,所有也只能讲这些东西了,还需要更多场景)。对于个人来说,用LLM提纲领是好事,但人不应该提升自己的能力去focus吗?99.99%可用指标的0.01%不可用时间真的不重要吗?
好的课程
如何定义好的课程
做任何事情之前,需要至少对事情有一些模糊的定义。为了找好的课程,上好的课程,首先需要讲清楚我们的需求是什么?我们的动机是什么?从CS课程的角度出发,可以有以下那么几点: - 是为了学一些好的技术?让自己掌握一些现代的技术如何使用,如何在实际过程中运用? - 是为了学一些理论?让自己掌握一些技术背后的理论,运用理论解决一些新出现的问题?发现现有理论和实践的不足,从而进行创新?
自始至终,计算机都是由需求驱动的一门学科。在发明之日,计算机就是为了做更加高效的计算,自动化一些人类处理起来十分繁杂但是又机械的动作。它是一门为了满足人类自动化需求,解放人类繁琐工作而产生的一个工具。但是现在,显然这个工具已经过于复杂,以至于人们需要对其进行抽象,形成抽象的接口层以更方便利用这个工具。
那么回到课程,什么是好的课程?这取决于人的定义。如果不讲人的定义而只是单纯讨论课程的好坏,那么就会十分主观。每个人都是不同的,对于不同的事物有不同的接受程度,有人更喜欢动手学习,有人更喜欢从理论出发,有人甚至不知道自己擅长的是什么(我显然就是这种)。
如果我们分析一下这几类人,那么:
更喜欢动手学习的人是自底向上的学习者和创新者,他们更倾向于从具体例子出发,总结一套自己的逻辑,再结合已有的理论,形成自己的理解。这似乎是更自然的,因为人类面对的总是具体的世界,具体的事件。具体世界并不先天显式地存在一些理论。理论都是由人总结得到的,是针对特定场景的理论。
也有一些人和喜欢从理论出发,但是我相信从理论出发的人一定在学习的过程中也推导了一些实例,不过他们对于这些实例十分的自信,以至于他们可以基于这些推导出的实例继续在理论上学习演化更多的理论,或者即使这些实例在现实中时不存在的,或者是False,他们也可以及时自省修正。
还有一些人不知道自己擅长什么。也许大多这样的人最终都会归于第一类,只不过他们还没有进行实践。或者说现有的教学方式还不足以满足这些人的高要求。
针对不同人的类型以及对应的人对好课程的定义,有相应的课程设计。
对于更喜欢动手的人,课程设计应该有更多的实验,同时包含一些理论的指引。这些实验应该
- 是循序渐进的
- 对前置要求有好的声明并给出相应的精华链接
- 链接忌多
- 在学生学习遇到困难时能提供
- 可以寻求帮助的精华指针(比如stackoverflow或者一些特定的小论坛)
- 一些指导
- 直接的帮助
不过虽然人们在很多时候提供了可以寻求帮助的精华指针,但是这些精华指针如果只是reference manual,对于新手来说,还是未免过于繁杂了,找起来也十分费力,从体验上来说,我都来问一个问题了,结果又把我引向一个更大的问题,即如何在reference manual中大海捞针,可能还是捞一个我本来就不太清楚的问题。
等等,我想这也是我总是在学新手教程但是无法进阶的原因了。高处不胜寒,很多时候到高处之后,能够帮助自己的人只有自己,在这个高度平面之上的人会变得更加稀少。这时候,在reference manual以及自然世界上方法论的缺失就会极大的限制自己的进步。
所以问题在于,如何在面临海量文档时高效地找到自己想要的,或者相似的东西,或者确认东西不存在?如何在面临海量文档时,最大化当前以及未来的收益?一个比较粗浅的回答是:1) 先找概述 2) 根据概述找到自己想要的目标可能在哪些章节 3) 根据这些章节以及概述寻找自己要理解这些章节可能需要的路径。如果有多条路径,将可能的路径列下来,并做一个简单的代价评估。4) 实践:你不能总在规划却不行动。有了地铁路线图之后,你不能等到末班车再开始行动,因为有时候你转车的时候目标路线已经停运了。多条路径可能会有一些公共结点,最好先完成这些公共结点,此时可以更新对多条路径的评估。如果是单条路径,可以看有无新的路径发现。
在此过程中,动态规划是好的方法。用空间换时间。将已有的路线记录下来,形成cache,这更方便自己进行代价评估。同时cache本身也是可以动态更新的。
世界上本没有课程。但在人类世界上一直都存在的就是人类的需求。为了解决需求,人们进行了一系列实践,并提取了一系列方法理论。将这些方法理论作为课程的一部分进行传授,以期后人可以继续受益于这些方法理论,或者对这些方法理论进行进一步拓展。
可作为一张白纸的学生,缺失的是什么呢?缺失的是场景。所以课程务必提供的就是一个场景,一个更贴近于现实的场景。在这些场景上,如果可以自行重新推导出这些方法理论,那对这些方法理论会有更加深刻的理解。运用这些方法理论,只能说是在一些成功的方法理论上做了一些pattern matching和rewriting的工作,对于背后失败的上百个方法理论却一无所知。然而,真实世界总是“一将功成万骨枯”。所以,一个好的课程,除了提供好的方法理论传授之外,也应提供一些不好的方法为什么行不通的分析,即如何在build from scratch失败的时候做修正。这种分析才是促进创新的原始动力。因为在真实世界中,一个人不可能总是成功(“总是成功”在概率上也不成立),需要不断的trial-and-error才能真正地创新。
如何找到好的课程
对于CS来说,对于当下2025年来说,显然 csdiy 是一门好的索引。可是,10年后呢?100年后呢?如果只从静态不更新的视角看,那显然是跟不上时代的,因为静态不更新无异于刻舟求剑。所以,这个手册更重要的东西是什么?我想除了更多好的课程本身之外(这是这个手册的结果),是如何寻找好的课程(是这个手册的过程)。那么我们怎么寻找这个方法论呢?因为这是一个很玄乎的东西,大家更倾向于写结果而不是写中间的过程,因为过程实在是太复杂了。
- 作者也许在 csdiy 文档中暗含如何构建这样的方法论
- 作者PKUFlyingPig也许在 知乎 上发表了一些构建的经验
- 作者也许在 git commit log中暗含了一些东西
- 作者也许在 自己的个人博客中 发表了一些经历
- 仓库的其他作者也许在个人博客中发表了一些经验
让我们先查找一下 csdiy 上是否有相关的东西。
csdiy
“心血来潮想学习 Python。无意间看到知乎有人推荐了 CS61A 这门课”
定制属于你的课程地图
oh, 也许足够了。
个人博客就没有相关东西了。
在以上课程地图中,也许让LLM做筛选是更好的选择。
如何在一个课的基础上自己创造好的课程
在 如何定义好的课程 中提到了一些标准。然而并不是所有的课程都满足以上条件。此时,加入论坛和交流群也许就是必要的。