Jukka Suomela · May 2020
I have been lecturing the course Programming Parallel Computers (PPC) at Aalto University every spring since 2015. I had a great plan that in spring 2020 everything would be done as usual, and then we would make a transition to a proper online learning environment in collaboration with the University of Helsinki in 2021. Then we got the coronavirus situation and plans changed.
Now that the course is almost over, I thought I would write here some of my experiences regarding the arrangements for online teaching. While I had already used some online communication channels in teaching for several years, I had close to zero prior experience on recording and editing videos or giving lectures online, so these thoughts might hopefully help others in similar situations.
This page was first published on May 21, 2020, and last updated on June 5, 2020.
PPC is a practical hands-on course on algorithm engineering for modern parallel computers. The students learn by solving programming exercises in which they try to make the best possible use of the computing power of modern CPUs and GPUs. The topics that we cover include multicore parallelism (using OpenMP), vector operations (using vector types in GCC), instruction-level parallelism, and GPU programming (using CUDA). For example, if the CPUs in our computers can achieve according to Intel’s marketing material 460 GFLOPS when you manage to keep all pipelines and all lanes in all arithmetic units busy all the time, our students will learn how to put much more than 50% of that performance in good use in practice.
The grading is solely based on the performance of the exercises that students solve. A typical task looks like this: if you manage to write a program that solves this computational problem on this computer with this input size in less than 2 seconds, then you get full points, and if it takes at most 9 seconds, you will still get some partial points. Of course the program has to work correctly, but the interesting part is the performance.
Communication: We use Slack for all communication. It is used for official announcements, as a place to ask questions and to get help with exercises, for informal discussions related to the course, and to organize virtual lectures and exercise sessions.
Exercises: Five exercises, each divided in several smaller tasks. There are deadlines for 2–3 tasks at the end of each week. Solutions to exercises are returned by using a self-service grading tool and then pushing the solution and the output of the grading tool to GitHub. Our course staff will then check the solutions, give feedback on the solutions, and adjust the result of the self-service grading tool if needed.
Virtual lectures: Each Monday morning there is a 2-hour time slot reserved for the virtual lecture. The virtual lecture is coordinated in Slack. The lecture starts by self-study with pre-recorded videos and other course material. While the students watch videos and study course material, they can write questions in Slack. At the end of the lecture there is a Q&A session (30–45 minutes) that is organized in Zoom. In the Q&A session I first answer questions asked on Slack, and then students can ask additional questions either on Slack, on Zoom chat, or directly in Zoom.
Virtual exercise sessions: There are two virtual exercise sessions per week in which students can get one-to-one help with their exercises and other questions they have got about the course material. The exercise session is organized using Slack and Zoom. There is a special Slack channel in which students can post help requests during the exercise session, and ask for help in either Slack or Zoom. Our course staff will then process the help requests one by one and contact students.
Slack is absolutely critical for the successful organization of the course. All course communication is arranged primarily through Slack, and the course staff also uses Slack to organize our own work.
Our Slack workspace has got almost 400 members, and during the six weeks there have been already more than 14 000 messages posted on Slack; there were at least 200 members who wrote at least one post. In the course feedback that we got, 40% of the free-form answers to the question “what was good” explicitly mentioned something about Slack. Slack has been very successfully used also in the previous years, even though we had normal physical lectures and exercise sessions back then.
We use the commercial Slack license (with the usual 85% academic discount) during the course and downgrade to the free license once the course is over. As the course lasts only for less than two months, it does not get that expensive.
Here are some best practices that we have found useful:
Arranging occasional polls on Slack can be a fun way to encourage students to participate and it can also give insights on what the students know:
The lectures were split in short videos, there were 3–4 videos to watch per week, and a typical video was a bit more than 10 minutes. The total length of the videos per week was 35–55 minutes.
The videos are not intended as a substitute for the study of the course material in the course web page. Usually the videos discuss key ideas in a more abstract level, while the course material goes more in the details of how to implement the ideas in program code in practice.
The videos are shared freely both on YouTube and on Panopto; the students do not need to log on, they can watch the videos anonymously, and on any platform of their choice. I have created a YouTube channel and there is one public playlist per lecture. On the course web page, there is one page per lecture, with direct links to the videos, presentation slides, and relevant parts of the course material.
The workflow for creating the videos was roughly this:
One key observation that I made is this: short pre-recorded videos can contain a lot of information. With a carefully planned script and heavy editing after recording, the contents of a full 90-minute lecture from previous years easily fits in less than 45 minutes of pre-recorded videos!
For the Q&A sessions, I simply asked the students to post questions in Slack before the session, created a Zoom meeting, and then shared the Zoom link in Slack a few minutes before the session starts. I muted the microphones of our students, but allowed them to unmute themselves whenever they want to ask questions. The Zoom session was not recorded so that the students can feel more free to participate and ask questions.
The Q&A session was not particularly popular; apparently most students were already happy with the combination of lecture videos, course material, and Slack discussions (and for some students the time slot was bad). However, some students explicitly mentioned in the course feedback that the Q&A session supported their learning.
Our setup for exercise sessions is described here. One key element is that we abuse a Slack channel as a “lab queue”. Students post help requests in a dedicated Slack channel, and then a course staff member marks the help request with a Slack reaction to let others know that this request is being processed. If the student wanted to get help on Slack, we can easily start to send direct messages with two mouse clicks. If the student wanted to get help on Zoom, then it is the student’s responsibility to set up a Zoom call and our course staff members only need to click on the Zoom link provided by the student. Finally, when a request is handled and the student is happy, we delete the help request from the queue.
All of this worked much better than what I expected. The only challenge is that the number of students needing help varies from week to week in a hard-to-predict manner; sometimes we went badly into overtime even though we closed the queue well in advance, while sometimes we had nothing to do near the end of the session.
Here is a summary of the course feedback that we got in 2020, and a comparison with previous years.