题目
CS1-LLM:将 LLM 整合到 CS1 教学中
论文地址:https://arxiv.org/abs/2406.15379
项目地址:https://github.com/facebookresearch/UnsupervisedDecomposition
摘要
最近,大型语言模型 (LLM)(如 ChatGPT 和 GitHub Copilot)的广泛使用可能会对入门编程课程 (CS1) 产生影响,无论是在应该教授的内容方面,还是在如何教授方面。事实上,最近的研究表明,LLM 能够解决我们之前在 CS1 中使用的大多数作业和考试。此外,专业软件工程师经常使用这些工具,这引发了一个问题:我们是否也应该培训学生使用这些工具。这份经验报告描述了一所大型研究型大学的 CS1 课程,该课程从课程开始就完全接受使用 LLM。为了纳入 LLM,该课程被有意修改,以减少对语法和从头开始编写代码的强调。相反,该课程现在强调使用 LLM 成功制作软件所需的技能。这包括解释代码、测试代码以及将大问题分解为 LLM 可以解决的小函数。除了对这些技能进行频繁的形成性评估外,学生们还被给予三个大型的开放式项目,涉及三个不同的领域(数据科学、图像处理和游戏设计),让他们能够在自己选择的主题上展示创造力。在期末调查中,学生们表示,他们很欣赏在 LLM 的帮助下学习,并且在编写代码时以各种方式与 LLM 互动。我们为希望将 LLM 纳入课程的教师提供经验教训。
CCS 概念 • 社会和专业主题 → 计算机科学教育。
关键词 CS1、入门编程、LLM、Copilot、生成式 AI
简介
2023 年,计算机教育研究界见证了关于大型语言模型 (LLM) 和生成式人工智能 (GenAI) 对计算机教育课程影响的评论和研究激增。在 2023 年 12 月发布的 ITiCSE 工作组报告中,作者指出“毫无疑问,LLM 和其他形式的 GenAI 将在未来几年对计算机教育产生深远影响” [14]。事实上,这种深远的影响已经显现出来。例如,大量研究表明,GPT-4 可以以课程顶尖学生的水平解决 CS1 问题 [14]。LLM 的能力正在迅速提升,这导致教师担心他们的编程课程现在应该是什么样子。一些教师试图禁止使用这些工具,或设计 LLM 难以应对的评估类型,而另一些教师则接受这些变化 [9]。
我们建议重新设计围绕LLM的入门编程课程,包括重新确定学习成果的优先顺序,原因有二。首先,随着LLM能力的不断提高,软件开发实践和编程所需的技能也在不断发展。GitHub 的一项调查显示,92% 的美国开发人员正在使用这些工具,其中 70% 的开发人员看到了技能提升和生产力提高等好处 [16]。我们认为,学生应该通过学习LLM来帮助他们为使用LLM的劳动力做好准备,因此我们曾经优先考虑的技能(如从头开始编写代码)可能不再那么重要。第二个原因是,纳入LLM可以让学生更快地参与对他们个人更有意义的更大、开放式的项目,并且可以提高参与度 [6]。CS1 学生通常研究小型、高度受限的问题,这些问题与软件开发过程不同 [1]。通过从事开放式项目,他们可以更好地接触编程实践,并受到从事可能更个人相关的工作的激励 [18]。
在本文中,我们讨论了以 LLM 为编程学习中心的新型 CS1(CS1-LLM)教学经验。我们在设计课程时的核心问题是:学生现在能用 LLM 做什么以前做不到的事?我们仍然希望学生能够从头开始编写代码,我们仍然致力于其他基础知识 [21],例如仔细阅读、跟踪和解释代码。但现在我们不再像过去那样花几周时间教授 Python 语法,而是依靠 LLM 强大的代码编写能力来帮助学生克服语法障碍,专注于编程的更具创造性的方面。
设计原则
如上一节所述,我们设计了新的 CS1(CS1-LLM)以帮助学生从 LLM 的优势中受益。牢记这一总体目标,我们首先制定了指导课程开发和实施的设计原则。我们的第一个设计原则是使学生能够并鼓励他们在整个课程中使用 LLM。为此,我们很早就教学生如何安装和使用 GitHub Copilot 来帮助他们编写 Python 代码。我们之所以选择 Copilot,是因为它与 VS Code 集成良好,VS Code 是我们许多学生将在行业或他们以后的编程项目中使用的 IDE。由于我们希望在与学生学习环境相似的环境中测试学生,我们还在一些监督测验和测试中提供了 Copilot。社区对于在有或没有 LLM 支持的情况下应该学习的基础知识缺乏共识。因此,我们的目标是确保学生在有或没有 LLM 支持的情况下都能流利地完成课程。
完成 CS1 后,学生需要掌握的一项关键技能是能够独立阅读、跟踪和编写一些代码,因此在某些评估中我们不允许使用 Copilot。我们的第二个设计原则是让学生为进入以 LLM 为常态的劳动力市场做好准备。不幸的是,CS 课程所教授的内容与行业需求之间存在很大差距 [2, 20]。例如,研究人员发现,学校的作业往往要求学生从头开始编写代码,而不是让学生像行业工作中常见的那样学习阅读和修改代码,而且学校作业通常侧重于编写小型独立程序ÿ