Principles of Computing

Looking back at my old posts, I see that I originally took Introduction to Interactive Programming in Python (IIPP) back at the end of 2012. Hard to believe it was so long ago. Principles of Computing (PoC) is the next MOOC from the same team at Rice University, with the addition of professor Luay Nakhleh. It is also part two of the three part Fundamentals of Computing specialization. I understand that now that Coursera is pushing the paid for Verified Certificates, quite a few students have signed up and paid for the specialization.

This course is best described as a pre-algorithms course, which makes it a bit too easy for me. As with IIPP, grading uses both quizzes and programming assignments which are once again mini-projects inspired by familiar games. What is different this time around is that peer assessments are gone. Instead, the instructors have implemented an automated grader that works with their existing CodeSkulptor infrastructure.

Lecture topics cover a very broad range of topics including basic functional programming stuff like recursion and higher-order functions, some math related topics like probability and combinatorics and some basic data structures such as stacks, queues and trees. In between all this are lectures on basic concepts that weren’t covered the last time around including inheritance and passing-by-reference. It’s a pretty mixed bag.

I note that a special effort is made to teach programming style and the grading of the mini-projects enforces a specific style guide. Many people have criticized IIPP because no effort was made to teach the use of docstrings and other style considerations. Students are also continuously encouraged to write their own unit tests to test the correctness of their implementations and a special testing module was added to CodeSkulptor to make this easier.

Most of these aren’t new to me so I considered them as refreshers. But I did appreciate the math stuff, especially the combinatorics and the recurrence relations. It’s pretty shameful that I couldn’t tell you the difference between an enumeration, a permutation and a combination before taking this course. The supplemental math notes here were especially valuable to me.

I had no difficulty with either the quizzes or the programming assignments for the most part, though some of the quiz questions did take me longer to do than I expected. I actually had to do some real thinking on them. Nice. A couple of the optional practice activities were however very tricky to work through and I appreciated learning about gray codes.

The final mini-project is optional and counts only for those who wish to earn a distinction. I have to admit that I did spend much more time on it than I expected, partly because I couldn’t quite believe that solving it merely entailed identifying the cases and hardcoding a solution for each case. I’d already written a 15-puzzle solver for Princeton’s Algorithms class of course but the one here is meant to find any solution, which means a far from optimal one. It runs in linear time and with no extra space. Very cool to see the 15-puzzle solved in such a manner.

Now, IIPP was a very popular course (arguably the highest rated MOOC ever) and many, many students have taken it. Predictably, many of these expected to be able to make the leap to this course and failed. The early weeks of the course saw innumerable posts on the official forums about how much more difficult this is compared to IIPP. Many students also complained that the instructions given in the quizzes and mini-projects were unclear. Judging by how forum activity dropped sharply from week to week, it’s obvious that many people dropped out of the course as time passed.

For the most part, I disagree with these complaints. It was always inevitable that many students would fail in making the transition, given how much hand-holding IIPP provided. But I do think the instructions could be clearer in some places and freer of ambiguity. There are quite a few typos scattered here and there. Hopefully this will all be cleaned up in future iterations of the course.

Anyway while I’m not quite the target audience for this course, I learned enough from it that I felt it was worth my while. It is a bit more unfocused than I would like and I think the jokey attitude the professors continue to employ here should be gradually toned down as the material becomes more challenging, but this is without doubt an excellent course that I would be happy to recommend. I look forward to Algorithmic Thinking, the third part of the specialization that I expect will be tailored just right for my needs.

Leave a Reply