I use to prepare my lecture using PowerPoint. It works quite well, except it is not version control friendly. This means that whenever I need to re-teach and modify the content of a course, I need to copy and paste all my slides before I can modify them. This results in a lot of redundant content accumulated in my folder over the years.

To solve this problem, I switch to Reveal.js for presentation so that I can version control my lecture slides. It does take a bit of work to convert all my previous slides into Reveal.js initially (BTW, I found a person who can help me to convert my slides with a fee, which saves me a lot of time. If you are interested, let me know). However, once that’s done, I can now use GIT to version control all my slides, which is super nice. Below is a screenshot of my current slides folder for CS3249: user interface development. Each lecture is now an html file which can be nicely version controlled and shared online if I want to.

Screen Shot 2017-01-11 at 2.50.53 PM

To manage my slides from year to year, I create branches for different years. For example, below is a screenshot of how I manage my branches.

Screen Shot 2017-01-11 at 2.54.37 PM

2016_s2 is a branch contains the slides for last year. 2017_s2 is the branch for this semester. I also create a 2017_s2_pre branch to place my pre-lecture slides. These slides contain partial information that allow the students to look at before or during the lecture, without the information I don’t want them to know before the lecture, such as in-class quizzes, etc.

The workflow of lecture modification is now the following:

  1. checkout the branch for final version (e.g., git checkout 2017_s2)
  2. work on the individual file (e.g., cs3249_week1_intro.html)
  3. commit the changes (e.g., git commit -am “bla”)
  4. check out the pre-lecture branch (e.g., git checkout 2017_s2_pre)
  5. merge the changes I made earlier on a particular lecture to the pre lecture branch (e.g., git checkout 2017_s2 Lecture/cs3249_week1_intro.html). (Note: this step is important since I don’t want to redo my changes again in this branch)
  6. remove or hide content I don’t want to share with the class before the lecture
  7. commit the changes for the pre-lecture branch
  8. done!


Written by Shengdong Zhao

Shen is an Associate Professor in the Computer Science Department, National University of Singapore (NUS). He is the founding director of the NUS-HCI Lab, specializing in research and innovation in the area of human computer interaction.