Skip to content

Basics: Iterating and Updating Programming Assignments

The 10-minute lecture

by @jiegec

1. When does a programming assignment need iteration/update?

For example, when as a TA you hear things like:

  • The assignment is so "involved"; all my time goes to it with little gain
  • Starting is so hard; stuck at the first step, worried I can't do it
  • Please TA, extend the deadline
  • Crap assignment, posting to Moments/Zhihu
  • This ancient assignment from years ago, why still assign it?
  • Unrelated to the teaching content, and unrelated to the assignments before/after
  • No grading standard; I don't know how much to write

Or during tutoring/grading you have thoughts like:

  • This assignment is so laborious to grade; 200+ people, it'll kill me
  • If I had to do this assignment, I wouldn't want to

Examples:

A course lab: the lab requires hard server setup; the lab manual mentions Windows XP. On Linux you can start the server, but it involves VMs, WSL, etc. β€” environment setup is too complex and unrelated to the lab itself.

Revision: provide observation results, no longer requiring environment setup or reproducing the process.

A course in some year, some lab: for the basic implementation, the doc offers four optimization paths A, B, C, D, but sets too-high performance requirements so only D can pass. A student completes A, finds performance insufficient, moves to B, again insufficient β€” very discouraged.

Revision: provide more hints, improve the performance requirement.

2. What changes and what stays

After deciding an assignment needs iteration, first think: what changes? What stays?

What stays:

Why was the assignment designed?

Data structures: the lecture covered data structures and algorithms, so the PA should implement those ideas in code, applied to specific problems.

Computer networks: students rarely handle binary data, and later labs involve much binary-data processing, so binary-data handling is split out for individual practice.

These teaching goals shouldn't change; preserve the knowledge to be taught (unless out of scope/outdated).

What can change:

  • Assignment content: which parts, what requirements
  • Timing: when it starts, when it ends
  • Grading standard: what earns how much
  • Difficulty gradient: all easy / easy to hard / all hard

3. How to iterate/update an assignment

After deciding what changes and what stays, start doing it!

When:

  • Start early before the semester; at least finish before assigning.

Focus on feedback:

  • Collect feedback promptly after assigning, remedy found problems; within the semester you can adjust later assignments based on earlier feedback.

Coordination:

  • Communicate among TAs; don't publish half-finished work. If you must temporarily put a half-finished version on a public site, mark it clearly: TODO / draft / not final.
  • Communicate across courses: avoid deadline conflicts; stagger heavy assignments.

More notes:

  • Iteration needn't finish in one semester/year: it may take years, even passed TAs continuing the work.
  • Manage code and docs well, organize an FAQ, ensure continuity and updatability, keep original files to avoid a "single uneditable PDF" situation.
  • Use GitLab, Tsinghua Cloud Drive, Tencent Docs, questionnaires, etc.
  • Have other TAs/students evaluate the assignment's difficulty; do it yourself at least once.
  • Anticipate situations and responses: too hard, too easy, errors, etc.

Reference other excellent assignments for inspiration.

International:

  • CSDIY.wiki
  • SIGCSE Nifty Assignments
  • MIT OpenCourseWare
  • Public courses from Stanford/CMU/Berkeley, etc.
  • Note: course names may not correspond; even translated, course positioning may differ.

Domestic examples: Tsinghua https://lab.cs.tsinghua.edu.cn/#/sypt/sywd

Discussion topics

  • What assignments have you revised in recent years? Any interesting stories behind the iteration?
  • Talk about an undergraduate/graduate course you're TAing; does its assignment need change, and how?
  • How to evaluate the effect after iteration? Better, worse, or mixed?
  • How to iterate an assignment into a form LLMs can't do?

Some views:

Consider bringing real-world scenarios/projects into the course, or adding visualization/drawing parts.

Turning an assignment into something LLMs can't do shouldn't be about making it harder for students' sake. Rather, like how linear-algebra courses after computers and MATLAB, no longer heavily require students to do tasks that computers/MATLAB should do.