Course Title: Software Construction: Data Abstraction
Provider: University of British Colombia via edX
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.