ines / course-starter-python

👩‍🏫🐍 Starter repo for building interactive Python courses
https://course-starter-python.netlify.com
MIT License
504 stars 118 forks source link

Interactive exercises for in-class worksheets - grading for completion #16

Closed firasm closed 4 years ago

firasm commented 4 years ago

Hey there, thank you for this amazing resource, it looks extremely polished and I'm amazed it's all open-source!

I'd like to use the course-starter pack to build in-class worksheets as I go through my lesson. But the one thing I cannot quite figure out, is how to record student progress. At minimum I'd like to know which of my students complete the worksheet so I could give them completion credit (and more importantly, know who isn't doing it). At the moment the current solution is to use jupyter notebooks and get them to submit it, but I really like the idea of using this tool as a lecture-guide and having everything in one place (slides and worksheets). To be clear, I am not suggesting or asking for this to turn into an LMS. I'm aware what I want may require scripts to pull data from different sources and merge it to get it into a useable form.

tl;dr version: Any advice or suggestions on how to use this to capture student progress/performance? I can simply ask a question about their student number or email at the beginning of each worksheet - but does their progress get logged anywhere?

ines commented 4 years ago

Hi! Thanks for the kind works 🙂 A similar question came up a while ago on the R starter in ines/course-starter-r#6 and here's my reply:

I thought about this initially but it's pretty difficult to do it in a satisfying way, because everything's on the client and all of that can easily be manipulated. So it ultimately comes down to how much you trust your students.

Assuming your students won't have access to the source repo of the course, here's an idea of how you could do it with pretty minimal effort:

  1. At the end of each test() function you write for the individual exercises, print an exercise-specific hash / password / completion code etc. after calling success(). If the exercise is validated and no error is raised, the student will see it – if not, they won't.
  2. Ask the students to keep track of those codes.
  3. At the end of it, ask them to put them all together and report the result. (Easiest way would be to return a number for each exercise and ask them for the sum – but depending on what you teach, you could even make a little exercise out of that step and let them compute something more complex 😃)

You'd just have to make sure that the tests you write are accurate to prevent false positives / negatives.

A more sophisticated approach could be to make it send a request to an API that you host. The student could then access the course app with an added name / ID, e.g. http://example.com/course/?name=ines. The app would then read that and paste it into the test template, together with the exercise ID. Your API could then receive a request with the name and exercise ID, so you'll know I successfully completed it. The approach should work – but it'd definitely require a bit more work than the "password" idea outlined above.

firasm commented 4 years ago

Thanks! That's a good idea! Actually, along those lines I could actually make the "passwords" unique to each user, and that'll add a bit more "security".

Will see if I can hack something together... Closing issue!