Version without JavaScript, read-only: workshops, quizzes and running code are not available here. Full version · Catalogue · Sign in
Philippe Roussille's courses
Courses
Professional programming
Software architecture, exceptions, design patterns. Thirteen notions certified on paper, one project assessed with the authorised assistant.
Java, before term starts
The pre-term Java course: chapters, self-marking exercises and projects, with a real Java compiler in the browser. A placement test tells you where to start.
Object-oriented design
Object-oriented Java in depth: classes and objects, inheritance, interfaces, generics, collections and streams.
Developer fundamentals
The tools and reflexes of the trade: terminal, Git, refactoring, defensive programming, debugging, testing and documentation.
UML
Modelling software: requirements and use cases, dynamic behaviour, project structure.
Study skills
Learning, writing, surviving on the command line.
Prompt engineering
Writing for a language model, and what that commits you to.
Introduction to research
Writing a literature review: finding, sorting, reading and citing papers, with Zotero and LaTeX. S8 SI 3490.
Past courses
Functional programming in Caml
An algorithmics seminar in Caml to start programming: definitions, types, functions, case analysis, imperative features and recursion.
Theory of regular languages
Words and languages, regular expressions, finite automata; compiling an expression into a deterministic automaton and back, closure properties, minimisation, and what automata cannot do.
Programming in C
C and its Unix environment: compiling, pointers and arrays, memory layout, data structures, input and output, processes, and concurrent programming with POSIX threads.
Logic for computer science
Propositional calculus and first-order logic: reading, evaluating, transforming and proving formulas, and modelling a problem so that a solver can solve it.
68000 assembly
Programming the Motorola 68000 processor as close to the machine as possible: representing numbers, handling registers and memory, writing tests, loops and subroutines.
My method: how I organise my courses
This page describes how my courses are organised, and why. I wrote it for my students, who have a right to know how they are assessed, and for colleagues who ask themselves the same questions as I do.
Where I start from
A coding assistant can now produce a complete student project in a few minutes, with its documentation and its diagrams. A submitted project therefore no longer tells me much about the person who submits it. I do not see this as cheating. When the project weighs heavily in the grade and a tool can do it, using the tool is a reasonable choice. And banning it would make no sense: I could not check it outside the room, and my students are apprentices who use these tools at work.
The problem existed before assistants. In 2021, Lehtinen, Lukkarinen and Haaranen had already shown that a large share of students in an introductory course could not explain the code they had submitted themselves. Assistants have mostly made the situation much more common.
Two separate assessments
In an engineering subject like the ones I teach, there are two things to assess, and they are not assessed the same way.
The first is judgement: reading code, seeing what is wrong, deciding where to intervene, justifying a design choice, estimating what a change will cost. The assistant does not do this for the student. The second is the ability to build something substantial with today's tools, assistant included, without losing control of what is produced.
The second depends on the first. Someone who cannot read the code the assistant offers cannot check it. Several studies point in this direction. Bastani and colleagues (2025) followed high-school students in mathematics: with free access to an assistant, their results improved during practice, then dropped in the exam, once access was removed. A version of the assistant that gave hints rather than answers avoided this drop. Among novice programmers, Prather et al. (2024) and Kazemitabaar et al. (2023) observe that the assistant mostly benefits those who already have the basics, and that it sustains misconceptions about how code works in the others.
So I have two assessments, which my students and I call the licence and the driving.
- The licence is an individual exam, on paper or offline, without AI. You have to read code, find what is wrong, modify it and justify your choices.
- The driving is the project. The assistant is allowed there, and even expected. I look at whether the student knows how to frame what they ask for, check what they get, assemble the work of several people into coherent code, and explain any line.
The project grade is weighted by the exam grade: without the licence, the driving does not fully count.
I am not the only one to separate things this way. The University of Sydney distinguishes a secured assessment from an open one, and the AI Assessment Scale (Perkins, Furze, Roe and MacVaugh, 2024) sets out levels of permitted AI use for each assessment. Bearman and colleagues (2024) call evaluative judgement the ability to judge the quality of a piece of work, one's own as well as a tool's. That is what the second assessment aims at.
What I have given up
I no longer give lectures in an amphitheatre, nor step-by-step guided lab sessions with a skeleton to fill in. A lecture passes on information that can be found everywhere today. A guided lab is finished in thirty seconds with an assistant, and it already required no decision.
In class, I keep three things: short explanations, given when they are needed; exercises that start from a problem and force a choice; and my feedback on what the students produce. The meta-analysis by Freeman et al. (2014), covering 225 studies, finds that making students work during the session rather than making them listen raises results by about half a standard deviation, and the failure rate drops from 34% to 22%.
How a sequence unfolds
Each course is divided into 45-minute sequences, with one notion per sequence, two at most. A sequence always follows the same order:
- a starting situation, on existing code: a bug, an audit, a change request;
- a five-to-seven-minute explanation, done live on that code;
- a pause, where everyone chooses an exercise among three levels;
- a core exercise, checked by tests;
- a deeper exercise, for those who have finished;
- a short exit question.
Between sessions, there is a chapter to read, sometimes a video of six minutes at most followed by a question, and a quiz.
This order (predict, run, investigate, modify, then make) comes from the PRIMM method (Sentance, Waite and Kallia, 2019). It rests on an observation: being able to trace and explain code comes before being able to write it, and the two go together (Lopez et al., 2008; Xie et al., 2019). That is why my exercises almost always start from code that already exists. It is also the ground where the assistant helps least, and at work, you spend far more time modifying code than writing it.
Three levels, your choice
After each explanation, I leave four minutes and three exercises on the same idea. Level 1 redoes what has just been shown, with the example in front of you. Level 2 matches what you need to be able to do in the exam. Level 3 is a more open question, for those who want to dig deeper. Everyone chooses their level at each pause, and can change at the next one. There are no ability groups.
The core exercise offers graduated hints, which can be opened without penalty. Beyond that, the deeper exercise is done without help. Two results justify this choice. For novices, explicit explanations and worked examples work better than free discovery (Kirschner, Sweller and Clark, 2006; the article is debated, but it holds on this point). And what helps a novice can hinder someone more advanced (Kalyuga et al., 2003).
Voting in class
Each explanation starts with a question: what will this code do? Everyone votes. When the room is split, between 30 and 70% correct answers, everyone discusses with their neighbour for two minutes, then we vote again. In computer science, Porter, Bailey Lee and Simon (2013) report that this method brought the failure rate down from 20% to 7% over ten years of courses. Porter et al. (2011) also checked that students really learn during the discussion, and do not merely copy their neighbour's answer.
Between sessions
My students are on work-study programmes and spend several weeks in their company between two sessions. For these periods, I give a roadmap with dated deadlines. At each deadline, a quiz closes, and 40% of its questions come back to the notions missed in previous quizzes. This is the best-supported part of the whole set-up: testing yourself helps you remember more than rereading does (Roediger and Karpicke, 2006; Adesope, Trevisan and Sundararajan, 2017, a meta-analysis of 217 studies).
The exam
The exam asks eight to twelve in-depth questions rather than thirty short ones. Each one gives some code, and asks you to find a flaw in it, propose a change and justify it. One of them is about code produced by an assistant, into which I have slipped errors, because reviewing such code is now part of the job. Another is about the project's domain: the student who has understood their project has an advantage there, the one who delegated it entirely does not.
A word of caution
Deslauriers and colleagues (2019) compared, in physics, a lecture course and a course where students work in class. The latter learnt more, but felt they were learning less. My course probably gives my students the same impression. I tell them so from the first session.
What has not been demonstrated
Two of my choices rest, as far as I know, on no published study: weighting the project grade by the exam grade, and the exam in which each student modifies their own repository, offline and under time limits. These are bets, which seem to me consistent with the rest. I collect data on this course, anonymously and with the students' consent, and I will publish what it shows, even if it proves me wrong.
Several of the studies cited concern audiences other than mine: high-school students, physics students, middle-school pupils. Their results do not necessarily apply as they stand to engineering apprentices. The table below gives the limit of each.
References
| Reference | What it establishes | Limit |
|---|---|---|
| Adesope, O. O., Trevisan, D. A. and Sundararajan, N. (2017). Rethinking the use of tests: A meta-analysis of practice testing. Review of Educational Research, 87(3). doi:10.3102/0034654316689306 | Testing yourself consolidates memory, in the laboratory and in class | General psychology |
| Bastani, H. et al. (2025). Generative AI without guardrails can harm learning. PNAS, 122(26). doi:10.1073/pnas.2422633122 | Free access to an assistant degrades performance once access is removed; guardrails preserve it | High-school students, mathematics |
| Bearman, M. et al. (2024). Developing evaluative judgement for a time of generative artificial intelligence. Assessment & Evaluation in Higher Education, 49(6). doi:10.1080/02602938.2024.2335321 | Evaluative judgement as a central outcome | Conceptual framework |
| Deslauriers, L. et al. (2019). Measuring actual learning versus feeling of learning. PNAS, 116(39). doi:10.1073/pnas.1821936116 | With active learning, students learn more while feeling they learn less | Physics, one institution |
| Freeman, S. et al. (2014). Active learning increases student performance in science, engineering, and mathematics. PNAS, 111(23). doi:10.1073/pnas.1319030111 | A gain of 0.47 standard deviation, failure down from 34% to 22% | Volunteer instructors |
| Kalyuga, S., Ayres, P., Chandler, P. and Sweller, J. (2003). The expertise reversal effect. Educational Psychologist, 38(1) | What helps a novice hinders an advanced learner | Laboratory tasks |
| Kazemitabaar, M. et al. (2023). Studying the effect of AI code generators on supporting novice learners. CHI '23. doi:10.1145/3544548.3580919 | The best prepared benefit most from the assistant | 69 pupils aged 10 to 17 |
| Kirschner, P. A., Sweller, J. and Clark, R. E. (2006). Why minimal guidance during instruction does not work. Educational Psychologist, 41(2). doi:10.1207/s15326985ep4102_1 | Guided instruction is superior for novices | Contested position (Hmelo-Silver et al., 2007; Kapur) |
| Lehtinen, T., Lukkarinen, A. and Haaranen, L. (2021). Students struggle to explain their own program code. ITiCSE '21. doi:10.1145/3430665.3456322 | Many students cannot explain their own code | Online introductory course |
| Lopez, M., Whalley, J., Robbins, P. and Lister, R. (2008). Relationships between reading, tracing and writing skills in introductory programming. ICER '08. doi:10.1145/1404520.1404531 | Tracing and explaining correlate with writing | Correlations |
| Perkins, M., Furze, L., Roe, J. and MacVaugh, J. (2024). The Artificial Intelligence Assessment Scale (AIAS). Journal of University Teaching and Learning Practice, 21(6). doi:10.53761/q3azde36 | Levels of permitted AI use per assessment | Framework, pilot without a control group |
| Porter, L., Bailey Lee, C. and Simon, B. (2013). Halving fail rates using peer instruction. SIGCSE '13. doi:10.1145/2445196.2445250 | The failure rate in computer science is halved or divided by three | Field study, not randomised |
| Porter, L., Bailey Lee, C., Simon, B. and Zingaro, D. (2011). Peer instruction: Do students really learn from peer discussion in computing? ICER '11 | The gain comes from the discussion, not from copying | One institution |
| Prather, J. et al. (2024). The widening gap: The benefits and harms of generative AI for novice programmers. ICER '24. doi:10.1145/3632620.3671116 | Two populations of novices diverge with the assistant | Qualitative, small sample |
| Roediger, H. L. and Karpicke, J. D. (2006). Test-enhanced learning. Psychological Science, 17(3). doi:10.1111/j.1467-9280.2006.01693.x | Testing beats rereading for retention | Psychology, prose texts |
| Sentance, S., Waite, J. and Kallia, M. (2019). Teaching computer programming with PRIMM. Computer Science Education, 29(2-3). doi:10.1080/08993408.2019.1608781 | Predict, run, investigate, modify, make improves results in mixed-ability classes | Lower-secondary pupils, 493 students |
| University of Sydney. Two-lane approach to assessment | Secured assessment and open assessment, at programme level | Institutional framework |
| Xie, B. et al. (2019). A theory of instruction for introductory programming skills. Computer Science Education, 29(2-3). doi:10.1080/08993408.2019.1565235 | Explicitly teaching tracing, writing and understanding templates improves comprehension | Exploratory |