Github in the Classroom

schedule Jan. 24, 2015, 8:56 a.m. local_offer

Update: Github have released a product which makes most of the below redundant, but even easier to use! Github Classroom

Most ICT departments and curriculums have shifted towards the inclusion of programming. Largely due to the companies (Google) and the Government’s years-too-late realisation that the qualifications weren’t fit for purpose.

The rise in popularity of Computer Science has lead to more students learning programming in the classroom which is a definite positive, although I would argue that it’s not universal tool to solve the world’s problems that some people have made it out to be. It is a tool, no more, no less.

With the rise of programming in classroom, there comes the arduous task of assessing the work. Depending on how forward-thinking your school is, your marking may range from printing work out to using a learning platform or similar. If your school insists on textbooks and printed marking, you can stop reading here. If you have some option of online assessment, then read on. If not, get your highlighter out!


For assessing code, I have chosen to use Github, Github is a website where people host code. It is primarily aimed at the individual developer or teams and companies but it does work for education too.

I’m not going to go into a massive amount of detail about all the possible ways of using Github to assess, because they’ve got quite good documentation on their classroom guide and they go into lots more detail in their assignment guide.

Getting started

To get you started, you will need to create a personal account for yourself and get your students to sign up too. After that, it is recommended to create an organisation for your school or department, I have set mine up so the organisation is the CS/ICT department and I’ve created teams within that for each individual year/class group. It is possible to work without the organisation structure, but I think this way is a lot clearer for teachers and students.

Once you have an organisation, an example process would look like this:

  1. Create a branch within the organisation for student work
  2. Inside that branch, create folders for all students
  3. Students will then fork (create a copy) and clone that to their computer
  4. They will work on their local code inside an assignment folder, committing changes
  5. Once completed, they will push the code to their fork
  6. They will then request a pull request to the original (your/the organisation’s) branch

At this stage, you can assess the code in the pull requests which allows you to provide feedback and optionally correct and re-request the pull. Once the code in pull request is satisfactory, you can optionally accept the pull request which will merge the student’s code into the main branch. There’s obviously arguments for and against a lot of the decisions you can make surrounding the use of Github, but I would prefer to have one branch with all student code in, but this is a personal choice.


As i said near the start, Github does a good job of providing documentation on different use cases, but briefly:


There’s only really one negative, students (at least in my experience) do seem to struggle with the concept and ideas behind this; it’s a lot of initial pain for the hassle-free long run. There’s also the slight catch that students have to drop to the command line to pull updates from the upstream (teacher) repository as it’s not possible to do so with the GUI version.

Moving forward

Github has the potential to link to external tool to run automated testing on the code. This is designed primarily for developers whose code will be included in larger projects to ensure quality, but we could also use this to provide feedback to students. In the first instance, a simple check of compilation and runtime errors which could be inserted into the pull request would provide instant feedback to the students.

Getting a bit more advanced, providing unit tests at the start of the assignment would let students not only try to develop against them, but provide a checklist-like feedback when submitting the final assignment. This is what I’m currently working on, I don’t think I’ll be the only educator to be using it but I’ve not found a good how-to guide yet so that’s the aim.

If this sounds at all interesting, I’ve included the Youtube playlist below which has a few short screencasts which show how to get the basic setup working from the point of view of the student. You can also check out the teacher’s section on Github for more help.

Github in the classroom videos

[Header image: Github office by Dave Fayram on Flickr] (


Kieran says: Testing