关于编程中主动学习的思考
我的第一位程序设计老师是一位出色的教授,他无法与学生建立联系。 那时,在课堂上进行主动学习就像看到粉红色的大象。 所有讲座都使用黑板:如果教授需要滚动代码,则用一只手擦去,用另一只手写字。 由于没有即时反馈,这常常使我们(作为学生)无法自拔。

快进十年到我的第一个教学职位。 我面临一个难题:良好的编程技能并不属于我的学术经验。 学习编程就像“饥饿游戏”一样,所以我自己想了教训。 有三个基本思想:
- 理论不是什么,除非有人立即通过应用来加强它。
- 高级概念需要批判性思维,而不是依靠死记硬背。
- 任何初学者都需要大量的握力。
主动学习与批判性思维

在演讲中,我经常开玩笑地告诉我的学生,乡村歌曲的几乎任何一行都可以应用于计算机科学或工程学。 根据我在编程方面的教学经验, “有些东西直到您都不知道为止”是总结每个学生第一次学习编码的过程的完美方法。 解决此问题的一种方法是“主动学习”。
作为人类,我们每天都面临着大脑没有明确解决方案的问题。 我们集思广益解决潜在的解决方案(通常会失败),当别人或通过实验向我们“展示方式”时,我们会了解有效的方法和无效的方法。 如果作为穴居人,我们不是快速学习者,我们就会死。 这种学习行为像动物的本能一样根植于我们的潜意识中:分析问题,尝试解决方案,获取知识(学习),解决问题。 这也是“主动学习”的基础。
在当今的教育体系中,我们被迫做完全相反的事情。 我们首先尝试通过阅读教科书或听另一无聊的演讲来获得知识。然后才尝试解决问题。 这种方法有一个明显的缺陷。 首先,我们在学习事物时并没有理解所提出概念背后的原理。 其次,我们尝试将我们没有掌握的知识应用于问题(在不被触发的情况下,我们的大脑认为该知识是肤浅的,并且不接受它)。
通常,当我们学习编程时,我们会将越野车放在马匹前面,结果很糟糕。 实际上,到学期末,班上大多数学生都迷路了。 我曾与同事和学生进行过讨论,所有讨论都引出了一点:如果学生不自己先探索某些东西,他们就会失败。
大脑可以说是一个了不起的“设备”。 大多数魔术是在我们不知情的情况下发生的。 学习同样如此: 您不能强迫大脑学习,这是一种在潜意识层面上硬连线的行为。 大脑在想学习时就学习。
学生只应开始思考解决问题的方法,而不用担心结果:大脑在潜意识中产生“缝隙”,从而将未来的知识储存起来。 当我们向学生展示他们无法轻易解决的问题时,我们正在向他们的大脑挑战。 学生们可能没有意识到它并认为它很傻,但是他们的大脑却在动摇。 一些积极的学习问题很容易在短时间内解决。 但是,与您在课堂上分配给他们的五分钟相比,他们中的大多数需要更多的时间。
在短短五分钟的主动学习活动之后,一旦您涵盖了一个概念,大脑就会根据事先缺乏的知识,将其吸收并存储到适当的空间中。 结果是: 我们使大脑愿意学习 ,并且该信息可以保留许多月或数年,这与典型的“先讲后讲”方法不同。 这也使学生能够在独立练习中使用这些概念,而不仅仅是回响他们所学的内容。
交互式手持
在我所教授的第一门编程课中,我结合了主动学习,课堂翻转的各种形式和交互式讲座。 我没有讲授诸如不带刹车的火车这样的概念,而是在一次演讲中讲授基础知识,而在下一次演讲中分配了一个项目。 这有助于我在课堂上将课堂概念与现实世界联系起来,并在项目进行期间为学生提供一些帮助。 我发现在授课过程中分配短得多的10分钟项目,并向学生提供实时反馈(实际上,是初学者握着的“手”)产生了更好的结果。
到目前为止,翻转教室进行编程的结果非常糟糕。 我的许多同事抱怨学生对独立阅读和编码作业的依从性较低,即使对材料进行了形成性(仅反馈)或低风险的汇总(分级)评估也是如此。 通过将班级中某些“翻转”部分带入课堂,可以提高学生的遵从性。
在过去的两年中,我一直与两位以前的学生一起为编程课程改进翻转教室。 我们的第一个尝试是致力于通过自动化来扩展对编程任务进行评分的过程的工具,该工具现已扩展为用于编写和发布交互式编程实验室的整个平台。 这些实验室(使用各种测试自动评估)为学生提供了一种易于接近的编码环境,可不断向他们提供有关如何改进工作的反馈。
我们围绕这些交互式实验室构建了一个分析引擎,该引擎使学生可以监控他们对编程概念的掌握程度。 他们可以与他们的讲师分享这些结果,以便他或她可以评估整个班级的进度并计划专注于特定主题。 通过增加学生进步的透明度,我们可以促进成长心态,并为积极学习提供催化剂。
如果您有兴趣,可以在next.xyz找到我们。 我很想听听您在编程课程中对形成性评估的想法! 在这里给我答复,或者在Twitter上给我发送您的想法。