Algorithmic Thinking is the final part of what Rice University now calls its Fundamentals of Computing specialization on the Coursera platform. My previous posts about this specialization are here and here. This one is taught by Luay Nakleh, who also appears to be the newest member of Rice’s online team.
Its title implies that this is the Rice version of an algorithms course, which would make it an interesting point of comparison against the versions offered by Princeton and Stanford. It’s not an exact match however as the intent in this one is to teach students to understand the process of going from an instance of real-world problem to formulating a decent algorithm to solve it efficiently. In theory, at the end of the course, students should be able to design algorithms of their own or at least be able to think of a better way of doing things than mere brute force. That’s a very ambitious objective, especially considering that the course consists of only four modules of content.
This is a pretty marked contrast with the other two aforementioned courses, which are focused on presenting a large number of the most well-known algorithms of different types so that students have some idea of what’s out there. This one teaches only a very small number of algorithms and even dispenses with the historical information behind them. Instead of explaining them in the abstract, much time is devoted to tying them closely to the real-world problems that they are meant to solve as defined in a mathematically exact way. I guess it’s worth noting that of the algorithms taught here, only the Needleman–Wunsch algorithm presented here as an example of dynamic programming was new to me.
As usual with the other courses in this specialization, homework consists of quizzes, which I am pleased to see are quite a bit more involved than I expected plus a programming project which is machine-graded. The most interesting part is that peer assessment makes a comeback and surprisingly enough it doesn’t pertain to the programming project, or at least not directly. Instead, you’re often asked to run the programs you just wrote on specific data sets and generate charts based on your data. Then you’re asked about the conclusions that can be drawn from the charts. Understandably questions of this type can’t be machine-graded and must be peer-assessed.
This was by far the hardest part of the course for me. Indeed, out of two weeks time given for each module, the instructors suggest spending one on the lectures, the quizzes and the project and the other week on this, which they call applications. Part of this is its sheer novelty of it. Many people likely haven’t drawn a chart since university. But there’s also the open-endedness of it. How do I know if the shape my chart looks right? How should I interpret these squiggly lines? The anxiety of not having clear-cut answers gnawed at me. It’s worst at the beginning but gets easier in the subsequent weeks as you gain confidence and see that the grading rubric allows for a fair bit of latitude in what is considered the right answer.
The lectures are solid but Nakleh is, I think, a weaker speaker than either Scott Rixner or Joe Warren who did the two previous courses, at least in this online format. I think he spends too much time walking students through the trivial parts of the content while reserving the truly challenging material to the pdf handouts. Looking through the online forums, it’s clear that the vast majority of the students who plowed through the first two courses have given up. I know that most of them would be out anyway due to the inherent difficulty curve, but I can’t help but think that more would have stayed if the lectures were friendlier or focused more on helping students get through the tough parts. For what it’s worth, I found this course to be markedly easier than the other two algorithms course I’d mentioned.
The homework sections are very strong and those pdf handouts are very comprehensive. The applications portion in particular give a very good taste of what doing programming for scientific applications might be like. All of the questions in the quizzes and the applications are well thought out and provide plenty of intellectual stimulation. If all that isn’t enough, there are also optional challenges that are ungraded and quite tricky. You certainly can’t accuse this course of being lacking in terms of content.
My main complaint is that it’s too short. Four modules isn’t enough to give enough examples to really train students to think algorithmically. It feels like barely skimming the surface of what’s needed. Apart from that, the lectures would go across better if Nakleh had talked about the people who first dreamed up these algorithms when introducing them and how and where and when this happened. People connect more easily with any given topic when there’s a human element present. When I wrote about the previous course, I mentioned that the jokes weren’t necessary but surely some attempt at forging a connection with the student wouldn’t go amiss.
Overall, this makes for a nice end to the specialization but students who think that going this far is enough to call themselves a decent programmer would be wrong. There is still a long way and many, many more algorithms that students ought to know about.