I'm teaching an introductory C course next semester, and AI tools can now solve many of the difficult programming assignments I might give students. I'm considering several approaches: designing assignments around ASCII art or other inputs that AI struggles with, asking students not to use AI, shifting grades toward participation and timely work, or requiring short assignments to be completed in supervised laboratory sessions on university computers. Each option has drawbacks, especially with more than 100 students, limited TA time, and students who normally work on their own laptops. The final exam is standardized across all C sections and isn't under my control. From a student's perspective, which approach would feel fairest and most useful? Are there scalable alternatives that encourage genuine understanding without creating excessive administrative work?
4 Answers
Use different activities for different goals. Homework can be an opportunity to practice, look things up, and even use AI responsibly, while labs and quizzes can assess what students can do independently. For example, have students write or modify a small function in class, trace pointer and memory behavior, predict program output, or explain why a solution handles a particular edge case. These tests can focus on reasoning rather than perfect syntax, and they prepare students for a closed-book or controlled final.
Trying to make every assignment unreadable to AI probably won’t work for long, and strict timed computer sessions could punish students who have jobs or other scheduling constraints. A better approach is to keep homework useful but give it a smaller percentage of the grade, then use short supervised quizzes or practical checks to verify understanding. A ten-minute quiz with a few conceptual questions or a small code-tracing problem can reveal whether students learned the material without creating a huge grading burden.
Some fundamentals should still be practiced without assistance. In-person code tracing, paper pseudocode, pointer diagrams, memory-allocation exercises, and short handwritten programming questions can show whether students understand the underlying ideas. You don’t need to eliminate AI from every part of the course; you just need enough independent assessment to establish that students can reason about C themselves. Keep the workload reasonable, because excessive difficulty and constant deadlines can push students toward copying rather than learning.
You could explicitly teach students how to use AI as a debugging and explanation tool instead of letting it produce the entire solution. Ask them to attempt the problem first, then use AI to explain compiler errors or compare approaches, followed by a short reflection identifying any mistakes in the generated response. In class, have them change their program to support a new requirement or defend a design choice. That makes copying less useful while teaching a skill they may actually need later.

That seems more practical than trying to invent increasingly elaborate AI-resistant assignments. I’m considering fewer, larger assignments combined with brief in-class knowledge checks.