Prof: Olivier Danvy
CS2104 is a module intended to teach students about various concepts in programming languages. The original plan was to cover Chez Scheme, then Schelog, then OCaml, then Gallina. However because this is the prof's first semester teaching this module, the pacing did not go as planned and we only touched Chez Scheme for the whole semester.
The lecture notes for this semester is online here, which covers[1]:
- Introduction to Scheme, including Backus Naur Forms and Proof Trees
- Recursion without self reference
- Unit tests in Scheme
- Lists in Scheme, including detecting cyclic lists, and trees represented using lists
- Regular expressions in Scheme
- Evaluation order (Call by value vs name vs need)
The lectures were conducted in person with no recording and unfortunately Prof Danvy's accent makes it hard to understand him at times. The tutorials are also conducted by Prof Danvy, and was basically just used as an extra 2 hour lecture slot.
Some weeks required hand-ins that are written in LaTeX, and were mostly simple coding exercises. The hand-ins are done as a group of 9-10 people, which felt way too large and you can prob just join a random group and ghost throughout the whole semester.
The midterm project was a self applicable syntax checker written in Scheme, also to be done as a group. The final exam was an open book, non secure, 61 MCQ examplify paper, most of the questions were about behaviours of given expressions in Scheme, which we can just run on our own laptop to test it out.
Personal opinion
This was certainly the weirdest mod I have taken. It felt like an intro to computer science module done in Scheme, which is not surprising given that Prof Danvy taught such a module back when Yale NUS was a thing.
The first 2 weeks really felt like a waste of time, Prof Danvy spent most of the lessons talking about clarity, self reference, and pleonasms. The lecture notes for these 2 weeks were reused from YSC1212, and I really encourage you to read this to really understand how this module is conducted. I understand that self reference is an important concept in programming languages, and the prof wants us to reflect on how self reference works and why its allowed in PLs, but is it really necessary to spend 2 lessons on this?
The next few weeks weren't really any better, where prof spent many hours going through the syntax and behaviour of expressions in Scheme. I really felt this wasn't needed, as I learnt most of it myself by just scrolling through the Scheme reference. Prof should have just expected some level of background and spend one lecture going through any peculiarities of Scheme, before moving on to more interesting concepts, which would have certainly helped with the pacing.
I also felt that lectures were pretty dry and boring, which resulted in me not attending any more lectures past reading week. Prof Danvy basically spends the lecture using Emacs to run code snippets and talk about what these snippets do. Maybe it is because I already know most of these concepts, but I feel like they are way too simple for a level 2000 CS module, and I hope the prof can make it "harder" for future iterations.
I would say the only fun I had in this semester was for the exercises in week 12, where we were asked to compile regular expressions into scheme by chaining if and let expressions. I felt this was pretty lame, and used what I learnt from CS3231 and wrote a program to compile regular expressions into Non-Deterministic Finite Automata, which then gets interpreted to match against input strings.
Lastly, more time needs to be dedicated to admin, Lecture notes are not updated regularly (we didn't even have lecture notes in the first few weeks) and my group still does not know our grade for the first 3 hand-ins. One of those hand-ins is even marked as 0/20 which the prof has not resolved, because of this I can not give a grade breakdown and can't estimate my grade for this module. (Update: The marks were released on 15th December)
Workload: 4/10
The weekly hand-ins required a lot of writing to explain the purpose of the exercise, how we solved the exercise, and our conclusion for solving the exercise, this constituted most of the workload.
Enjoyability: 2/10
I was hoping to learn more interesting concepts.
Difficulty: 2/10
P.S. I hope this didn't come off as too harsh on Prof Danvy, this is his first time teaching CS2104 so some hiccups are expected, and I have heard good things about his other mod CS3234.
Grade breakdown
[individual] final exam (multiple-choice questions): 25%
[group] weekly handins before the midterm project: 20%
[group work but individuated grade] midterm project: 25%
[group] weekly handins after the midterm project: 20%
[individual] participation: 10%
| Assessment | Marks | Low | LQ | Med | UQ | High | Actual |
|---|---|---|---|---|---|---|---|
| Week 02 | 18/20 | 18 | 18 | 18 | 18 | 18 | 6/6.67% |
| Week 03 | 19/20 | 19 | 19 | 19 | 19 | 20 | 6.33/6.67% |
| Week 04 | 19/20 | 0 | 19 | 19 | 19 | 20 | 6.33/6.67% |
| Midterm Project | 90/100 | 60 | 80 | 85 | 88 | 90 | 22.5/25% |
| Week 11 & 12 | 19/20 | 0 | 14 | 15 | 19 | 20 | 19/20% |
| Final Exam | 48/61 | 19 | 37 | 42 | 47 | 55 | 19.67/25% |
Excepted grade: ¯\_(ツ)_/¯
Final grade: A
Disclaimer: I did not attend many lectures so my understanding of what was actually taught in the lectures is not the best. ↩︎