15. 课程设计与作业批改

本章场景

本章讲用 Claude Code 做课程宏观设计(大纲、教学日历、考核方式)和作业批改流水线

1. 课程大纲设计

从需求出发(Backward Design)

> 我要新开一门课:"面向文科学生的 Python 编程"。
> 学情:大一文科生,无编程基础。
> 学时:32 学时,16 周。
> 请用"逆向设计"帮我设计课程大纲:
> 1. 先定义 5 个学习成果(用 Bloom 动词,可测量)
> 2. 设计能证明这些成果的考核方式
> 3. 设计每周的教学活动
> 4. 给出推荐教材和每周阅读

借鉴已有课程

> 我想参考 MIT 6.0001 的课程设计思路,
> 但适配中国大学生的学情(更少的学时,理论结合实践)。
> 帮我对比 MIT 6.0001 的课程大纲和我校的情况,
> 输出一份改造建议。

教学日历排课

> 这是我的 16 主题清单:
> [主题 1, 主题 2, ..., 主题 16]
> 帮我:
> 1. 按学习曲线排序(难度递进)
> 2. 标注每节课是理论、实验还是项目
> 3. 安排 3 次大作业的时间点
> 4. 安排期中、期末考试时间
> 5. 输出 Markdown 表格,作为我的教学日历

2. 讲义与 PPT

把大纲展开成讲义

> 这是第 5 节课的主题:"Python 函数与作用域"。
> 请展开成 45 分钟的讲义:
> - 5 分钟回顾上节
> - 15 分钟讲函数定义与调用
> - 15 分钟讲作用域(LEGB 规则)
> - 5 分钟讲常见错误
> - 5 分钟现场小练习
> 用 Markdown,适合直接转 PPT。

生成配套 PPT 大纲

> 把刚才那份讲义转成 PPT 大纲,
> 每页一个标题 + 3-4 个 bullet point,
> 总共不超过 15 页,
> 标注哪几页需要现场演示(写 D,其他写 L)

准备答疑材料

> 学生在上"列表与元组"这节课时,
> 经常问以下 5 类问题:
> [常见问题清单]
> 帮我准备一份 FAQ,每个问题用通俗的话回答,
> 最后加一节"如果你还有疑问,先看这 3 个资源"。

3. 作业设计

阶梯式作业

> 给"Python 基础"课程设计 3 套作业,难度递进:
> 1. 入门级:基础语法、变量、循环
> 2. 进阶级:函数、文件、异常处理
> 3. 高级:面向对象、综合项目
> 每套作业:
> - 4 道题
> - 难度递进
> - 包含自动测试用例
> - 估算完成时间(给大一学生)

防抄袭的题目变体

> 我要给学生布置"用 Python 爬取豆瓣电影 Top250"的作业。
> 担心学生互相抄作业。
> 帮我生成 5 个变体题,核心要求相同但细节不同:
> - 数据源不同(豆瓣 / IMDB / 猫眼)
> - 输出格式不同(CSV / JSON / SQLite)
> - 附加要求不同(加可视化 / 加错误重试 / 加代理)
> 每题给题面 + 评分标准。

自动出题(节省时间)

> 为"Python 字典"这一章出 10 道选择题:
> - 难度递进
> - 每题 4 个选项
> - 干扰项要合理(不能太明显)
> - 每题给答案和解析
> 用 Markdown 表格输出

4. 作业批改流水线

设计原则

⚠️ AI 适合做初评和一致性检查,不适合直接给分。

推荐的流水线:

学生提交 → 自动跑测试 → AI 初评(优缺点) → 老师审核 → 老师定分 → 反馈给学生

自动化部分

跑测试用例

> 把 submissions/ 下所有 Python 作业用 tests/ 下的测试用例跑一遍,
> 把通过率统计到 results.json:
> {
>   "student01": {"passed": 8, "total": 10},
>   ...
> }

代码风格检查

> 用 ruff 扫所有提交,统计每个学生:
> - 错误数
> - 警告数
> - 最严重的 3 个问题

初评 Skill

复用 09. 自定义 Skill 开发 中的 assignment-feedback Skill。

老师必做部分(AI 不能替代)

  • 审阅初评——AI 可能误判,尤其是对创造性解法
  • 加个性化反馈——学生在意"老师看过我的代码"
  • 决定分数——这是教学判断,不是技术问题
  • 识别学术不端——AI 看不出代写

批改工作流脚本示例

// examples/workflows/assignment-grading.js
phase('跑测试')
const testResults = await pipeline(
  studentFiles,
  f => agent(`跑 tests/ 下的测试:${f.path}`, {model: 'haiku'})
)

phase('风格检查')
const styleReports = await pipeline(
  studentFiles,
  f => agent(`用 ruff 检查:${f.path}`, {model: 'haiku'})
)

phase('初评')
const initialFeedback = await pipeline(
  studentFiles,
  async (f) => {
    const test = testResults.find(r => r.file === f.path)
    const style = styleReports.find(r => r.file === f.path)
    return await agent(
      `基于以下信息给初评:\n` +
      `测试结果:${JSON.stringify(test)}\n` +
      `风格报告:${JSON.stringify(style)}\n` +
      `代码:${f.content}`,
      {model: 'sonnet'}
    )
  }
)

return {
  testResults,
  styleReports,
  initialFeedback
}
// 老师审阅 initialFeedback,加上自己的意见

5. 课程反馈收集

设计问卷

> 帮我设计一份期中课程反馈问卷:
> - 10 道量表题(1-5 分)
> - 3 道开放式问题
> 涵盖:内容难度、进度、教学方式、作业量
> 用 Markdown 输出,适合 Google Form

分析反馈

> 这是 80 份匿名反馈的 CSV:
> - 第 1-10 列:量表题
> - 第 11-13 列:开放题(中文文本)
> 帮我:
> 1. 统计每题的均值和标准差
> 2. 用 jieba 对开放题做词频统计
> 3. 提取 5 个最常被提到的问题
> 4. 输出改进建议 3 条

6. 教学档案

学期结束整理

> 这学期的课程材料都在 course/ 目录下:
> - syllabus.md(大纲)
> - lectures/(讲义)
> - assignments/(作业)
> - feedback/(学生反馈)
> 帮我整理一份"课程档案",方便下学期复用:
> 1. 课程基本信息
> 2. 用了哪些教学材料(链接)
> 3. 学生成绩分布
> 4. 哪些内容学生反馈好/差
> 5. 下学期的改进建议

7. 给课程组的协作

集体备课

> 课程组 3 个老师下周要集体备课。
> 主题是"机器学习-决策树"。
> 我已经准备了初稿 lecture.md。
> 请帮我:
> 1. 列出可能的其他老师会问的问题
> 2. 准备 3 个补充案例
> 3. 准备 1 个 15 分钟的现场演练环节

下载示例

本章提到的 assignment-grading.js 等 Workflow 脚本,以及 3 个示例 Skill(learning-tutor / course-designer / assignment-feedback),全部打包在 examples.zip 里(约 15KB,就是仓库 examples/ 目录的完整快照)。

点击上面那个链接即可下载。下载后建议:

$ unzip examples.zip -d ~/examples-claude-code
$ cd ~/examples-claude-code
$ ls examples/{skills,workflows}

如果你想先看某个文件的源码,直接打开下载后的本地文件,或访问本教程源码仓库的 examples 目录。

下一步