作为一名计算机科学教师,我一直希望能有更好的方式来帮助他人理解我的代码。在我刚开始学习编程的时候,我非常喜欢传统的编程书籍。我拥有许多页数超过800页的书籍,这些书涵盖了各种编程语言和技术。
我知道,如今大多数学习者并不像我一样喜欢那些厚厚的书籍,说实话,我也很少会通读这些书。这类书籍往往会对代码进行过多的解释,而实际上这些解释可能并没有必要。作为购书人,我总是希望自己的钱花得值,因此书籍越厚,我就觉得它越好。不过现在,学习者更倾向于通过博客教程和视频来学习编程。
如果你现在也在学习编程,那你肯定也体验过这类教学方式带来的困扰。我想分享一些我自己正在尝试的方法,或许能对你有所帮助。
博客与视频
博客风格的教程会将代码及其解释以自上而下的顺序呈现出来。浏览这些基于网页的讲解内容让人感觉很熟悉,而且用户也可以轻松地复制和粘贴相关代码。然而,将代码的解释与代码本身结合起来这种方式其实并不理想。很多时候,在阅读解释时,我希望能看到整个代码示例,但实际上我只能看到其中的一小部分代码,因此很难理解这些部分之间的关联关系。
如今,视频教程非常受欢迎。它们确实解决了博客风格教程所存在的一些问题。视频的优点在于用户可以同时接收两种信息:讲解者的声音描述以及正在展示的代码。但是,视频也有一些缺点。
观看视频
对于观众来说,视频并不便于搜索,也不适合作为复制代码或查阅参考资料的工具。更重要的是,视频会让人不愿意花时间仔细思考所学内容。在观看视频教程时,我往往不会暂停来让知识点真正被理解,而是直接继续观看下去。虽然我可以更加自觉地经常暂停和回放,但实际上我通常并不会这样做。
制作视频
从视频制作者的角度来看,并不是所有的代码都适合制作成视频来展示。有些代码其实并不值得花费时间去讲解。而且,并不是所有视频制作者都能在整个讲解过程中保持故事的趣味性。
我自己在制作视频时也遇到了很多困难——你肯定不会在Twitch上看到我编程的身影。很多时候,在完成视频制作后重新回顾时,我会后悔没有提到某些内容。不过,要回去修改视频却很麻烦,因为往往不得不彻底删除原有内容然后重新开始制作。
故事讲述者
我创建了一种新的媒介,用于引导观众理解代码示例。这种新媒介结合了书籍、博客文章和视频的优点。通过这种新媒介,开发人员可以使用最先进的编辑器(如 Visual Studio Code)来编写代码,然后可以在浏览器中重新体验这些代码的生成过程。
作者可以在代码演变过程中的关键节点添加注释。这些注释可以包含文本、手绘图示、屏幕截图,以及音频和视频资料。这样一来,作者就能够将那些仅存在于我们脑海中但并未被实际写入代码中的可视化内容呈现出来。这个工具的名字叫做Storyteller。

以下是一些“代码回放”示例:
这些内容在大屏幕上观看效果最佳。如果是在小屏幕上查看,可以切换到“博客”模式观看(右上角有按钮可供切换模式)。
我整理了这些带有讲解的代码演示视频,用来帮助学生学习不同的编程主题。所有这些资源都是免费的,托管在我自己创建的网站Playback Press上。以下是我目前制作的一些“教程”:
在课堂上,我通常会让学生们观看这些视频作为学习材料,而不是使用价格昂贵的教科书。对我来说,编写几个示例程序要比寻找一本完美的教科书容易得多。
此外,我在课堂上也会使用这些视频来进行演示,而无需当场编写代码。这样,代码演示的过程就会更加流畅、高效。如果在准备代码的过程中犯了有趣的错误,我还可以通过注释来突出显示这个错误;而如果犯了那些无关紧要或令人尴尬的错误,就可以直接忽略它们,学生们也不会把注意力放在这些错误上。
代码回放的优势:
-
主要关注点在于代码本身。代码始终处于可见状态,且便于搜索和浏览。
-
由于代码如此容易被获取,因此对其的解释往往简短扼要。
-
讲解内容除了文字说明外,还可以包括白板演示图、截图,或是运行中的代码视频。
-
作为作者,我可以多次审阅代码,并在每次阅读时添加或修改注释。我不需要像制作视频那样做到完美无缺。
-
当作者希望观众花时间仔细思考代码时,会使用注释标记来提醒观众这一点。只有当观众准备好了,播放才会继续进行。
-
注释中提到的代码部分可以被高亮显示,这样观众就能清楚地知道应该关注哪些地方。
-
在播放过程中,观众可以随时下载代码文件,然后自行运行、修改或添加内容。
-
这个工具是一个与具体编程语言无关的编辑插件,可用于描述任何语言编写的程序。
-
观众只需使用网页浏览器即可进行观看和学习。
主要关注点在于代码本身。代码始终处于可见状态,且便于搜索和浏览。
由于代码如此容易被获取,因此对其的解释往往简短扼要。
讲解内容除了文字说明外,还可以包括白板演示图、截图,或是运行中的代码视频。
作为作者,我可以多次审阅代码,并在每次阅读时添加或修改注释。我不需要像制作视频那样做到完美无缺。
当作者希望观众花时间仔细思考代码时,会使用注释标记来提醒观众这一点。只有当观众准备好了,播放才会继续进行。
注释中提到的代码部分可以被高亮显示,这样观众就能清楚地知道应该关注哪些地方。
在播放过程中,观众可以随时下载代码文件,然后自行运行、修改或添加内容。
这个工具是一个与具体编程语言无关的编辑插件,可用于描述任何语言编写的程序。
观众只需使用网页浏览器即可进行观看和学习。
最近,我一直在探索如何让回放功能对学习者来说更加有用。
人工智能——一位极具耐心的导师
我已将代码回放功能与人工智能导师结合在一起。多年教学经验让我明白,学生们往往不愿意提问:他们担心会显得自己很愚蠢,或者不想耽误整个学习进程,又或者根本无法准确表达自己的困惑之处。
如果每个学生都能有一位耐心十足的导师,这位导师不会对反复出现的问题感到厌烦,而且能够用多种方式来解释概念,直到学生真正理解为止,那该多好呢?
我直接将人工智能技术融入到了回放功能中。当学生们观看回放内容时,他们可以就任何自己不明白的地方提出问题——无论是某段具体的代码,还是我在讲解中提到的某个概念,又或者是某些内容与之前学习过的知识之间的联系。人工智能能够全面理解这些信息:它可以看到代码内容,知道学生当前处于学习的哪个阶段,并据此提供针对性的解释。人工智能始终与学生“在一起”,共同看着同样的代码,理解着相同的背景知识。
此外,人工智能还能根据回放中的代码和讲解内容自动生成多项选择题。这些低风险的测验能让学习过程更加有趣,同时帮助学习者及时检验自己的理解程度。
需要明确的是:人工智能并不能取代我作为教师的作用。我仍然负责创建回放内容,决定要讲解哪些概念、以什么顺序进行讲解,以及用哪些例子来阐释这些概念。人工智能只是我教学工具中的一个补充,而不是替代品。
注意:在Playback Press网站上,注册用户可以使用这些人工智能功能。注册是免费的,但需要登录才能使用人工智能导师服务。如果你想体验一下这个功能,可以尝试上面链接中的任何一个回放内容,然后向人工智能提出问题。
结论
我的目标一直都是帮助人们学习编程。书籍能提供深入的知识,但要求读者投入大量的时间;博客让学习变得更加方便,但却会将代码分割得支离破碎;视频虽然能讲述清晰的逻辑流程,却会剥夺学习者的自主控制权。而回放功能则能让代码始终处于学习的中心位置,同时允许学习者按照自己的节奏进行学习,并在需要时停下来思考。加入人工智能技术后,这一理念并没有发生改变——只不过现在总有专人可以随时回答学习者提出的问题罢了。结合起来看,这些技术让我们更接近于拥有了一位专家在身边指导我们完成编程任务的体验。这正是我一直在努力实现的目标,我认为我们已经离这个目标越来越近了。