Contrary to the other reviewers of this subject, I found this subject unexciting and dull for the first initial weeks. I was more interested in the algorithms he had to teach, but as an introductory course it is understandable that a lower level programming language (ie. C, and specifically ANSI C) would also be taught in order to get a glimpse of the process behind computers. So if you are new to these kinds of things, then you will probably have an intriguing time.
Alistair Moffat, as you might have heard is a very enthusiastic, engaging and (tries to) humorous lecturer. If you needed an answer from him via e-mail, he would usually respond within less an hour if he wasn't busy. Sadly, I did not bother to come to his lectures after the third week because I found the introductory C content to be in some way, like teaching Python again (from COMP10001). In learning C, you learn its programming constructs, including arrays and pointers. Certain problem solving techniques (divide and conquer, generate and test) are also revised in this subject. I can't say much about workshops either since I stopped attending them from the second week, but surprisingly I found Alistair's textbook to be immensely useful. Initially I was sceptical about buying a textbook which could have been made free (if he gets so little profit from it, and if the content can be found anywhere on the internet), but the book contained almost everything that you need to know for this subject. When I mean the textbook does not cover everything, this includes pattern searching algorithms, like the Knuth-Morris-Pratt string search algorithm and the Boyer-Moore-Horspool algorithm; watch the lectures then. Otherwise, reading its pages alone allowed me to keep up with the content.
Computing algorithms--as you would expect--is the meat of this subject. After all, Alistair's motto is "Algorithms are fun!". Despite this, I found some of his explanations to be unclear (possibly because I was behind) even if I used the textbook. As a supplement I would use other websites to learn how they worked. If it helps, here are the websites that I used:
- HackerRank: A competitive programming contest website. Aside from that there were exercises about algorithms, including Quicksort, insertion sort and some other mini practice exercises, including an exercise about the running time of an algorithm.
- Some other PDF lecture slides on the KMP algorithm: The Comic Sans font makes it seem silly, right? That is why it was useful in understanding the KMP algorithm. Some nice pictures help too
- The KMP algorithm in my own words: This was also useful in observing the process of the KMP algorithm.
- Plain English explanation of Big O: Thought it was a good basic explanation behind the Big-O notation. Although I thought Alistair explained it in a clear way.
- Boyer Moore Algorithm Understanding and Example?: Thought the second answer to this Stackoverflow question provided a clear explanation about how the Boyer-Moore algorithm worked (not the BMH algorithm! The BMH algorithm is actually a simplified version of the Boyer-Moore algorithm so be aware of that). Alistair's lectures slides about the BMH algorithm, combined with this webpage also served useful in understanding it.
- I also used "online judges" (Google it) for mergesort and KMP problems as further practice.
- If you want more practice websites, I found this top Quora answer to be helpful.
With this clarification, I found to appreciate algorithms and what Alistair really meant (although he should change his motto, how long has he held that for?). It gave computing more than just mere "instruction-telling" to a computer expressed as a programming language.
Mid-semester test:As the name says, it isn't worth much (10%) but you should do well if you've have studied up to this point. For us, I believed we had ours in week 5 or 6. Topics covered included using basic programming constructs of C (iteration statements, pointers, arrays, control statements etc.) as well as the Big-O notation. I didn't particularly do well in this but it wasn't hard either.
Assignments and exam:The assignments were fairly interesting (not as fun as COMP10001 was imo). The first assignment involved finding the relevance of a text file based on a query, like a Google search for instance. Simple use of algorithms were encouraged, and so was more of a C programming exercise than anything else. The second was creating a program which could hold a binary search tree, and I found this to be more slightly "algorithmic". These assignments I believe will help you practise on your C language, although I wished the assignments involved the use of more complex algorithmic approaches to solve a problem. Moreover, I found these assignments to be a bit straightforward and thus lacking in creativity. When I say this, I compare them to the COMP10001's Daifugo assignment for example.
Now, the exams. Although there was only a sample exam, doing exercises in the textbook or gaining programming proficiency in some other ways sufficed to prepare you for most of it. As Alistair had mentioned, there would be a few last questions which very few could answer, so this shouldn't surprise you too much when you go to your actual exam. Otherwise, the rest seemed fair and reasonable.
Note that I have rated this subject 3/5, and could have rated it lower. The main reason for this being the appreciation of algorithms that I found through the semester. I wished the subject had provided a greater density towards teaching algorithms, but as I have mentioned teaching a language like C would help those pursuing computing majors into learning C++, as well as getting a closer grip behind computers etc. Regardless, I had some initial familiarity with C# and a tiny bit of C before the start of this subject.
Fun.stuff.goes.here():Thought bubble-sort was bad? Then you might not have heard of
Bozo sort...
Lecturer(s)
Alistair Moffat.
Past Exams Available
No past exams, just a sample exam.
Textbook Recommendation
Moffat, A. (2012). Programming, Problem Solving, and Abstraction with C, Revised Edition. You can buy either the hardcopy or e-book version of it (e-book is somewhat cheaper).
Workload
3 x 1-hour lectures and 1 x 2-hour workshop per week.
Year & Semester Of Completion
Semster 2, 2014