找回密码
 立即注册
搜索

生成式人工智能时代的计算机教育

计算机教育工作者和学生在适应能够从自然语言问题描述生成准确源代码的LLM方面面临着挑战和机遇。



重要见解


  • 生成式人工智能为计算机教育带来了挑战和机遇,需要更新专注于新技能的教学策略。
  • 生成式人工智能模型非常有能力为入门编程课程中的典型问题生成解决方案,引起人们对学生可能过度依赖和滥用这些技术的担忧。
  • 人工智能驱动的工具改变了编程练习等教育资源的创建和定制,从而能够高效生成个性化的学习材料。
  • 新的教学方法不断涌现,教学生如何利用生成式人工智能,强调战略问题分解以及在为人工智能系统指定编程任务时准确性的重要。
一个新时代正在出现,人工智能(AI)将在日常生活的许多方面发挥越来越重要的作用。这个新时代的一个决定性特征是可以轻松生成新颖的内容。大型语言模型 (LLM)——基于神经网络的模型,经过大量文本数据训练——能够创建各种令人信服的类人输出,包括散文、诗歌和源代码。人们普遍认为,根据自然语言提示自动合成源代码可能会提高专业开发人员的生产力,并且资金雄厚的公司正在积极探索,例如 OpenAI(ChatGPT、GPT-4 )、亚马逊(CodeWhisperer )和谷歌(Alpha-Code, Bard )。就像几十年前高级编程语言比汇编语言编程提供了巨大的生产力优势一样,人工智能代码生成工具似乎也准备好改变传统的编程实践。已经有消息称,很大一部分新代码是由 GitHub Copilot 等工具生成的,该工具是流行的集成开发环境 (IDE)(例如 Visual Studio Code)的插件。
目前该领域的发展速度令人震惊,每年都会发布几次明显更高级的版本。进展速度如此之快,以至于 2023 年 3 月出现了一封广为人知的公开信,鼓励公开、可验证、立即暂停至少六个月的比 GPT-4 更强大的人工智能系统的训练。这封信由埃隆·马斯克(Elon Musk)、史蒂夫·沃兹尼亚克(Steve Wozniak)、摩西·瓦尔迪(Moshe Vardi)和包括许多人工智能领导者和图灵奖获得者在内的数千人签署,是写给所有人工智能实验室的,并建议政府来主导暂停。
这些发展对社会许多方面(包括计算机教育)的未来方向提出了紧迫的问题。例如,一种流行的基于证据的教学法要求学生编写许多小练习,这些练习可以手动或通过自动评分工具进行检查。然而,这些小练习现在可以通过人工智能模型轻松解决。通常,学生所需要做的就是接受 IDE 插件自动生成的建议。这引起了人们的担忧,即学生使用新工具的方式可能会限制学习并使教育工作者的工作变得更加困难。博马萨尼等人强调,对于教师来说,“了解学生的贡献程度”和“监管无效合作和发现抄袭”变得更加复杂。除了这些挑战之外,也出现了学生学习计算机技能的新机会。
在本文中,我们讨论了此类模型给计算机教育工作者带来的挑战和机遇,重点关注入门编程课堂。我们围绕计算机教育文献中的两篇基础文章组织这次讨论,这些文章是在对代码生成语言模型的认知刚刚开始出现的时候撰写的。其中第一个(于 2022 年 1 月发布)评估了代码生成模型在典型入门级编程问题上的性能,第二个(于 2022 年 8 月发布)探索了这些模型生成的学习资源的质量和新颖性。 现在,我们根据新模型的功能以及教育工作者将这些模型纳入教学实践的经验教训来考虑对计算机教育的影响。
大型语言模型和代码。 自 2022 年 GitHub 的 Copilot 结束技术预览期以来,人工智能驱动的编码对公众来说才成为可行的现实。在撰写本文时,Copilot 最初被宣传为“您的 AI 配对程序员”,并声称自己是“世界上采用最广泛的 AI 开发工具”。
其他人工智能驱动的代码生成工具也可以广泛使用,包括亚马逊的 CodeWhisperer 和谷歌的 Bard。 Codex 模型(在本文中具体讨论)是为 Copilot 提供动力的原始模型。 Codex 是 GPT-3 的后期版本,它使用来自超过 5000 万个公共 GitHub 库(总计 159GB)的代码进行了微调。虽然现在已被正式弃用,转而支持较新的聊天模型,但 Codex 能够接受英语提示并以多种编程和脚本语言生成代码,包括 JavaScript、Go、Perl、PHP、Python、Ruby、Swift、TypeScript、shell 等。它还可以在编程语言之间翻译代码,(用几种自然语言)解释代码的功能,并返回它生成的代码的时间复杂度。
此类工具在教育中的使用才刚刚兴起,并且正在迅速变化。 Copilot 直到 2022 年 6 月才免费向学生开放,并在 2022 年 9 月开始免费向教师开放 ,因为它对教育的影响潜力开始显现。 2022 年 11 月,ChatGPT 发布,随后于 2023 年 3 月发布 GPT-4。OpenAI 不断用新功能更新这些模型,例如文件数据分析、分析图像和辅助 Web 搜索。
未来的挑战

由LLM支持的代码生成工具可以正确可靠地解决入门课程中常见的许多编程问题。这给教育工作者提出了许多重要问题。例如,这些工具到底有多好?没有编程知识但拥有代码生成LLM的学生能否通过典型的编程评估?我们需要用不同的方法来评估吗?
对它们进行测试。 为了探索LLM在入门编程背景下的表现,我们向 Codex 提示了真实的考试问题,并将其表现与参加相同考试的学生的表现进行了比较。我们还促使 Codex 解决一个著名的 CS1 级编程问题(“Rainfall 问题”)的几个变体,并检查了所产生的解决方案的正确性和多样性。这项工作最初于 2021 年 9 月进行,即 OpenAI 提供对 Codex 模型的 API 访问权限几周后。由此产生的论文于 2022 年 1 月发表,是计算机教育领域第一篇评估LLM代码生成能力的论文。
我的人工智能想知道它的成绩是否会被四舍五入。 我们从学生已经参加的两次 Python CS1 编程考试中提取了所有问题,并将它们作为输入(逐字)提供给 Codex。考试题目涉及常见的Python数据类型,包括字符串、元组、列表和字典。它们的复杂程度从简单的计算(例如计算一系列模拟掷骰子的总和)到更复杂的数据操作(例如提取映射到字典中最大值的键的排序列表)。
为了评估生成的代码,我们针对用于评估学生考试的同一组测试用例执行了它。这遵循 Codex 开发人员采用的类似评估方法。如果 Codex 输出与预期输出不同,仅存在一个很小的格式错误(例如,缺少逗号或句点),我们会进行适当的更正,就像学生使用 Codex 完成考试一样。
为了将 Codex 模型的性能结合起来,我们使用与真实学生相同的方式计算其回答的分数,使用相同的问题权重和对错误提交的累积处罚。 Codex 在考试 1 中的得分为 15.7/20 (78.5%),在考试 2 中的得分为 19.5/25 (78.0%)。图 1绘制了 2020 年参加 CS1 课程并完成两门考试的 71 名学生的分数(最高为 100)。 Codex 的分数标有蓝色“X”标记。根据考试 1 和考试 2 的平均成绩,Codex 在 71 名学生中排名第 17,在班级成绩中名列前四分之一。



图 1. 学生考试 1 和考试 2 的成绩,用圆圈表示。
图 1. 学生考试 1 和考试 2 的成绩,用圆圈表示。 Codex 2021 年得分由蓝色“X”表示。 GPT-4 在相同问题上的 2023 年得分由红色“X”表示。
我们观察到一些Codex答案包含微小的格式错误。我们还观察到,Codex 对于不允许使用某些语言功能(例如,用split()将字符串分词)的问题表现不佳。 Codex 通常不会生成避免使用这些受限功能的代码,因此模型(在这些情况下)通常无法通过自动评分。当被要求生成格式化的 ASCII 输出(例如形成几何形状的字符模式)时,Codex 也表现不佳。特别是在问题描述中未指定要求,但必须从提供的示例输入和输出中推断出要求的情况下。
是的,这段代码肯定是我自己写的。 为了了解回答的变化量,我们向 Codex 提供了经过充分研究的“Rainfall”问题(对集合中的值求平均值)的问题描述的 7 个变体,每个变体总共 50 次,生成 350 个回答。每个回答都是针对 10 个测试用例执行的(总共 3,500 次评估)。对于所有变体,Codex 的平均得分接近 50%。在未提供有效值作为输入的情况下(例如,要平均的集合为空),Codex 表现不佳。
我们还检查了所有 Rainfall 变体的源代码行数,不包括空白行和注释行。此外,我们将解决方案中采用一般算法的方法归类为算法变化的指标。我们发现 Codex 对同一输入提示提供了多种回答。根据提示,生成的程序使用不同的编程结构,同时最终对每个问题变体都采用了预期的方法(即,用于处理列表的 for 循环和用于处理标准输入的 while 循环)。
进步很快。 鉴于过去两年模型能力的提高,观察最先进的模型(撰写本文时为 GPT-4)在同一组问题上的表现是很有趣的。 2023 年 7 月,一个在计算机教育背景下探索LLM的工作组在相同条件下使用 GPT-4 重复了这项研究。GPT-4 在考试 1 中的得分为 99.5%,在考试 2 中的得分为 94.4%,这一次,71 名学生中只有 3 名学生的总体得分高于(GPT-4 在图1中用红色“X”表示 )。在Rainfall问题上,GPT-4 成功解决了每个变体,在某些情况下产生了正确的结果,但存在轻微的格式错误。另一项后续研究考察了生成式人工智能在 CS2 考试问题上的表现,发现它在这种情况下表现得相当好。较新的模型还可以解决其他类型的编程练习,例如Parsons问题,其准确度可能会随着时间的推移而提高。
学术诚信。 软件开发通常鼓励代码重用和协作开发实践,这使得学术诚信的概念很难在计算中形式化。尽管如此,个人工作在计算机课程中仍然很常见,并且期望从事个人项目的学生生成自己的代码,而不是复制别人编写的代码。这通常通过使用传统的抄袭工具来验证。然而,最近的研究表明,常见的抄袭检测工具通常对人工智能生成的解决方案无效。这引起了教育工作者在正式评估中监控学术诚信的重大担忧。
学术不端行为。 尽管学术不端行为在计算机教育界已经讨论了相当长一段时间,LLM的出现带来了一系列新的、困难的挑战。第一个是准确分类其使用属于哪种类型的学术不端行为(如果有)。最近一份关于计算机教育LLM的工作组报告考虑了道德问题,并在 ACM 道德准则和最近的大学人工智能使用政策的背景下对其进行了审查。他们讨论了剽窃、共谋、合同欺诈、伪造和使用未经授权的资源。尽管许多大学政策已将人工智能的使用归入剽窃范畴,但 Prather 等人不同意。剽窃涉及从具有代理权的人那里窃取内容,而作为下一个token生成者的LLM显然不具备这种代理权。
如果生成式人工智能工具被视为专业使用的生产力工具(例如 IDE 代码完成或数学问题计算器),那么决定使用此类工具是否适合给定的环境,并将决定传达给学生就是有意义的。如果学生在受到限制时坚持使用这些工具,那么他们就会犯学术不端行为,因为他们使用了未经授权的资源,而不是因为该工具本身的某些固有特性。因此,教师应该非常清楚何时以及如何允许在他们的评估中使用生成式人工智能工具。工作组报告包括一份学生指南,教师可以轻松地将其改编成有用的讲义或添加到课程大纲中。
最近对计算机教育工作者的一项采访研究表明,人们最初的反应是不同的——从禁止所有使用生成式人工智能,到接受抵制最终是徒劳的。限制生成式人工智能工具的使用很可能(至少在短期内)将实践转向更多地使用安全测试环境,并更加关注过程技能的开发和评估。
代码重用和许可。 当使用代码生成模型生成内容时,即使模型数据是公开可用的,也会出现潜在的许可问题。许多可公开获取的代码用于训练LLM会受到不同的许可证控制,通常这些许可证要求重新使用代码的人在使用代码时给予适当的致谢,即使该代码是开源的。当开发人员使用AI模型生成代码时,他们可能会在不知情的情况下使用需要遵守许可证的代码。已有此类问题提交法庭审理。这显然是一个超出软件教育用途的问题,但作为教育工作者,我们有职责告知学生在重用代码时他们的专业责任。
学习者过度依赖。 Codex 的开发人员指出,在实践中使用代码生成模型的一个主要风险是用户的过度依赖。使用此类模型的新手,尤其是使用 Copilot 等在 IDE 中嵌入支持的工具,可能很快就会习惯自动建议的解决方案。这可能会对学生的学习产生多种负面影响。
元认知。发展计算思维技能对于新手程序员来说很重要,因为它可以培养高阶思维和反思。元认知或“思考思考”是计算思维(和通常解决问题)的一个关键方面。由于学习编码已经是一个具有挑战性的过程,需要高水平的认知努力来记住语言语法、计算思维和理解特定领域的知识,因此元认知知识和策略的使用可以帮助解决问题,并防止初学者不知所措或迷失方向。过度依赖代码生成工具可能会阻碍这些关键元认知技能的发展。
当模型失败时。 尽管取得了如此令人鼓舞的结果,但对 AlphaCode 生成的解决方案的分析显示,11% 的 Python 解决方案在语法上不正确(产生了SyntaxError),35% 的 C++ 解决方案无法编译。最近的研究表明,即使允许专家修改自然语言问题描述,代码生成模型也无法充分解决多达 20% 的入门编程问题。Codex 的开发人员指出,它可以推荐语法错误的代码,包括未定义或超出代码库范围的变量、函数和属性,并指出“Codex可能会建议表面上看起来正确的解决方案,但实际上并不执行用户预期的任务。这可能会特别影响新手程序员,并根据上下文可能会产生重大的安全隐患。”过度依赖模型输出的学生可能会发现,当建议的代码不正确且无法通过自然语言提示解决时,继续下去尤其具有挑战性。
偏见和坏习惯。 人工智能的偏见问题是众所周知的。除了影响几乎所有人工智能生成的输出(例如特定人口统计数据和性别的表示)的一般偏见(微妙或明显)之外,还可能存在人工智能代码生成特有的偏见。
适合初学者。 新手通常从学习简单的编程概念和模式开始,逐渐培养他们的技能。然而,训练这些人工智能模型的大量代码大部分是由经验丰富的开发人员编写的。因此,我们应该预料到人工智能生成的代码有时可能过于高级或复杂,新手无法理解和修改。最近的研究表明,即使是最新的生成式人工智能模型也会继续使用对于新手来说过于高级的概念或课程之外的概念来生成代码。
有害的偏见。 Codex 的开发人员发现,代码生成模型会引发偏见和代表性问题,特别是 Codex 可以生成反映有关性别和种族的负面刻板印象的代码注释(以及潜在的标识符名称),并且可能包括其他诽谤性输出。这种偏见显然是有问题的,特别是当新手依赖输出来进行学习时。值得注意的是,Amazon CodeWhisperer 的功能列表包括从生成的代码中消除有害偏差的功能。最近的一些工作(来自竞争对手 Microsoft)对此功能的可靠性表示怀疑。
安全。 毫不奇怪,人工智能生成的代码可能不安全,并且安全使用人工智能代码生成系统需要人工监督。然而,新手程序员缺乏提供这种监督的知识。最近对使用 AI 代码生成工具的新手进行的一项探索发现,他们始终会编写不安全的代码,这些代码在字符串加密和 SQL 注入方面存在特定漏洞。也许更令人不安的是,这项研究中能够使用人工智能代码生成工具的新手程序员更有可能相信他们编写了安全的代码。这表明迫切需要提高学生和教育者对当前生成安全代码模型的局限性的认识。
计算机在社会中的应用。人工智能生成代码的使用为道德和计算机在社会中的使用提供了许多讨论机会。此外,这些技术可以作为一种工具,使新手用户能够更早地探索更先进的想法,利用使用“最新动态”技术带来的自然参与度。入门课程的老师长期以来一直告诉自己,学生将在后续课程中学习测试、安全和其他更高级的主题。然而,随着越来越多的学生参加入门课程但不主修计算机,以及代码生成提供的功能,CS1 和入门课程在现实世界受到损害之前尽早提出这些问题的风险更大。
未来的机遇

尽管必须应对挑战,但代码生成工具有可能彻底改变计算机领域的教学。事实上,此类模型的开发者特别强调了它们对教育产生积极影响的可能。在介绍 Codex 时,Chen 等人概述了一系列可能的好处,包括:“帮助教育和探索”。同样,AlphaCode 的开发人员表示,此类工具“有可能对社会产生积极的、变革性的影响,具有广泛的应用,包括计算机科学教育。” 在本节中,我们将讨论代码和文本生成模型对计算机教育产生变革性影响的几个具体机会。
丰富的学习资源。 入门编程课程通常使用各种学习资源。例如,编程练习是一种非常常见的资源,可帮助学生练习编写代码。同样,代码的自然语言解释是另一个有用的资源。它们对于帮助学生理解复杂代码的工作原理或作为评估学生对代码理解程度的工具非常有价值。然而,针对个体学习者的兴趣生成各种高质量的练习,并为大量代码示例提供不同抽象级别的详细解释,对教育工作者来说是一个重大挑战。
我们探索了LLM减少教师生成刚才讨论的两种类型的学习资源所需工作量的潜力:编程练习和代码解释。这项工作最初于 2022 年 4 月进行,并于 2022 年 8 月发表,是计算教育场所中第一篇探索 LLM 生成学习资源的论文。
编程练习。 图 2显示了我们用于使用 Codex 生成新编程练习的输入示例。这一“启动”练习包括一个一次性示例(类似于所需输出的完整示例),然后是部分提示以启动新输出的生成。在这种情况下,启动练习的格式包括一个标签(练习 1),后面练习的上下文主题(甜甜圈)和编程相关概念(函数、条件)的关键字,自然语言问题陈述和一个解决方案(以Python函数的形式)。由于篇幅原因,我们省略了测试用例列表,但对于编程问题也可以包含这些测试用例。启动输入以明确提示生成新练习(练习 2)结束,并以关键字(篮球、函数、列表和 for 循环)表示所需的概念和主题。



图 2. 一项“启动”练习,由一个完整示例和随后提示的新示例组成。
图 3显示了向 Codex 提供图2中的提示时生成的一个输出 。请注意,在本例中,根据输入提示中的关键字信息的要求,问题陈述与篮球相关,并且模型解决方案由涉及列表for 循环的函数组成。为了更彻底地评估这种方法,我们通过改变与编程相关的概念和上下文主题,生成了一组 240 个编程练习。我们尝试针对生成的测试用例执行生成的代码,并分析语句覆盖率作为测试套件完整性的衡量标准。表1总结了这些结果,并表明在大多数情况下,模型生成的编程练习包括可执行的示例解决方案。同样,大多数时候,该模型还会生成一组测试,从而产生总共 165 个编程练习,其中包括示例解决方案和一组测试。示例解决方案经常无法通过所有生成的测试,但在通过的情况下,测试套件在除三种情况之外的所有情况下都实现了完整的语句覆盖。



图 3. Codex 使用图 2中的启动练习生成的示例输出。
表 1. 对 240 个生成的编程练习的分析,显示符合示例解决方案和测试用例标准的比例。

有样品溶液吗?
203/240
84.6%
示例解决方案可执行吗?
182/203
89.7%
有测试用例吗?
170/240
70.8%
所有测试都通过了吗?
51/165
30.9%
完整(100%)的报表覆盖率?
48/51
94.1%

我们还发现,绝大多数练习(约 80%)都是完全新颖的,因为问题描述的片段没有被任何搜索引擎索引。类似部分的练习也符合所需的主题和主题。尽管这远非完美,但以这种方式生成新的有用资源的潜力显而易见,并且消除不良结果(可以自动化)的成本几乎肯定小于手动生成大量练习和随附的测试用例。通过添加可自动化的过滤步骤,将有可能生成几乎无穷无尽的符合学生兴趣的新颖资源。
代码解释。 可以在不同的抽象级别生成代码解释,从高级摘要到每行的详细解释。我们重点关注后者,因为这些对于学生调试代码时通常很有用。我们使用一个简单的输入提示 Codex,其中包含要解释的源代码、文本“上述程序的逐步解释”,最后是“1”。影响输出以包括编号的行。我们从完整性和准确性方面分析了结果解释,发现 90% 的解释涵盖了代码的所有部分,并且近 70% 的单行解释是正确的。常见错误主要与关系运算符和分支条件有关(例如,当相应代码检查“小于 x”时,Codex 指出“小于或等于 x”)。
进步很快。 在本节中,我们描述了使用 2022 年初提供的 Codex 模型版本(具体为“code-davinci-001”)生成代码解释的早期工作。不到一年后,ChatGPT 等模型生成的代码解释明显更好且更加一致准确。图4展示了当仅提供图3中“示例解决方案”区域中所示的代码并使用与本节中所述相同的提示进行逐行解释时,ChatGPT 生成的代码解释的一个示例。



图 4. ChatGPT 模型生成的代码解释如图 3中的“示例解决方案”区域所示。
LLM生成的学习资源的质量可能会随着模型能力的不断提高而不断提高。例如,麦克尼尔等人发现 GPT-3 模型生成的代码解释始终比 Codex 生成的代码解释更有帮助。他们生成了几种不同类型的代码解释,并将其部署在在线交互式电子书中,并发现学生报告说,与每行的较低级别详细解释相比,高级代码摘要对他们的学习更有用。最近的研究还发现,学生对LLM创建的代码解释的平均评分高于同龄人创建的代码解释。
学生们表示,与每行的低级详细解释相比,高级代码摘要对他们的学习更有用。
我们看到LLM在制作与计算机教育相关的各种学习资源方面具有巨大的潜力。我们还预计,根据最近的趋势,生成资源的质量和准确性在短期内将大幅提高。
更好的编程错误消息。 六十多年来,研究人员已将不良编程错误消息 (poor programming error messages,PEM) 视为是有问题的,并且该领域仍有大量工作要做。最近的工作试图通过注重可读性将错误消息转化为更自然的语言,这已被证明可以提高学生对错误消息的理解和成功代码更正的数量。虽然提高 PEM 的可读性显然对新手有帮助,但大规模跨语言这样做仍然是一个挑战。
莱诺宁等人探讨了LLM在改善 PEM 方面的潜力。他们收集了在之前的工作中被报告为最不可读的 Python 错误消息,并生成了产生这些错误消息的代码示例。他们向 Codex API 提示代码和错误消息,以生成 PEM 的解释和可操作的修复。他们发现 Codex 创建的大多数解释都是可以理解的,并且 Codex 生成的输出包含对大多数输入的解释。
最近的工作扩展了这种方法,将 PEM 的 GPT 增强型 LLM 解释直接实施到编译器或自动评估工具中。泰勒等人在 CS1 和 CS2 课程中将 GPT 解释部署到 C/C++ 编译器,发现它为 90% 的编译时错误和 75% 的运行时错误提供了准确的解释。王等人研究发现,在大规模入门编程课程中接受 GPT 增强型 PEM 的学生重复错误的频率减少了 23.5%,解决错误的尝试次数也减少了 36.1%。虽然在解决数十年之久的问题之前仍有工作要做,但以这种方式揭开PEM神秘面纱的潜力是一个令人兴奋的机会,直到最近才成为可能。
解决方案范例。 学生在编码时经常寻求示例解决方案,要么是为了检查自己的代码,要么是在遇到困难时寻求帮助。然而,教师可能没有时间为每个练习提供模型解决方案,包括历史测试和考试问题。正如 Thompson 等人所建议的,人工智能生成的代码提供了一种节省时间的替代方案,能够生成各种解决方案,帮助学生理解和欣赏解决问题时的不同利弊。
自动生成示例解决方案的能力可以将重点从仅仅确保代码正确转移到关注多个正确解决方案之间的差异,以及对代码风格和质量进行判断的需要。关于代码同行评审的好处的广泛研究表明,考虑问题的多种解决方案是有益的,即使其中一些解决方案存在缺陷。代码生成模型可用于创建不同质量的解决方案,并且可用于要求学生应用代码评估所需的批判性分析技能的评估任务。这可以促进关于不同方法和解决方案质量的讨论,并为重构练习提供机会。
新的教学方法。计算机教育工作者仍在研究LLM在课堂上的影响,并且尚未就如何更新教学法达成共识。然而,一些早期的方法正在出现。
早期使用LLM。 在传统的 CS1 课程中,最初的重点通常是从语法和基本编程原理开始,学生可能需要时间才能精通这些基础知识。更快地解决复杂问题的一种新颖方法是教学生如何使用LLM来处理低级实施细节。 Zingaro 和 Porter 的教科书“学习 AI 辅助 Python 编程:使用 GitHub Copilot 和 ChatGPT”中的方法就是例证。学生在学习编写一行 Python 代码之前,会先了解 Visual Studio Code IDE 中的 GitHub Copilot 插件。采用自上而下的方法,学生将较大的项目分解为较小的函数,然后可以使用 Copilot 通过提供自然语言注释来解决这些函数。这本教科书提供了一个蓝图,说明入门课程如何在最初更多地关注问题解决和算法,依靠自动代码生成来实现,并将对语法的深入和细致的讨论推迟到以后。
清楚地解释算法概念。 众所周知,LLM的输出对其输入非常敏感。事实上,在使用这些模型时,“提示工程”(即精心设计有效的提示)已成为一种独特的(且新兴的)技能。例如,当使用 Codex 解决概率和统计问题时,设计提示以包含有关解决问题策略的明确提示是非常有效的。丹尼等人发现描述算法步骤的提示工程策略对于解决 Copilot 最初生成错误解决方案的编程任务是有效的。最近的其他工作表明,当开发人员将较大的编程语句分解为较小的任务,然后明确提示 Copilot 执行每个子任务时,他们可以更成功地使用 Copilot。学生可能需要培养新技能才能与这些模型进行有效沟通。一项关键技能是能够用自然语言描述他们希望实现的计算步骤,作为指导模型产生有效输出的方式。
以规范为中心的任务。 学生学习如何创建有效提示的一种方法是专注于编写任务规范。在传统的入门课程中,新手会看到由教师非常仔细地明确说明的问题陈述。此类详细规范为代码生成模型提供了良好的上下文,以生成正确的代码解决方案。新类型的问题可以要求学生自己制定明确的规范,从而加强 LLM 提示的技能。例如,这是“提示问题”的目标,其中学生会看到一个问题的视觉表示,说明输入值应如何转换为输出。他们的任务是设计一个提示,指导LLM生成解决问题所需的代码。提示生成的代码会自动评估,并且可以迭代地进行细化,直到成功解决问题。最近对课堂使用提示问题的研究表明,学生发现它们对于加强他们的计算思维技能并使他们接触新的编程结构很有用。
专注于重构。 学生有时会在开始编程作业时遇到困难,有时称为程序员的写作障碍。最近的研究发现,Copilot 可以通过立即提供入门代码来帮助学生克服这一障碍,使他们能够在现有代码的基础上进行构建,而不是使用空白代码编辑器从头开始。这种方法可能需要将重点转向重写、重构和调试代码等任务,但它提供了帮助学生在现实环境中保持动力的机会,在现实环境中,评估、重写和扩展代码的能力通常更重要而不是从头开始编写每一行代码。
设计LLM工具。 世界各地的程序员(不仅仅是新手)将越来越多地使用代码生成器。探索LLM直接融入教育环境(例如自动评分器和在线教科书)将是未来研究的一个重要领域。在这种环境中需要适当的护栏,以便生成的输出有效地支持学习,而不会立即揭示解决方案或让新手因反馈的复杂性或数量而不知所措。事实上,GPT- 4的发布突出了“苏格拉底式导师”的例子,它会用探究性问题来回应学生的请求,而不是直接揭示答案。 Liffiton 等人的工作就是计算机教育中这种整合的一个例子。 CodeHelp 是一个由LLM支持的工具,它使用基于提示的护栏为编程学生提供实时帮助,但不直接透露代码解决方案。
总的来说,调整LLM产生的反馈以最大限度地提高教育环境中的学习可能会成为不久的将来的一个重要研究重点。该领域最近的工作已经开始提出具体建议。首先,新手使用代码生成器通常会减少他们看到的错误数量。这似乎是一次积极的经历,尽管他们似乎没有能力处理所看到的错误。这意味着工具的设计必须能够帮助(所有技能水平的)用户通过错误反馈d迭代。其次,生成和插入大块代码可能会对各个级别的用户产生反作用。这要求用户通读他们没有编写的代码,有时比他们熟悉的水平更复杂。新手可能会被这样的代码生成吓倒,或者可能会花费太多时间阅读不会促进他们目标的代码。
因此,人工智能代码生成器应为用户提供一种控制代码插入量并指定如何逐步执行生成代码的多部分片段的方法。第三,人工智能代码生成器是黑匣子,这意味着所有技能水平的程序员都可能难以创建正确的工作思维模型,这可能会损害他们充分利用这些模型或从其输出中学习的能力。可解释的 AI (XAI) 模式在这里可能会有所帮助,例如向用户展示高于生成的代码建议的置信值和用户技能估计。这三项建议只是新研究途径的开始,即如何有效地设计可用的人工智能代码生成器,以增强新手学习者的能力并提高程序员的生产力。
我们该何去何从?

强大的代码生成模型的出现引发了人们对计算学科未来的猜测。在最近的一篇《通讯观点》文章中,威尔士声称他们预示着“编程的终结”,并相信未来将出现一场几乎没有人做好准备的重大剧变,因为绝大多数经典计算机科学将变得无关紧要。在 ACM 上最近发表的一篇文章中,Meyer 同样对这些突破印象深刻,将它们与万维网和面向对象编程一起视为千载难逢的技术,但他持更乐观的看法。事实上,Meyer预测对经典软件工程技能的需求将会复苏,例如需求分析、制定精确的规范和软件验证。
尽管生成式人工智能工具对软件开发人员的影响已经很明显,但计算教育的长期变化尚不清楚。专家们欣赏这项新技术只是因为他们已经了解了底层的基本原理。快速生成大量代码的能力并不能消除理解、修改和调试代码的需要,而是凸显了培养这些基本能力的重要性。代码素养技能对于批判性地分析正在生成的内容以确保一个人的意图与生成的代码之间的一致性至关重要。如果没有阅读、测试和验证代码是否符合预期的技能,用户就有可能成为生成内容的纯粹消费者,更多地依赖盲目信仰而不是成熟的专业知识。我们认为,对于新手来说,编写代码仍然是学习代码素养所必需的基本概念的一种有价值的方式
尽管专业开发人员将来可能确实会花更少的时间编写“低级”代码,但我们相信生成的代码仍然需要修改并集成到更大的程序中。我们确实期望看到重点发生一些转变,即使是在入门课程中,也会转向修改人工智能工具生成的代码,但编辑此类输出并用当今的高级语言编写代码的能力可能仍然是计算专业学生的一项基本技能。这与Yellin最近的观点一致,即随着程序复杂性的增加,自然语言作为指定程序的工具变得过于不精确。在某些时候,直接编辑代码比用自然语言发出明确的指令更有效。
Copilot 和 ChatGPT 等工具如果使用得当,有可能成为这种学习的宝贵助手。我们认为这些工具发挥着宝贵的教学支持作用,用于向广泛而多样化的学习者解释概念,生成示例代码来说明这些概念,并生成适合个人兴趣的有用学习资源。我们还预计会出现利用代码生成工具的新教学法,包括与工具通信的有效方法的明确教学,以及专注于问题规范而不是实现的任务。
鉴于生成式人工智能工具的快速采用,教育工作者必须改进其教学方法和评估方法。课程还应扩大到涵盖生成人工智能更广泛的社会影响,包括相关的法律、道德和经济问题。我们认为,必须抢先使用这些工具,从一开始就将它们纳入我们的课堂,并教导学生负责任地使用它们。简而言之,我们必须拥抱这些变化,否则就会被抛在后面。接受这种转变不仅是必要的,而且还代表着一个振兴我们的教育实践的机会。


原文链接
https://cacm.acm.org/research/computing-education-in-the-era-of-generative-ai/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册