I won’t officially have my results back for M250 for another five weeks or so, but the exam question paper’s been released, so I have a pretty good idea of how I did. I’m not 100% sure if I missed one of the sections. I practiced my exact answer to that exact question so many times, that it’s difficult to remember if I actually wrote the answer on the answer book, or am just remembering one of the times I practised it. Note to future self: If you gotta visit the loo, visit the loo. Don’t rush to finish early and decide not to double-check that you’ve answered all the questions.
Anyway, if I answered that question, I’ve definitely got a distinction. If I didn’t, I think that I probably got between 86 and 90 (possibly even 94) marks, and still got a distinction. (I definitely dropped at least two marks, and six if I didn’t answer that one question part.) The worst case scenario is that if I’m very harsh in marking myself, and I assume a few mistakes I didn’t realise on the day (like reversing a greater-than sign, for example), I mark myself an 84, which makes me an edge case that the results team will have to consider. Considering my OCAS is 100, I feel I’d do pretty well in such a circumstance. So it’s a very, very narrow path to me not getting a distinction, but it’s possible, and I guess I’ll see.
How do I feel about the course itself? First, it’s very well laid out. Rather than subdividing every section as much as possible, they break the learning into two-week chunks, and allow the students to manage their time appropriately. This is much better than smaller one-week chunks, as it gave me the ability to focus on my other module (while I was still pretending I cared about it) when I had to without feeling like I was slipping behind.
Having also taken Helsinki University’s MOOC.fi Object Oriented Programming with Java I & II, Harvard’s CS50: Introduction to Computer Science, MIT’s OCW Introduction to Computer Science and Programming Using Java 6.00.1x, and UBC’s Software Construction: Data Abstraction (we’re going to ignore Microsoft’s shambles of a DEV276x Java offering), I have quite a few OOP study introductions to compare M250 to.
It compares very favourably. Most importantly, this is the most academic offering of the lot, which was surprising with so many universities in that list. However, aside from UBC, the others are all introductory level courses, whereas the OU module is for second year university students who are in the habit of studying. While the Helsinki module is very good at teaching coding skills, and both the Harvard and MIT offerings take the red pill and show the maths and memory calls that make this stuff work, M250 is the best at explaining logically (as opposed to physically) how this stuff works. It borrows the concept of message sends from the Smalltalk programming language to explain how objects interact to form complex code. That one tiny way of looking at objects shifted my entire approach to the OOP paradigm, and it’s much, much more natural for me to use than it was after the previous courses. Whereas before I was following rules I was told to follow, now I’m letting my code communicate using what feel like natural tools. The instruction is absolutely rigid in definitions and boundaries between any two related principles (for instance, between data hiding and encapsulation, between substitutability and polymorphism, etc.), and this gives a much better language for discussion about how and why OOP works.
Previous courses I’ve taken haven’t all been exclussively about the OOP paradigm, but some have. While I’ve been able to use OOP better after each one of them, M250 is the first time that I really feel like I get it. It’s an excellent course, well structured, plainly explained, gives both academic and practical views of the subject in an understandable way, and is fairly assessed (despite finding an impossible question on an OU exam for the second year in a row). It is the exact antithesis of TM254.
Beware that it is not a coding module. It is a module about Object Oriented Programming concepts, and happens to go over how to use Java as an example of how OOP works. If you want a Java coding module, I recommend the excellent MOOC.fi course mentioned above.
Not sure if you’ll see this, but I’ve been reading your blog recently and I’ve found it really interesting as I’m thinking of enrolling onto the Q62 course this October. First off, I’d like to thank you for all the updates you’re making to this blog, they have really helped inform my decision on whether I want to study Q62 or not. I was just wondering what level of programming knowledge is required to complete a module like M250, is everything you need to know, code-wise, covered in the module books or are you expected to have a knowledge of OOP before you start the module?
There’s a short answer and a long answer. The long answer would bore us both, so I’ll start with the short answer, and then see how far I get before one of us falls asleep.
You don’t need any familiarity with OOP in general or Java in specific to handle M250. But any programming experience (in any language or paradigm) you have will help. There, that’s the short answer.
M250 teaches just enough of Java to get you through understanding the OOP core principles of encapsulation, abstraction (as it pertains to OOP, not to computer science as a whole), polymorphism, and inheritance, along with collections (holding multiple values/references in one variable, such as an array, list, or set), and file input/output. By the time you’re done, you won’t even actually be able to hand someone a running program. So, if you want to learn Java in meaningful, useful ways, you’ll want to learn that some other way. (NB: the core principles are not taught as core principles, but they’re taught well.)
Assessments, including the exam, will ask you to use your own logic to invent the steps necessary to solve problems. Any algorithm that got the job done was accepted, so we weren’t really assessed on our finesse, just understanding of OOP, the OU terminology to describe it, and occasionally Java itself. This type of logic is introduced in the OU’s first stage modules, but if you just leave it there, these assessments could be tough in M250. But the good news is that the logic is the same for essentially all programming languages. Pick your favourite, and just challenge yourself to write small programs in it. (Even casual games in Scratch will do.)
Learning advanc– … Zzzzzz … Huh? Wha? Oh, right. Time to go.
Thanks for your kind words,
Best of luck with the remainder of your studies and I hope you achieve the degree classification you desire! I’ll look forward to reading more updates you post on here as to your experience of studying with the OU! And also good luck with the results to your M250 exam!
I am trying to learn Java by myself and was wondering if you have any study materials from your Java courses that you’re willing to share. M250 seems like it will help me a lot but before paying for the module I have to know if it’s something I’ll be able to comprehend and complete.
While I can’t share the M250 content, I can direct you to Helsinki University’s excellent Object-Oriented Programming with Java course(s). These go further than M250 goes on the programming side of things, but M250 goes deeper into understanding OOP concepts. It’s freely distributable under Creative Commons. The first course should work as a decent taster to see if it’s something you’re into.
Thanks Mark, appreciate this.