I’ve been putting off a review of these modules because covering all three is a lot of work. And a great way to make that worse would be to split it into three different posts. So that’s exactly what I’m going to do. First up will be M269, with a breakdown of what’s encountered on the module, how I feel about the various sections, and then an overall reaction to the module.
Note that I’m not going to discuss actual programming here. M269 happens to use Python as its language of choice, but that’s just a vehicle to demonstrate algorithms. University is not the choice place to learn a progamming language, and the concepts in M269 are language-agnostic.
M269 starts by considering the concept of abstraction, and multiple ways it can be used in computing. This is excellent, and fills a major gap in M250 caused by the language choices employed by Java. It’s a gap that made M250 more difficult to study, so that might be a reason to consider taking the two simultaneously … But then you’d have two different programming-heavy modules using different languages, and that could prove confusing, especially come exam time. The conventional wisdom is to take M250 the year before M269, and I wouldn’t disagree with that.
From abstraction, it considers (abstract) data types. I think a lot of the instruction here implies without stating that there’s a natural link between the shape and definition of your data, and how you can use that data. It’s explored more explicitely in some MOOCs I’ve done, and it feels useful. Still, students who pay attention will find the connection. Using the data leads to solving problems (such as searching and sorting) using algorithms, and then evaluating between multiple useful algorithms. This provides the context for discussion of algorithm complexity. So far, so good. This is covered in many introductory-level computing MOOCs from other universities. Frankly, I didn’t find the OU model particularly compelling, aside from laying the foundations of abstraction. But it wasn’t much worse than other methods I’ve encountered, except that it’s rather dry. It’s not as fun or entertaining as MIT-OCW, HarvardX, or UBCx MOOCs, and contextless programming challenges (aside from the iCMAs) aren’t engaging as they’re encountered in the materials. On the other hand, I found the Big-O (being changed to Big-Ω for future presentations, and the module actually explains the difference) discussion more academic than I’d encountered, which I found really useful.
The module also covers formal logic, and it does this beautifully. My dad used to lament that Geometry was the closest that students got to formal logic in school, and thanks to computer science that’s no longer the case. The largest, gaping problem here is that there’s no feedback to students on this portion of the module. Along with computability, this is assessed only in the exam, and detailed feedback is unavailable. This does a disservice to students, but one that’s likely welcome to both the majority of students and tutors alike … It seems like a lot of work for everybody.
I never got a word from my tutor, aside from a bizarre marking on a TMA. The TMA asked for changes to an existing function, and I was able to get the job done without changing the inputs and outputs, which is essential in a multi-programmer environment. She criticised me for not making a completely different function which couldn’t be used as a replacement. Fair enough. But I was able to get help from other tutors, and the tutorials from these other tutors were always engaging and enlightening.
I think there’s a lot that M269 does right, but there’s a lot that freely available MOOCs do better at an introductory level … M269 was a bit basic for a second-stage module. It does some things, like formal logic, abstraction, and complexity, better than those MOOCs, but it’s not as engaging. And for an eight month module, engagement is critical. It’s a good and important module, but it could do with some fresh, colourful paint.