Course Title: Software Construction: Data Abstraction
Provider: University of British Colombia via edX
Price: Free
Level: Introductory
Effort: 8-10 hours per week, 6 weeks
Prerequisites: How to Code series or Systematic Program Design series (same tuition)
Completion awards: Verified Certificate for $125 as part of their Software Development MicroMasters course of 6 similarly price modules

About the course:
I had amazingly high hopes for this course.  In fact, it’s difficult to judge it fairly because of how high my expectations were, which caused the very wide gulf to reality.  I’ll do my best to judge it on its own merits, but can’t help comparing it against UBCx’s stellar How To Code / Systematic Program Design course linked above.

As I started taking the course, I became ever more sceptical (skeptical for the yanks) of the the entire philosophy of the course.  It doesn’t start with theory, and it doesn’t start with academic information.  It starts with what is claimed to be a practical approach, much like learning a spoken language through immersion.  Except that while immersion is necessary for actual fluency, the best foundations of learning that language generally comes first from an academic study of it before the practical use of it.  Had I not just barely completed the mooc.fi Object Oriented programming with Java course, I would have felt frustration beyond measure.  They never teach enough to do useful things, and often only teach the bare minimum to answer a question after they’ve marked a quiz about it.

Beyond the approach, the technique they teach is … Well, it works.  It’s fair.  But students are expected to accept it as a religion, rather than as an education.  Edicts are handed down from on high, and we’re meant to accept them as though a flaming shrub had demanded them.  We’re not walked through the process of why.  We’re not lead to creating these tools in a meaningful way that they can be internalised and remembered, truly becoming a useful addition to our bag of tricks.  We’re just generally warned, “You must use these techniques … Or else!”  I lost count of how many times I quoted Sir Didymous saying, “Well, if that is how it is done …”

The point of this course is a tests-first abstract design of programs.  Define your program as a series of responsibilities, and devise tests for them, then code to your tests.  In my doubt, I had thought that it didn’t really unleash the power of object oriented programming.  And I was right, it didn’t.  But what it did was even more powerful: It allowed you to bring any tools you wanted to the party to get the job done.

Near the end of the course, I doubled back to an earlier project.  I had used the recommended methods to solve a problem, and they were ridiculous methods that utterly discounted both Java’s power in specific and object oriented programming in general.  I wanted to fix that, and re-wrote nearly all the methods.  But I stayed true to the precepts of the course as I did it.  And what I found was amazing.  I’d already done all the hard work.  I changed nearly EVERY LINE of actual implementation, but nothing more.  I didn’t even have to change the tests!  It took twenty minutes to rewrite eight classes, and then not only was it done, but it was tested, and I was completely confident in it.

So the course teaches good things.  It teaches powerful things.  The lecturer is easy to understand and isn’t boring.  But the things it teaches aren’t very complex, and could be boiled down to a thirty minute lecture, and that lecture would still involve the students more in understanding the reasons and therefore making it more absorbable and useful.

If you’ve got 30 to 50 hours to kill, give it a look.  But don’t reschedule anything, it’s just not that vital.  And definitely learn Java first.

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: 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.

When the University of British Columbia‘s edX group put up information about a new MicroMasters program for Software Development, I was excited.  (I get excited by not having to pick my son up from karate, or finding paninis in the canteen.  So keep in mind I have a low threshold for that word.)  Not because of the silly certification it could bestow for US$832.50 (currently about £650), but because I loved their Systematic Programming Design series I took last year, and was looking forward to new content.  The first course in the MicroMasters series is How to Code: Simple Data, and it started in April.  I wanted to finish up this year’s university stuff before tackling it, so I jumped over there sometime last week.

For good or ill, the first two courses in the MicroMasters program are just the original three courses in the SPD series.  In the SPD series, they broke the 11 weeks up over three courses, and now they’re breaking them up over 2.  There appears to be a benefit if you do pay the optional amount for the certificates, in that you get contact time in the form of Q&A sessions with the staff, so you can ask for assistance understanding whatever is personally confounding you, and you get your final project marked by staff, too, so you’re not just going off of your own potentially flawed understanding of the material when grading your own work.  (“Mark yourself out of 10.”  “A million thousand bazillion.”  “Fair enough.”)  I don’t know that it’s worth $125, but it’s not worth nothing.  (You could buy more than 100 tacos for that.  Now tell me it’s worth it.)

Anyway, they won’t move onto the new material until August, when they apply Data Abstraction to Java.  This is good not because I care one way or the other about Java (I get as uptight about people debating programming languages used in computer science as the people who are doing the debating), but because I can see how to apply their techniques to Object Oriented Programming … Though, to be honest, it’s much easier to see after studying what I have over the last year.  Systematic Program Design isn’t OOP specific, but it is beautifully closely related.

At the last tutorial I went to, we received an update on the Stage 2 modules for Q62 (and Q67) which are being retired within the next few years.  Some changes are excitingly small, and others are large enough to make me change my plans.

Probably the biggest news is what isn’t changing.  M250 – Object Oriented Java Programming is almost certainly being replaced with another Java module, and might even still be called M250.  This is good news for me, because I was worried after taking the Learn to Code for Data Analysis MOOC on OpenLearn and the news that TM112 included Python that a new Python module would be replacing M250.  I don’t care one way or the other if they teach using Python or Java, object-oriented is object-oriented to me at this point, and the skills seem fairly transferable.  But I’d prefer to have a more mature module than a complete tear-down which would be required by switching to Python.  Hopefully they’ll be able to preserve quite a bit of the existing material and give it a good update in the process.

The largest change is probably happening to the Networking path for Q62.  T216 currently takes 50% of the Stage 2 modules, and is reportedly very difficult.  There are so many great things to study at Stage 2 that I had recently made the decision that I just couldn’t justify the full 60 credits required for it, and so was going to take four programming and developer based modules, instead, and just certify in networking on my own time.

That’s no longer necessary.  T216 is being split into two 30 credit modules, with the first half being taught in Stage 2, and the second half in Stage 3.  Given the effort level reportedly required, this seems like a good idea.  Most importantly, it makes the networking path much more flexible.

It’s not the only module being shrunk, though.  T215, which was the only other 60 credit module in Stage 2, is also becoming a 30 credit module.  The other 30 credits aren’t be replaced, however, as there was apparently a lot of redundancy already with an existing Stage 3 module.  This updates the module and removes the redundancy.

Another largish change is that a new TM254 – Software Engineering module is being introduced.  (Final module code is pending … And everything else, really.)  This includes parts of both M256 and M258, and I imagine replaces both of them … But I’m not entirely clear on this last part.

So here’s the summary of changes:

Stage 1:

TU100 My digital life – Final presentation being taught now, being replaced by TM111 Introduction to computing and information technology 1 (30 credits) and TM112 Introduction to computing and information technology 2 (30 credits)

Stage 2:

M250 Object-oriented Java programming – Final presentation October 2017, replacement also probably M250, or another Java module

T215 Communication and information technologies – Final presentation October 2017, replacement an unnamed 30 credit module

T216 Cisco networking (CCNA) – Final presentation October 2017, replacement TM257 at Stage 2, and TM357 at Stage 3

M256 Software development with Java – Final presentation February 2018, full or partial replacement by TM254 Software engineering

M258 IT project and service management – Final presentation October 2018, full or partial replacement by TM254 Software engineering

Stage 3:

Currently unknown, aside from the addition of TM357 as the second half of the Cisco networking module.

As I’ve said, all this will change my plans.  I had been expecting to take M250, M269, M256 and TT284 (Web technologies, which I think is also just going to be refreshed similar to M250) at Stage 2, and self studying the CCNA.  Now I think I’d like to take M250, M269, TM254 and TM257.  Stage 3 is nearly half a decade away at this point, so I’m not going to worry about it just now.


Completely unrelated, I’ve got my TMA04 submitted.  The topics covered are statistical analysis, creating graphs, determining averages, personal/professional development planning, loops and lists in Sense, and report research & writing.  And probably also referencing.

In US terms, I’d give my report all of a solid C-, but that’s difficult to translate into the OU model.  I also intentionally broke the rules for the PDP section, as I’m not going to lie and pretend the ticky-box method of self reflection is useful for me, so I expect to lose a huge chunk of points for that, but it’s only worth 10 marks anyway.

If it were me grading, I’d take 10 marks off my report, 5 marks off my PDP, none off the Sense stuff, and I’ve probably forgotten 2 marks worth of stuff on the statistical analysis.  Additionally, my tutor seems to take points off the 20 skills marks in direct proportion to marks taken off the rest of the assessment, so that’s another 2 marks off.  All together, I’d score me an 81 on this one.  It makes me wonder how badly I’d have to do in order to fail an assessment.


Edit 2017/2/24: TMA04 results came back last week.  Somehow I scored another 100%.  I can’t really say that this is good news, though, because it highlights how vastly different my expectations are from my tutor’s expectations.  I can’t truly calibrate my expectations with the OU’s until the EMA comes back, but it seems as though there needs to be a large shift.

Edit 2017/4/3: T216 module descriptions now indicate that T216 is being split into TM257 and TM258, both at Stage 2.  As networking once again requires half of the Stage 2 modules, there’s no flexibility to it, and frankly no point to me taking it.  Books off eBay it is!

Edit 2017/8/29: T216’s replacement is now showing as Stage2/Stage3 again.  TM257 and TM357.  Boy do they like change!

As some have said in my TU100 forums, it’s my last week of freedom!  After this, it’s all deadlines and regret.  (Which isn’t a huge lateral step, as it would have been mostly regret if I hadn’t started the degree.)

Before the big start, let’s take stock: Where am I?  Well, mostly I’m done.  Okay, not with the whole module, but I’m on track to being finished with the first block (of six) before the first day of the module.  In a word, that’s terrible!  For oh so many reasons:

  • I honestly didn’t want to get very far ahead.  I was thinking that being about a week ahead would help me smooth out any emergencies that came up.  (I’ve got a wife with a medical condition that sees me in A&E for about twenty hours a year, typically on a Friday night, doing my best to worry more about her being doubled over in pain than laughing at the drunks who can’t keep from sliding out of their chairs, I’ve got a baby who wants to practice parkour before he can walk, and a six-year-old who very commonly needs emergency snuggles.  Unavoidables happen.)
  • I’m kind of running out of things to study.  Problems worth having, right?  But my study habits have proven effective, so the last thing I wanted to do was to destroy them by letting up.  I might not be able to find this steam again for this module if I take my foot off the … Petrol?  Do you guys even have that saying over here?  I’ll settle with accelerator.  I didn’t want to take my foot off the accelerator.  I don’t know how that makes it steam, but that’s what I don’t want to run out of, so acceleratoring it is.
  • What happens if I actually do run out of things?  If I’m “done” by, say, February, but there are little bits and pieces that aren’t available until May, how will I find the motivation to go back and do them?  For example, TMA02 requires you to use TMA01’s tutor feedback.  So before I can put TMA02’s first draft down, I have to have submitted TMA01, waited for its deadline to pass, wait for it to be assessed and marked, and then I can start it.  And then draft, draft again, and then maybe a draft or two.  And then draft.  And finally submit TMA02.  And then wish I’d given it a few more drafts.  But all the material for it will be ages out of mind again.

And keep in mind, all of this is while doing other computer science MOOCs on the side.  Those ones, in fairness, I’m not really giving my full attention.  I’m watching the lectures, I’m doing the activities and exercises, I’m handing in the assessments, but I’m not taking notes, doing extra reading, researching questions I have, or studying them, I’m just doing them.  Like high school.  Just showing up and doing what I’m told.  (I have a nagging feeling that didn’t turn out so well …)

So one solution I’m thinking of is increasing my study intensity.  Which one do I worry about more?  Burning out by taking on too much, or losing interest by getting bored with insufficient materials?

I have a feeling in a few years I’m going to think back on this decision quite wistfully, that my biggest study problem was not having enough to study.

Okay, then, what have I done?

Block one is allegedly about “Myself” in relation to a digital world.  I don’t recall reading anything about me, really.  I may have missed it.  I haven’t been asked my opinion on much, either, except how much more awesome the writing skills of teenagers have become due to digital technologies.  (Err …)

The first part is allegedly about making students aware of the digital nature of our world around them, but is really about making sure we can simultaneously read and think.  Go me!

The second part is allegedly about the history of computers from a curiously narrow context: The four generations of computer hardware, spanning their entire history … From the mid 1940’s to the late 1970’s.  (Also some maths about exponential growth and binary counting.) Really the second part is about taking notes.  (Mental note: NEVER AGAIN WITH THE SPRAY DIAGRAM! IT IS THE DEVIL!) (Mental notes are not covered in this part.)

The third part is allegedly about HTML and markup, but is actually about … Well, no.  It’s actually about HTML and markup.  Well done, guys.  (It also has a critical process for evaluating sources.)

The fourth part is allegedly about how digital communications technologies make the world smaller, but is really about forcing you to play with a terribly dated Java applet that someone is waaaaaay too proud of, that basically amounts to a graphical TraceRT and a minor security violation all in one!  Yay!  (There are other and better tools.  Good luck to all the tutors who have to fight with students to disable their Java security settings!)  There’s a very (very) bad primer on TCP/IP, as well.

The fifth part is part of the programming guide.  The less said about this here, the better.  I’m not a fan.

And the sixth part is … Well, I’m supposed to find out tonight.  It’s allegedly about wireless and mobile networking, but is probably really about … Iunno, maybe someone’s recipe for guacamole.  It’s hard to keep track.

I’ll have to write more about the programming guide tomorrow.  As this is the second-to-last presentation of this module, it won’t really benefit anybody, but my recommendation is to skip it and study a children’s Scratch MOOC, instead.  (See previous blog entries.)

Course Title: How to Code – Systematic Program Design
Provider: University of British Colombia via edX
Price: Free
Level: Introductory
Effort: 5 hours per week, 5 weeks per course, 3 courses – about 75 hours
Prerequisites: None
Completion awards: Verified Certificate for each of the three courses (USD$49 or $50, depending on which link you click on), automatically awarded XSeries Certificate if all three Verified Certificates are awarded

About the course:
Go.  Sign up now.  I don’t care if you hate computers or have been programming professionally for years.  This is an amazing series and getting through the course is highly rewarding.

There’s a lot to say about this series.  For one thing, the level of effort required is very real.  It took me three or four weeks to get through all three courses, and I was staying up late for hours on end.  And I’m considering working through it all again so that I retain it longer.

Beyond that, let’s start with the concept.  The SPD course introduces the idea of designing a computer programme as an abstraction layer between the solution and the coding.  It’s a tool for producing a template for a solution which is orthogonal to the language being used.  And it’s genius.

SPD takes this method from the How To Design Programs book, by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi.  It focuses on data-driven programme design, which was a new concept for me.  You define data, which informs what can be done with it, which influences function design, and so on.  By the end of the course, there were still experienced code-jockeys decrying the lack of well-named variables, without realising that when you’ve clearly defined your data and what it can and can not represent, it’s irrelevant. You can’t possibly be confused what “variable c” means when you’ve stated that the only valid data type for variable c is degrees Celsius.  If you’re an old hand at programming and haven’t used data-driven programme design before, it’s worth a look to evaluate why you do things the way you do them.

It uses its own beginner language that isn’t outrageously useful outside educational context.  It is Turing complete, but it’s a bit of a pain to use in real situations.  Its environment is also quite slow.  The reasons for not using a commercially viable language are discussed early on, and I wholeheartedly embrace those reasons.

By the end of the first course, you’re already designing your own programmes using the data-driven model. It was around this point that I realised the beauty of defining the data and describing functions based on it.  If data X has properties Y and Z, then I can write functions for X that read and/or modify Y and Z, either by itself, or in relation to other data.  It dove-tails beautifully with object-oriented programming, but the course doesn’t cover application of its high-level theories to low-level techniques with other languages.  (However, the ProgramByDesign project is also working on How to Design Classes which features at least a subset of Java.)

Professor Gregor Kiczales is one of the best technical instructors I’ve ever seen, and I used to do that professionally.  His focus is on getting the programme design right, so that the code can flow naturally from that design.

It is an amazing foundation for how to approach programming design.  Playing with Scratch, I didn’t imagine I could possibly apply the HtDP principles to such a strange and specific programming environment.  However, I ran into a few bumps so I broke out data definitions and templating, and solved the problems in minutes. (Note: Never underestimate the power of testing well-chosen and well-defined examples.)

Anyway.  Just sign up.  Sure, it’s 50 to 80 hours out of your life, but it re-introduces you to the digital world in a way which will undoubtedly increase your comfort with it.