Assessment
Assessment of programming is difficult.
There are two possibilities for summative assessment. Assessment can be based on coursework assignments, carried out during the module, or it can be based on a formal examination. The problems with these two strategies are well known. First, it is difficult to be sure that any work where the student is unsupervised is in fact the students own. There is also the "infinite number of monkeys principle", where a student might achieve a working program with little understanding, but relying on trial and error. Second, any examination tests many things beyond the subject at hand (memory, ability to write quickly, and so on) and, especially for programming, present an inherently artificial situation.
The best option is, of course, to use a mixture of these two approaches. Coursework assignments are therefore used during the module, and some summative credit is attached to them (cynics would argue (with some justification) that some credit is needed in order to coerce the students into attempting the work)). The majority of the assessment comes from an end-of-module examination. In order to pass the course the student must achieve a reasonable standard in both components. Thus, a student who has not understood the coursework will presumably not be able to pass the examination.
As before, there are some aspects of the module that come pre-ordained, as it were. The relative weights of the assessment were set when the module was designed. The final assessment was to be by coursework assignments (40%) and formal examination (60%). In order to pass, a student must achieve a reasonable standard on each of the two components. It is important to note that this is a reasonable standard - it is not necessary to achieve a nominal pass standard on each component. It is quite possible to pass overall even if one component has been marginally failed.
"Coursework" is presumably a concept that is well understood. The students are given a piece of work to do, a deadline when this work is due, and are expected to go away and work. That is certainly a reasonable description of the arrangements for coursework in this course.
"Examination" is probably also well understood and a situation where the students are gathered together under close supervision and given some tasks to complete within a rigidly defined time of at most a few hours. This does not have to be a written exercise, though. The "examination" for this course is a supervised programming test. The students gather in a laboratory, and may consult notes, existing code, and anything else that they may have brought with them. The only restrictions are that they are not allowed to use any form of communication (so email and instant messaging are forbidden) or the world-wide web. It is trivial to set up the networking on the machines they use to enforce this.
This scheme needs to be mapped into practical arrangements for the module. There are two equally weighted coursework assignments, one in Python and one in Java. The "examination" takes the form of a supervised laboratory session where the students are asked to complete a short Java assignment in about two-and-a-half hours; the time limit is kept flexible, within reason, and the students are allowed to consult reference materials, their own code, and so on.
As it turned out, three students passed comfortably, although none of them achieved the MSc "distinction" standard of 70%. One failed, through not having made much of an effort to pass, and the last was finally judged to be a marginal fail.