I recently read through Alexey Zagalsky's slides from his ICSE16 talk "Student Experiences Using GitHub in Software Engineering Courses". The talk is a presentation of a paper where they explored the use of GitHub in education. The findings show many positives but also a number of pain points that students and teachers experienced throughout the research.
I'd like to explore several of these problems and suggest, what I believe to be, some concrete solutions.
Diffs of teaching materials
"I think one drawback of GitHub is that you cannot actually see the diff [of] commonly used files such as PTTs or PDFs, so you can't really use it for correcting professor's slides, or PDFs."
This is the most common problem I've seen people struggle with and it's understandable. Many people use PDFs and Power Point to deliver teaching material which provides a good variety of different presentation techniques. It covers your lectures, supporting handouts, and assignment briefs. However they don't play nicely with Git.
The solution is to use something that is plain text based, That may sound limiting but in fact you can achieve everything you want, and the tools are mostly free.
Markdown is a great tool as it can be easily diffed and it's also incredibly diverse in possible uses. Here are a few ways I've used it before.
- Handouts / Assignment Briefs - A simple plain text markdown file can be used for lesson handouts, many different applications will render markdown. Most will also allow you print like any other document editor.
- Web formatted resources - Markdown is designed to convert to html easily. Pretty much any markdown editor will let you export it as a web page. This means if you like to host your materials in a web format, you can easily churn it out without having to sacrifice plain text readability. This opens up doors for using things like GitHub Pages for a public website for your course!
Avoiding public projects
"It would actually be nice if [our projects] were separate or private somehow so I wouldn't have to go through everything and sanitize all the stuff..."
You may not always want your work public as it can sometimes be messy, especially when working to a deadline. There are a few options when approaching this problem and they may benefit from a bit of discussion within classes, but this is my suggestion.
When using an organisation, set all assignment repositories to private. This means when a student clones the repo, it'll be forced to private as well. If a student wishes to display their work after the assignment deadline, they can simply re-create the repository. This is done by them creating their own public repository, adding that as a remote to the original local repo and pushing to it. This will push all commits from the repo up the new remote, that way they keep the history as well.
Encouraging contribution to materials
This one wasn't too much of a focus in the paper or presentation, but I actually think it's potentially the most important one.
Encouraging contributions can be treated like any open source project. The most important thing to have is a defined system for people to use to contribute. Many open source projects will have some sort of guide that explains exactly what ways people can contribute, and how to do each of them. Anything ranging from logging a bug/issue, to submitting a change or addition, it's there in plain text so that no one is confused.
I'm a big believer in doing things rather than talking about them, so I've spent a bit of time creating an example contribution guide that you're welcome to use in anyway you like. My hopes are that this provides a simple, easy to understand model for students contributing to their course.
GitHub isn't perfect by any stretch, and it's not designed for education either. You might find more luck with other systems out there, but the idea of using an industry tool to deliver teaching content is an important one in my mind.
With Git and GitHub you kill multiple birds with one stone. You'll be pushing students to learn a standard tool, delivering teaching material effectively and quickly, and also encouraging contributions and feedback on your work.
If you decide that git or GitHub aren't right for your course, I'd be really interested to know what you do choose to use.