Welcome to the course website for Advanced Programming (AP) 2024! All material and general information will be provided here. Announcements, assignment handin, and the discussion forum remains on Absalon. While this website is a Git repository, you are not required or expected to use Git to interact with it, but feel free to do so if convenient for you.
The programming language we will be using is Haskell.
The teaching material for each week can be found in the weekI
subdirectories.
The assignments for each week can be found in the aI
subdirectories.
We have created a Discord server for discussing the course: Invite link. Please use your government name rather than your sweet hacker nick.
You are not required or expected to use Discord. We continue to monitor the Absalon discussion forum, and course announcements are posted solely on Absalon.
AP has a reputation as a difficult course, particularly for inexperienced programmers, and especially if you do not have prior experience with functional programming. If you worry that your background is insufficient, we recommend spending a little time (re-)familiarising yourself with functional programming. The specific language and book does not matter, but since we will use Haskell in AP, you might as well read Programming in Haskell by Graham Hutton. If you do not like the style of this book, there are plenty others available (such as Haskell from First Principles).
Many Haskell books focus on industrial uses, and go into great detail about how to use complex libraries and such. This is well and good for real-world programming, but unnecessary for AP, where we take a more narrow focus. You do not need to read a thick book, unless you want to.
If you have taken the course previously, see these notes on translating Erlang concepts to Haskell.
We do not mandate a specific textbooks for learning Haskell, but we do have suggestions. We will also specify some research papers and course notes as mandated or suggested reading.
- Programming in Haskell (video lectures here and here)
- AP Course Notes
- Course notes from Brent Yorgey's UPenn Haskell course
We will also occasionally suggest reading material labeled Going Beyond. This is material that goes beyond the requirements of the course, but may be of interest to students who wish to apply the techniques we investigate in applied settings. That is, students who wish to become capable of writing advanced Haskell programs that solve real problems.
See this document on setting up a Haskell development environment.
The course consists of two lectures and two exercise classes every week.
The lectures are on Tuesday 10:00-12:00 in Aud 01 at HCØ and Thursday 13:00-15:00 in Store UP1 at DIKU.
The exercise classes are both on Thursday, at 10:00-12:00 and 15:00-17:00 respectively.
There is also a study café, where you can get extra help on the assignments (or anything else related to the course), on Fridays at 13:00-15:00 in Lille UP1.
September 3rd, marks the beginning of the course, with the first lecture.
Monday | Tuesday | Wednesday | Thursday | Friday | |
---|---|---|---|---|---|
10-12 | Lecture | Exercises | |||
13-15 | Lecture | Café | |||
15-17 | Exercises |
Note: the lecture on the 10th of October is cancelled, due to the auditorium being occupied by one of the student revues. The exercise classes will still be held.
There are no lectures in week 42, on account of the fall holiday.
-
Hold 1:
-
10-12: DIKU 3-0-25
-
15-17: NBB 2.2.I.158
-
Hold 2:
-
10-12: DIKU 1-0-37
-
15-17: NBB 2.2.H.142
-
Hold 3:
-
10-12: DIKU 1-0-04
-
15-17: NBB 2.3.H.142
-
Hold 4:
-
10-12: Online only (see below)
-
15-17: Online only (see below)
-
Hold 5:
-
10-12: DIKU 1-0-30
-
15-17: DIKU 1-0-30
-
Hold 6:
-
TA: Ian Orzel ([email protected])
-
10-12: DIKU 1-0-18
-
15-17: DIKU 1-0-18
-
-
Hold 7:
-
TA: Rasmus Pallisgaard ([email protected])
-
10-12: DIKU 1-0-22
-
15-17: DIKU 1-0-22
-
-
Hold 8:
-
10-12: DIKU 1-0-10
-
15-17: DIKU 1-0-10
One of the TAs (Joachim, hold 4) hosts online exercises (on Discord), not physical ones. If you are assigned to hold 4, feel free to enter any other classroom if you prefer physical teaching. Similarly, anyone is free to join the online exercises.
In order to attend the online exercise classes, join the
voice (and video) channel exercise-class
on Discord at the
appropriate times.
During the online class students may join one of the rooms
room-0
, room-1
and room-2
, where they can share their
screen, and wait. Then, the TA will join these rooms in
a round-robin manner for as long as there are students in the
rooms.
There are 6 assignment in total during the course with deadlines every week. They overlap slightly to allow for more flexibility in your scheduling, but think of them as weekly assignments.
The assignments will be graded with points from 0 to 4 and it is not possible to re-hand-in any of the assignments.
Assignments are made to be solved in groups of up to three students. We strongly encourage you not to work alone. Each group must make their own solutions and cannot share implementations and report with other. You may discuss material and ideas.
Assignment handins are on Absalon. You must join an Assignment Group, even when handing in alone. This is done on Absalon by going to People, then Groups and picking either an empty one, or one where the existing members have agreed to let you join. When one member of an Assignment Group hands in the assignment, it counts as a handin for the entire group.
The following rules apply to all assignments. They are intended to ease our correction process, and in particular to allow automated testing. Consider the assignments to be a specification or API that you are asked to implement.
-
Do not modify the types of any definitions in the handout, except when the assignment text explicitly instructs you to do so.
-
Do not rename or remove any definitions that are present in the handout, except when the assignment text explicitly instructs you to do so.
-
Do not remove anything from module export lists.
-
Do not rename modules or otherwise modify the file tree. (You may add new files if you wish, although it is rarely necessary.)
-
Your code should compile without warnings. (Do not achieve this by disabling warnings.)
-
When handing in, you must hand in a complete workable program (including unmodified files from the handout).
-
When handing in, do not include temporary build files (such as
dist-newstyle
), editor backup files, or various other computer detritus. Run e.g. thetree
command and read the file listing and ponder for each file whether it is something it makes sense to hand to your TA. At a minimum, runcabal clean
before handing in. -
You are allowed to use any Haskell module that is available in the packages specified in the
.cabal
file in the handout. You are not allowed to add additional package dependencies. -
Your zip file, should contain a single top-level folder with an appropriate name (e.g.
handin
).
Violation of these rules will result in points deductions. If you violate these rules at the exam, it will negatively influence your grade.
Every Friday at Lille UP-1 at DIKU from 13:00-15:00 (unless otherwise specified) we host an assignment café where you can get help with the assignment from a TA.
Note: on the 4th of October, the café is from 14:00-16:00.
The exam will be a multi-day take-home exam held in one of the exam weeks. It will strongly resemble the mandatory assignments in content and form, with the following differences:
-
It is strictly individual.
-
It is roughly the size of three assignments (the exam is allotted a workload of 25 hours in the course description).
-
You receive only summative feedback (i.e., a grade).
To qualify for the exam you are required to achieve at least 50% of the total number of points in the assignments (that is, 12 points at minimum). You also need to get at least one point in each of the assignments.
If you qualified for the exam in a previous year, then you are still qualified. When we approach the exam, and we have to send in a list of students who have qualified, we will post a message telling you to contact us to inform us of this.
We still recommend you follow the course.
Week 45: 1st of November to 8th of November.
You are not expected to work full time for the entire period. The intended exam workload is specified as 25 hours of work in the course description.
The reexam takes the same form as the ordinary exam (with the possibility of switching to an oral exam if there are very few attendees, but this is highly unlikely) and is held at a currently unknown time - probably after block 2.
If you did not qualify for the ordinary exam, qualification for the re-exam can be achieved by (re)submission and approval of the mandatory assignments. The assignments must be submitted on Absalon no later than three weeks before the re-exam date.
You are allowed to use AI-generated code and text in assignments and the exam in AP, but you must explicitly indicate which parts have been generated this way, and which tool you have used. If you do not cite properly, then you are conducting academic dishonesty (i.e., plagiarism), which is treated very seriously by the university.