Subject Code/Name: COMP3161 - Concepts of Programming LanguagesContact Hours: 2x 2 hour lectures, 1x 1 hour tutorial
Assumed Knowledge: Formally, either COMP2521 or COMP1927.
In addition to this, I would recommend that you have a good relationship with discrete maths, particularly proofs and logic as you’ll be doing a fair bit of that in this course. You should ideally also have Haskell/functional programming experience from self-study or a course that covers Haskell (e.g.
COMP3141), or be ready to learn on your own during the course. I didn’t have Haskell experience and managed to do well in spite of that so it’s possible, just harder.
Assessment: Due to COVID, we had a (harder) assignment instead of a midterm, and obviously the exam was online, but the rest of the assessment was normal. Nevertheless, the breakdown is
- 1x written assignment on proofs, worth 15% of your course mark
- 2x programming assignments, worth 17.5% of your course mark each for a total of 35%; bonus marks towards your final course mark on offer for completing extension tasks
- 1x final exam, worth 50% of your course mark
While we’re on the topic of bonus marks, 1 bonus mark was given to
everyone in the course if the MyExperience feedback response rate was over 50%. This isn't the first time such an incentive has been given by the lecturer, so it might happen for future offerings too.
Lecture Recordings? Yes, lectures were recorded.
Notes/Materials Available: For some of the major topics, a set of (non-compulsory, but good practice) exercises with solutions are given. Notes written by a previous lecturer for the course are also available for most topics as a supplement to the lecture material (but mostly just a rehash of that lecture material). Sample exams and midterms are available if you look around the course pages from previous offerings.
Textbook: N/A, though Liam posted an extensive list of resources which you could look into that relate to the larger subject matter if you’re interested.
Lecturer(s): Dr. Liam O’Connor (RIP) and Dr. Christine Rizkallah
Year & Trimester of completion: 20T3
Difficulty: 4/5 without Haskell or functional programming experience, maybe 3/5 without
Overall Rating: 5/5
Your Mark/Grade: 94 HD
Comments:This course is great, and probably my favourite that I’ve done so far. It positions itself as a “programming language appreciation course”, and you spend a lot of time modelling the semantics of programming languages and learning what some common programming buzzwords (polymorphism, type safety, etc.) actually mean in a formal manner. It is initially quite mathematical as the preliminary tools for doing the aforementioned have to be introduced, but if you can make it through that then the reward is well worth it. The overarching theme of the course is definitely on the functional side, however given that the paradigm has been responsible for so many features enjoyed by mainstream languages, it’s an understandable bias. That being said it’s not all functional - you of course look at some imperative programming, crack plenty of jokes at OOP/Java’s expense, and at the very end even do a bit of concurrency appreciation (which gives you a bit of a taste of
COMP3151).
The programming assignments provide you the opportunity to implement parts of a simple functional programming language in Haskell. Although they claim you don’t need to know FP/Haskell already, not knowing it makes your life harder - for someone with only imperative language experience under your belt, writing Haskell code will probably feel weird and takes some time to get used to.
This is an essential course if you’re interested in programming language theory, and especially if you’re planning to do a thesis in most areas within formal methods. Even if not, it’s made me consider doing some courses in the future that I originally hadn’t planned to, so I’d still recommend it highly if you're looking for something to do.