home
themmj.dev

assignment-test

Repos:

intro

Teaching C to beginners can be hard, but it does not have to be. Understanding the theory of the language's concepts is not that difficult. Putting it into practice is the difficult part. As a result one may want to include regular programming assignments to allow students to get familiar with the established context. However, this comes with its own set of challenges:

  1. Differing hard and software (System architecture, OS, Available compilers, Standard library versions, etc.)
  2. Grading of a large amount of code
  3. Set up of a C development environment (compiler, editor etc.)
  4. Distribution of the assignment code
  5. Archiving

assignment template

Creating every assignment based on this template alleviates some of the challenges.

Codespaces

Any repository created from this template can be opened in a GitHub Codespace. This way, there is a unified hardware and software environment for students to work in. (including all necessary extensions!) This also removes the need for any kind of IDE or tooling to be installed locally. The only required software is a browser.

Additionally the Codespace contains a launch configuration to build and run the program. That means students who are just starting out do not need to know Make or a compiler tool-chain to get started. They can simply click Play and off it goes. Concepts like make and compilers can then be introduced in future lectures without increasing the initial mental overhead.

Finally, a post commit hook is set up which automatically zips the whole repository. This zip archive can be used as a submission for the assignment, thus also archiving the work for the school.

GitHub Classroom

Classroom itself is still somewhat buggy and lacking essential features. However, it can be used to distribute the assignments. A repository based on the template with all code added that's necessary for the assignment can be set to be a template as well. Then it can be used in an assignment in Classroom.

Distributing the assignment is as simple as distributing the link to it. Students can assign it to themselves, which creates a personalized repository for them in the GitHub organization and they can start to work.

Since Classroom is too limited at the moment, students should just submit their zip archives.

assignment test

If assignments are created and distributed as described above, all submissions can be tested in bulk. A repository based on this template only needs to adjust assignment.conf and actually be populated with the necessary tests.

This way all submissions can be run through a standardized set of tests. The readme has a more extensive rundown of the features, but in short:

This is not a substitution for manual code review of all submissions. However, it gives a great first pass with uniform results. Personal evaluation can build upon that.

potential features in the future

One thing that would be nice to have is some form duplication checker to catch the most blatant cases of cheating attempts. Since manual review is necessary anyway, it was not prioritized.