跳转至

2025 春 · 编程作业的创新设计

本次以一门新课程——Rust 小学期为例,讲讲它是如何从无到有设计出来的,以及三年来的变化。

背景与设计思路

  • 背景:多门课程引入了 Rust(操作系统、编译原理)。小学期改革后,变成大一 4 周程序设计训练(Python/Rust/Java),汇编语言程序设计挪到秋季学期的计算机系统概论。目标:4 周内完成"学习一门新编程语言 + 锻炼编程能力"的双重目标。
  • 设计思路:课上主要讲语法(从基础到复杂);小作业先让同学用 Rust 重写一遍以前用 C/C++ 写过的程序,逐渐引入 Rust 的特性、体会 Rust 的不同,以巩固上课内容为主、不考虑区分度;大作业第一个主要考察 Rust 语法和标准库(Bonus:用第三方库可极大降低难度),第二个主要考察基于第三方库用 Rust 开发大型程序;每个大作业内设置难度阶梯、有一定区分度。

小作业(分阶段)

  • 第零阶段:环境配置作业(WSL + VSCode + Git)。
  • 第一阶段:写一遍以前写过的 C/C++ 代码,保证学生知道怎么实现,只需要把语言"翻译"到 Rust,从 C-like Rust 写起——学生:"啊,我会写 Rust 了!"
  • 第二阶段:开始引入一些 Rust 语法,教学生如何用 Rust 特性简化代码——学生:"啊,Rust 好用,可以简化代码实现!再也不写 C-like Rust 了!"
  • 第三阶段:引入 Rust 最难的部分——所有权和借用,锻炼新的思考方式——学生:"啊,Rust 好难,我死了!"
  • 第四阶段:"放水"。此时大作业已布置,同学们没心思放在小作业上,就照着上课内容布置一些简单题目让大家乐呵一下。
  • 课堂练习:每次上课结束布置一次小作业,夹杂当天讲的语法点的小练习;提示用什么语法实现,但不做强制要求、允许绕过、不扣分。
  • 小作业评分:20 个 OJ 题目、每题 1 分,占总评 20 分;从布置到截止三天,不查重、送分为主;超过 DDL 按时间扣分。用本地 Git 管理题面和数据,用 Python 脚本同步到 OJ 平台、抓取提交结果、统计分数并生成网络学堂打分 xls。

大作业

  • 前两周:Wordle 大作业(编写一个游戏,主要考察 Rust 标准库编程,初始不够 Rust-y、较 C-like)。
  • 后两周:OJ 大作业(编写一个在线评测系统,主要考察基于 Rust 第三方库的网站开发,考察对陌生第三方库的学习和理解能力;第三方库先由学生自学,后由助教通过两次习题课帮助学生渡过难关)。
  • 评分分三部分:基础要求(必须实现、分多步、必须按顺序实现、提供自动化测试,同学能自己预知能拿多少分)、提高要求(多个不同方向,学生可选实现哪些,由助教验收打分,但得分设上限、不能弥补基础要求失分)、非功能要求(代码规范、Git 代码管理、作业报告)。分数占比:第一个大作业 60+20+20,第二个 40+40+20;平均得分 75 左右。
  • 大作业验收:每位学生 10 分钟验收大作业进展,对着代码讲解和演示各功能要求;抄袭与否一目了然(抄袭的同学讲不出代码做了什么事);锻炼展示能力(后续许多课程都会用到)。验收结果记录在共享表格,下载成 csv 后经 Python 脚本处理出成绩,用 git 管理成绩历史、避免手算;总评也通过脚本计算;公布后提供复议机会。

AI 小作业

  • 去年讨论过一个 AI 提示词作业:让同学输入提示词,让大模型生成可以通过 OJ 的 Rust 代码。24 年暑假加了不计分的 AI 小作业,但参与的人较少(只有十人),可能需要更有意思的形式。

讲讲故事

  • Rust 小学期课程主页:https://lab.cs.tsinghua.edu.cn/rust/ 。
  • 未来:继续调整课程内容和作业内容;大作业的抄袭现象逐渐显现,该三年一大改了;"退休",交接给新一代助教。
  • 课堂讨论:关于作业设计的脑洞/困惑 + 每门课"我们课程布置的编程作业形式是什么"的自我介绍;也再次引入 2024 秋"造路由器"作业的迭代作为对照案例。

⇦ 返回 2025 春主页