This is going up at least a month later than I wanted it to. But I’m just having difficulty figuring out what to say about TT284. That’s because there’s precious little to review.

I just didn’t feel like there was enough in this module to be considered a Stage 2 module. I don’t know if it’s because I already know and use a lot of the technologies the module references. Maybe it’s because I have my own practices for the planning and specification phases. Or it could be that it’s just light on content.

The module materials encourage students to interact by visiting the forums and writing about specified topics. This doesn’t actually garner any (well … much) diaglogue. It’s mostly just a graveyard for scraps of students’ notes. The best way I found to use this was to look for alternate viewpoints to my own, but spending my precious study time combing through poorly formed and poorly informed thoughts had a low return on investment.

What really did work for me was the assessment for the module. Assessments were split down the middle with practical activities and academic (or, rather, academic-dressed-up-as-vocational) reports. I really felt like it did a good job of allowing students show that they could both perform and understand the details from the module’s learning objectives. The feedback from my particular tutor was insightful and constructive.

The module doesn’t teach much, though. It exposes. It gives a whirlwind tour of web-building technologies, and approaches to designing web applications. There’s a whole lot of copy-and-pasting intended. You’d come out of this module knowing what you don’t know, which is a good starting point, but that feels more like a first stage module to me. In fact, that sort of seems like the intention of the web design portions of Harvard’s CS50, but you definitely learn more on that module. And that’s just a very small section of a free-to-all introductory course.

Of course, CS50 only teaches the practical, technical side of web design, and none of the design, specification, or non-technical details. It doesn’t cover wire frames, specification gathering, accessibility considerations. It only briefly considers architectures. But it’s also only a few weeks long.

I guess my bottom line for TT284 is that it’s just not advanced enough for Stage 2. It would be an ideal module in place of TM129 … Or maybe even just one of its three blocks.

Since TM257 is kind of a non-module, a non-review seems appropriate. And the great thing for me is that a non-review seems like it should be rather quick to not write.

As stated many places, the content for TM257 comes from Cisco’s NetAcad course environment. It comprises NetAcad courses for CCNA R&S: Introduction to Networks and CCNA R&S: Routing and Switching Essentials. You read very, very dry web pages that are like a Flash website-book, check understanding through a variety of drag-and-drop exercises, a very poor syntax checker, and a very awesome virtual network lab called Packet Tracer. (Okay, so the UI for Packet Tracer needs some remedial attention, but its functionality is excellent.) There are glossary flash cards, quizzes, and chapter exams after each portion, and a “final” exam for each of the two constituent courses; one is taken at home, and one is taken at the day school when there isn’t a global pandemic.

NetAcad has all this as a lovely pre-packaged unit, and though dry, it’s very good. The pacing, the knowledge, the checking, the repeating, the practising … It’s a great package. But for it to be an Open University module, it needs more.

It needs learning outcomes. It needs summative assessment. It needs TMAs. And frankly, I’m not very keen on TM257 in this department. The learning outcomes aren’t what NetAcad designed their module to provide, but rather a combination of what it’s observed to provide, and to a degree what it’s hoped to provide. The module team has made it very difficult to compare notes, but it seems that the evaluation fit so poorly this year that possibly nobody scored a distinction-level percentage on one of the EMA questions, and possibly only a couple of people even scored above 70% on it. Which is more or less fine, but it’s less fine when the items being evaluated must have been informed by what was taught by someone else. Either the learning outcome doesn’t match the materials, or the evaluation doesn’t match the learning outcomes. Because it seems a fair stretch to think that the materials did teach what was in the learning outcomes, the learning outcomes were appropriately evaluated, and nobody lucked into a distinction-level answer. Especially when you consider how many certified industry practitioners were on the module.

I mean, I’m not a conspiracy theorist, but I’m beginning to guess why it might be that we can’t get straight answers about how people did on that question.

Anyway, that aside, I suspect we’ll see similar numbers of people with distinctions this year as we did last year, and that seems to fit more or less with other Stage 2 modules. So, over all, in the broad view, it feels like the evaluation is in the right ball park.

So that’s kind of my evaluation of the module, too. It’s got dry materials, great information, and evaluation that’s more or less fine.

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.

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.

These last two Stage 1 modules couldn’t be more different.  TM129 was far too easy for 30 credits, was a waste of both time and money, and makes the OU look a bit like a fake university for even offering it.  The tutor support on the module was amazing.  MST124, on the other hand, while being far too time-consuming for a 30 credit module, was a wealth of information, well structured learning, and left me with the single largest academic confidence boost I could imagine.  The word to paint my tutor in the best possible light would be “terrible”, though.

TM129 was born as three separate 10-unit modules.  My guess was that, much like now, students were forced to take all three modules, with no alternatives, so eventually bundled them up and called them a single module.  There’s not much to really tie them together, however.  The first block in the module, Robotics, doesn’t see students building a robot.  Or designing one.  Or touching one.  Or controlling one.  Or learning how to build or design one.  Students do learn how to control one, by using a (barely) modified programming environment for controlling Lego robots.  The amount of programming done is significantly less than in TU100, and probably less than in TM111 and/or TM112, making that bit of the module superfluous.  Understanding actuators, sensors, different high-level models for robot behaviour, and what can only be described as robotic ethics and sociology round out the block.

I’ll be honest, I enjoyed the robotics block.  Most students I spoke to did not.  I was interested enough in the topics covered to start playing around with Arduino processors, and have made some pretty fun little projects since then.

The second block is on networking.  For this, they just give students a Microsoft networking essentials book, and tell them to read most of it.  And that’s the block.  A £30 book which is pretty darned out of date.  On the one hand, it’s not useless information.  It’s a good primer for networking.  On the other hand … It’s a £30 book!

The third block is on Linux.  Several students found it difficult to complete the module because the tools referenced in the module were so far out of date.  It was very, very light on actual information, again.  I didn’t really hate it outright, because I found plenty of tips for every day Linux use.  But as a primer for somebody who doesn’t know Linux, it was insufficient.  For anybody familiar with Linux, it’s unnecessary.  So it’s a block without an audience, really.

Most horribly in relation to all three blocks, the assessments (TMAs and EMA) had essentially nothing to do with the Learning Objectives.  One task asked students to evaluate a server and client needs to recommend a Linux deployment running several different servers, how to install them, how to test them, and complete it in 400 words.  The problem with this is that only installation and testing were mentioned in the module.  Evaluating client needs and researching server software weren’t part of the learning objectives at all.  Neither were questions on Intellectual Property law, and a host of other questions in the other blocks.  It’s like the module team didn’t even read what they’d written, they just came up with some questions that sounded related to the block titles.

Though I enjoyed the blocks (and, perhaps surprisingly, I really did), I have to say that I feel objectively that the module is not fit for purpose and should be boiled in tar.

MST124, on the other hand, was nothing short of amazing.  I started preparing for MST124 literally over a year ago.  By the time October rolled around, I felt like I barely knew enough to get started.  Indeed, I was still making silly mistakes left and right when I started, because I was so far out of practice.

It was an absolute slog of a module.  It would often take me significantly more than 20 hours a week, when the recommendation for a 30-credit module is about 8.  Most of Unit 3 (functions) and Unit 11 (Taylor polynomials) are written very, very poorly, and I recommend anybody studying MST124 find outside reference material to help with them.  Activity 17 in unit 7 will possibly remain in my memory forever as the most horrifically impossible task, until I again sought outside help understanding it.  But other than these rough spots, it was a steady, continuous climb.

I felt like I’d learned everything well enough by the time I completed the routine unit study, but I wasn’t testing well at all.  So I really, really threw myself into revision.  I revised more every week than I’d spent studying.  It would have been six solid weeks, but I was extremely ill for the better part of one week.  (ALWAYS stay one or two weeks ahead of the module planner to cope with unexpected emergencies.)  When it all paid off in time for the exam, I felt completely unstoppable.  I’d gone from struggling with basic trigonometry and never having dealt with logarithms at all to nearly acing an exam which covered topics most people will never learn.

So if my tutor was rubbish, it’s alright.  The materials were brilliant enough without the help.  (Although it was nice to be part of the Facebook group.  Don’t know how far I would have gotten without them.)

So that’s it.  Two completely different modules.  The OU could really learn a lot by having all of the module teams take MST124 and see how amazing it can be done.

Course Title: Object Oriented Programming with Java, parts I & II
Provider: University of Helisinki
Price: Free
Level: Beginner
Effort: 2 modules, 6 weeks each (by ECTS reckoning, as many as 300 hours)
Prerequisites: None
Completion awards: Free certificates of completion for each module

About the course:
In short: highly recommended.

This is not a computer science course, but it doesn’t claim it is.  It really is two (nearly) completely different courses.  The first one is about learning Java syntax and semantics, and the second one is about object-oriented programming in general, and some intermediate Java-specific techniques, as well.

It’s also not a MOOC, making their URL ironic.  It’s online, and it’s open, and a lot of people take it, but it’s not Massive Open Online.  It is an online textbook, and a very cleverly written code testing system.  You’re on your own.  Allegedly there’s someone to answer your questions in a few hours on IRC, but IRC users won’t really need the help, and answers to emails might take a few days, but again, you’ll almost certainly be past that “week” by the time you get an answer.  There’s no online community, no forums, no helping each other.  It’s an online textbook, an IDE, and nothing else.

(As there’s no video of anybody reading the book or walking your through its examples, it strongly parallels Open University modules without the support.  If you’re looking for the perfect module to taste what online study is like, this is it.  Imagine this course, but eight months long instead of a few weeks.)

Part I is a tutorial for basic Java usage, and is brilliant.  It’s quick, it’s informative, it’s very accessible.  It took me a week in my spare time, and was blown away at how quickly I picked up the skills with how they were taught.

Part II has a massive jump in difficulty, especially the week-ending challenges, where you’re welcome to use any programming techniques you care to in order to solve the problem, so long as its behaviour is exactly correct.  It highlights what I really love about programming:  There’s only ever one right answer, but there are countless ways to get there.

Being presented by the University of Helsinki, it’s an English course, and the vast majority of the content is very well written.  There are some peculiarities of language, however.  For example, the course keeps referring to built-in classes as made-up classes, which is … pretty much the antithesis of built-in.  So there are a very few minor confusions.

The certificates you get at the end are very clear about what has been studied, and even states that had it been accompanied by the university’s overseen exams, each would be worth 5 ECTS.  For the 10 credits between them, that’s 20 OU credits, and a little less than TM111 or TM112.  I’m guessing it’s not quite that impressive, but it does highlight that it’s the exact course their students take, and it’s definitely fit for purpose.

I’d like to thank Newbie from a comments page for pointing me in the direction of these modules.  They’re everything the Microsoft course wasn’t.  It’s not perfect.  It doesn’t include recursion, doesn’t discuss why one method is preferable to another, and states that abstraction is very important, but doesn’t teach any actual techniques for it.  Still, it’s a coding course, not a computer science one.

A highlight for me was using both NetBeans and IntelliJ IDEA to write the code and interface it with their testing system.  It’s a slick system, and couldn’t really be better.  It’s by far the best automated evaluation I’ve ever seen of checking code, including the one from CS50.  (Also, I enjoy both NetBeans and IntelliJ, and their ability to both prompt and automate things, but found myself working about twice as fast in IntelliJ.  If you have a student email address, do yourself a favour and get a free license for the full version.  If you don’t, at least check ot the community version.)

Course Title: CS50 Introduction to Computer Science
Provider: Harvard via edX
Price: Free
Level: Introductory
Effort: 10 – 20 hours per problem set, 9 problem sets and a final, self-paced
Prerequisites: None
Completion awards: Verified Certificate available for USD$90

About the course:
A lot of people view this course as the gold standard in introductory computer science MOOCs.  Having been through it now, I’m afraid I have to disagree.  It is an amazing course, though, and the one best placed to get you into the middle of useful coding as quickly as possible.

The structure of the course follows what you might expect of a university course translated to an online MOOC: each week has a very, very long lecture, followed by shorter bits from teaching assistants highlighting important concepts, and then there’s a problem set which is a series of challenges which ostensibly can be solved using the techniques introduced that week.  There is an exponential increase in difficulty from week to week, because both the material covered is more difficult, and the amount of documentation relating to solving the challenges is reduced.  This is meant to foster habits of independent study to resolve such challenges in the future.

This structure is the first relative weakness of the course.  (Relative to the MIT CS introduction course using Python.)  The MIT course imagines education looking more like the web.  The Harvard course spends countless resources trying to make the web ape its own institution.

As a former trainer, the most important thing about educating people is keeping them awake and interested long enough to learn, so it’s really about entertaining.  The lecturer, Professor David Malan, is extremely entertaining on stage.  The format is fundamentally outdated, however.  There could be a hundred clips where there’s currently a 105 minute video, each collated, indexed, and cross-referenced.  A build-your-own lecture series could take the place of an impending Sander’s Hall nap.  MIT did this beautifully in their latest foray into CS as a MOOC.

The languages “taught” are fantastic.  They start by giving a few rules-of-thumb in Scratch, and pretend that they’ve therefore taught it.  They next spend several weeks on C, and this is an impressive tutorial for the language … for any language.  They then give a small grounding in Python, and then a cheat sheet for SQL, JavaScript, and maybe a few others.  Really, I think they’d do better by having a hard limit on two languages, because everything beyond Python was literally worse than having no experience at all.  Students are expected to meaningfully interact with those other languages, without sufficient preparation.  In solving PSets, students already know those topics, or they luck into trying the correct technique the first time, or they end up chasing their own tails for hours and hours before giving up and asking on a public forum for help.  I spent many hours answering questions in the CS50 subreddit to alleviate some of the pain of such students.  (An example is that they expect students to use object-oriented programming techniques, but never discuss what an object is, let alone what object-oriented programming is.)

I would disagree that it is an introductory module.  It may be introductory if you’re on campus at Harvard, and can stop in and chat to a staff member for twenty minutes, and you’re literally spreading this across a third of a year.  If you’re doing this on your own, you’re going to have to come with a pretty strong intuition of why computer programs don’t do what you expect, and how to troubleshoot to figure out where it all went a bit wrong.  (The tool created to understand this in C is fantastic.  Because of this, they don’t teach how to figure out how to do it when learning C, and therefore students have no concept of basic troubleshooting techniques once the module moves away from C and that tool is no longer available.)

If you survive through to the victory lap of the final (which is really just whatever personal project you want to make a video for), you’ll be ready to take on any formal CS education.  I doubt you’ll be prepared for properly undertaking independent study, however, because the theory behind the coding is often ignored.

The real time I put into this was between 4 and 12 hours per PSet (typically on the lower side), so maybe 60 hours, plus another two hours each “week” watching lectures.

I’d recommend people interested in CS and coding take this module … but only if they also undertake the MIT or UBC introductory modules.

Course Title: Learn to Program in Java (DEV276x)
Provider: Micosoft via edX
Price: Free
Level: Introductory
Effort: 6 — 10 hours per week, 4 weeks, allegedly self-paced
Prerequisites: None
Completion awards: Verified Certificate available for USD$99
tl;dr: Take the University of Helsinki Java courses, instead

About the course:

No.  Just no.  Don’t even think about taking this course.  Run away.  Invent your own rules for how you think Java might work, and use those instead, because they’re sure to be more useful than this course.

I apparently signed up for this module on the day it opened, but I’m not really sure how that happened.  Anyway, the discussion forums were filled with people enthusiastic about what they were there to do.

There was no syllabus stating what the structure of the course was.  There was no course news, no updates, no welcoming letter, nothing telling you what to click on first.  The first week’s instructions, however, made it clear that the IntelliJ IDEA was an absolute necessity for the course.  (It’s not.  Feel free to use whatever IDE you enjoy.  They do at one point discuss how to set up a new project in IntelliJ, but they skip most of the difficult steps, and get another step wrong.  I learned much more about Java following the IntelliJ instructions for setting up a new project than I did in the first two weeks of the Microsoft course.)

After a few days, several of the students had finished the first week, and even though the course description said it was self-paced, there was no second week.  Some people asked in the discussion forums when the content would become available.  Other students were asking for help on things.  Some for clarification.  There was no response from anybody associated with the course’s presentation.  They had hit a button to upload a third of the course, and run away.

One step up in seriousness was that response was necessary, because much of the documentation is wrong.  Some of it over-simplifies things by saying this-or-that doesn’t exist, when it does, or you can’t do this-or-that, when you can.  Other times, the script-reader’s information is just incorrect, and other times the questions they quiz with have 0 correct answers from which to choose.

Another step up in seriousness is that the course is completely uneven.  The script-reader reads a mind-numbingly patronising script which insults the students’ intelligence.  Then the documentation and quiz questions expect the students to have a much higher degree of understanding than what was just discussed.  (Some courses claim this is a feature encouraging outside study, but this is a different beast entirely.)  Many times, there’s no indication of a correct answer in the script or the documentation, and it can’t be learned practically by experimentation.

I refer to the “instructor” as a script reader, because that’s what she’s doing.  I have no doubt that she does understand the subject content, but she’s just reading a script, and not teaching.  Worse, it’s clear that she didn’t write the script, because she often stumbles when something is wrong, not being clear enough, or she’s simply struggling with it not being the right way to present something, but she just ploughs on through it regardless.  One (patronising) committee wrote the script, a different person read it, a different team wrote the documentation, and someone else wrote the questions, and clearly none of these people ever met each other.

There were at least two questions which showed that the person who wrote the questions had no idea how iterative loops worked.  One had a question with zero right answers, and another with two right answers.  And, of course, there’s no way to get them fixed, because nobody from the presentation is there.

Anyway, when the second week was finally released, randomly nine or ten days after the course opened, and there was still nobody to answer questions, and the documentation was worse than ever, I finally just bailed.

To sum up: No.

Course Title: 6.00.1x Introduction to Computer Science and Programming Using Python
Provider: MIT via edX
Price: Free
Level: Introductory
Effort: 15 hours per week, 9 weeks (really 8 weeks and 1 day) — about 120 hours
Prerequisites: Basic algebra, aptitude for mathematics, prior coding experience helpful
Completion awards: Verified Certificate ($49) with at least 55% course marks, and 3 credits “Academic credit” through Charter Oak State College (65% course marks and $100 in addition to the verified certificate)

About the course:
This course is heavy on the “Introduction” and “programming using Python” portions of its title, and somewhat lighter on the “computer science” section, but it does a credible job of each.

It dovetails beautifully with the Systematic Program Design series I reviewed a few months back.  On one hand, this course gives object-oriented context to the basic principles in the SPD course, and provides a great roadmap of what’s next.  On the other, the SPD course fills in a lot of the data structure and raw theory gaps in the MITx intro course, as well as showing recursive design in a much more powerful light.  Taken together, they really feel like solid first steps into really understanding what’s going on under the hood, and how to direct the processes.

This edX course is an updated and platform-specific version of the MIT Open Courseware teachings on the same topic.  I flipped back and forth between the 2011 version and this one for at least half of the course, so some of the specifics I remember may actually be from the OCW course.  It’s difficult to choose a favourite lecturer between Profs. Grimson and Guttag; they both present the lectures with humour and clarity that’s easy to follow.  The bite-sized pieces of the edX course are generally better, but the poor “finger exercise” knowledge checks count against it.

To help students gauge their comprehension of the material, these finger exercises are interspersed between lecture segments.  Often, though, it seems like they’re just there to make busy work, as they’re not checking knowledge that’s useful, they’re just exercises that test nothing so much as your patience.  The worst of these are when they test concepts not in the lectures, which is defended by the TAs as inspiring independent study.  This excuse is somewhat undercut by the text on some finger exercises which states not to get too frustrated with a concept, as it’s explained in a later lecture.  If it’s explained later, then clearly that’s where we’re supposed to learn it, not through independent study, or they wouldn’t ever explain it.

There are so many concepts taught (well) through this course, I really can’t pull out a list.  In general, there’s a lot of coding principles, such as operators and operands, expressions, variables, calls, specific data structures, loops, recursion, conditionals, etc.  Discussion of address pointing supports lessons on mutability and cloning. Functions and objects, heirarchies.  There’s a fair bit to do with abstraction, though I feel this is handled better in SPD.  On the other hand, this course did a much better job of exploring algorithm complexity and costs.

Among the most useful (to me) portions of the course were the problem sets.  These were typically program problems you were let loose on to solve however you wish. Well, that’s how it was on the OCW version of the course.  In the edX version, which grades your programs and therefore has a very narrow interpretation of success, you mostly had to solve the problems how they wished.  It was really frustrating after the freedom of the OCW problem sets, especially when the same problem sets from one couldn’t be used on the other, and one case where the accepted solution technically required a different answer than what the problem description requested.

The required time for this course is way off.  First of all, this is not a self-paced course, and each “week” is released serially.  However, though it takes eight weeks before the content is all dished out, there’s really only six and a half weeks of content.  There’s a two week break between the third and fourth week releases, and the midterm exam is then inserted AFTER the fourth week begins, so it’s not to allow time for that.  Then the last week and a half are likewise empty of content, aside from the final exam.  (The final half week isn’t really useful, feels tacked on to advertise the next course, and falls well short of the OpenLearn data science introductions.)

The time you spend is then split three ways: Time watching the lectures and doing the exercises, time doing the problem sets, and time researching and revising.  If all the problem sets were written lucidly, I’d estimate about 10 hours per week, or about 65 hours.  Poor writing on the problem sets (similar to the above issues with poorly written finger exercises, but with an emphasis on the required solution differing from the requested solution) probably expand it to roughly 12 hours per week, or around 80 hours.  This is very close to the 50 to 80 hours of the SPD course, but I feel the SPD course is more informative of computer science, and less frustrating.

I think if I had it to do over, I’d do the OCW version instead of the edX version, just because it’s easier to evaluate my progress on my own than to have a computer do it.  Oh, the irony.

Course Title: CS002x Programming in Scratch
Provider: Harvey Mudd College via edX
Price: Free
Level: Introductory (suited to children)
Effort: 6 hours per week for 6 weeks, commencing on a set date
Prerequisites: None
Completion awards: Verified Certificate for USD$49

About the course:
This is not at all a bad course.  It’s well-suited to children, or really just about any ability level.  The children do need to be able to understand a fair amount of logic.  It’s a bit much for my 6-year-old son, even though he enjoys using Scratch.  (His ability level is simply knowing that command blocks are instructions for sprites, and lists of command blocks can be strung together.)

The course is described as a computer science course, but I really can’t feel like that’s justified. It’s a tour of Scratch’s capabilities, but doesn’t often describe theory or reasons for much.  There is an excellent amount of work with iteration, however.  One brief section also compares Scratch to industry standard programming languages, to show how the learning can be applied outside the Scratch environment.

Aside from it using Scratch, there was no prior indication that it was aimed at children, which it really is.  As Open University’s TU100 uses Sense, an off-shoot of pre-1.4 Scratch, there’s no reason to believe that a computer science course which uses Scratch must be a de facto children’s course.  There were plenty of students across many abilities and ages, so the discussion forums were a bit uneven at best.

The tour of Scratch begins with Scratch as the idealogical descendant of Logo incorporating a turtle graphics system.  This was bizarrely effective, because I was able to recall line-for-line programmes I wrote in Logo back in 1986 or ’87 after two weeks of lessons during elementary maths.  I reproduced it with just the addition of colour.

It winds past variables, iteration (as mentioned above), input, sprite-interaction, if-then-else logic, more iteration, functions, external calls, and even implies recursion with sprite clones.  Okay, for me, it took about 10 or 11 hours to get through everything but the final project, but that’s quite a list, and I can easily see it taking a young student a few weeks to get through that all.  But they will get through it all.  It’s all very logically laid out, it’s interesting, fun, and cool to keep them engaged, there are always lots of examples, and the progress made is a great confidence builder.

One confusing aspect is that the course has been adapted from some other curriculum, so it occasionally refers to weeks or other structures not present in the online, self-paced course.  It’s easy enough to ignore, but raises questions of how thoroughly prepared it is.

Two questions you might have for me are why did I take it, and what did I learn.

As stated, TU100 at the Open University, my first degree course module, uses Sense, which is based on Scratch.  Though I’ve played with Scratch before, and been impressed by it, I haven’t done anything in depth with it.  I was unaware of its true capabilities.  In a way, it’s a bit of a tragedy that I did that.

Scratch 1.6 is amazing.  It has functions, clones, lists, recursion … It’s great.  Sense, based on 1.4 or before, does not have clones, has no in-built stack for handling recursion data, and has to use calls for functions.  It appears as though it does have lists, in a custom solution.  I haven’t used it yet, so I’m still not sure.  I’m just lamenting that if I want to do recursion, I’ll have to use those lists to build my own stack.  Every. Single. Time.

And what did I learn?  Plenty!  One of my favourite moments was when I was polishing up my final project, and I wanted a custom score counter.  I searched the Internet for a Scratch solution, but couldn’t find anything that worked the way I wanted.  The closest I found was one which had a pre-set number of digits, with a separate sprite for each digit.  I realised that I could use recursion to call new clones of a single sprite to dynamically create as many digits as I wanted.

Another great moment is when I wanted to re-write a Rock-Paper-Scissors demo to include Rock-Paper-Scissors-Lizard-Spock.  The course wanted an If statement for each of the possible outcomes.  With Rock-Paper-Scissors, that’s just 6 possibilities.  With Spock and Lizard in the mix, it goes up to 15, and that’s already annoying.  So I diagrammed out the possibilities, saw a pattern, applied some modal maths, and realised there were really only three possible outcomes after said application.

So here are a couple of the things I created.  You can look inside any of the programmes to see how I did them, keeping in mind that I was learning as I went, so it’s not always the most logical way in the simpler programmes.

Jet Bike Steve: You Win Some, You Jetsam (Final project) WASD or arrow keys, up, W, or space to fire. 10 points per second survived, 10 points per star shot or collected, 25 points per bomb shot, and 50 points per guided-missile shot.

Derpa Deadfish (a game for my oldest boy)  You can go down, right, or left, but can only float up. Collect worms, avoid sharks (or turn them off), and use the safe-zone pad at the bottom.