PyJaipur / SoA

Website for summer of algorithms
https://soa.pyjaipur.org/
9 stars 10 forks source link

Spaced repetition based learning program #31

Open theSage21 opened 4 years ago

theSage21 commented 4 years ago

How about ensuring that a person remembers what they have studied by using a spaced repetition program?

For example, after learning about CPU scheduling, they should be asked questions at correct intervals to ensure that they don't forget that info.

rishabhKalakoti commented 4 years ago

An idea is to have something like daily/ weekly goals which will give extra currency (like in daily login) as completing them will earn effort too. I personally prefer the weekly idea more. Steps:

  1. Implementation of a system for timestamp management which will include timestamps like, most recent time for solving an individual task, time that marks the start of a specific track.
  2. Mode of daily/weekly goals. For example, (for weekly) suppose the no of questions is 3, the covered tracks will be divided into three parts (lets say in ratio 4:3:2) and one question to be given from each sections. We will . need to decide if this is to be implemented for tracks individually/ multiple at once.
  3. Calculation formula for selection of task (assuming we will give them the previous tasks again): The tasks can be ordered according to the most recent timestamp and be assigned different weights depending on the difference between the timestamp to current time (the task completed most recently will be given least value) and can be divided over an interval from 0-1 and a random number generator can be used to select the task.

Note: Calculation might not be efficient until we have enough tasks for each track.

Open for discussion.

theSage21 commented 4 years ago

Pretty good ideas so far :tada:

  1. Maybe we can track task-user tuples in the database and add timestamps to them?
  2. I think each track will have different requirements of effort so perhaps we can keep the weekly goals for them individual.
  3. This is a little hairy and raises a few more questions:
    1. While designing tasks we need to design them so that a new question is asked every time.
    2. Repeating a task should not become a source for mining more currency.

How does this sound?

  1. Each task is a function which returns an input-output tuple. People have to find the correct output for the given input. This way we can generate an infinite number of "renderings" of the task.
  2. Each task, when completed yields some currency. This however depends on when was the last time you correctly attempted this task. For example, correctly attempting a task months after you've last attempted it right will give you lots of points but doing them twice in a row quickly will only give points for the first attempt.
  3. Something that was implicit in your text above was the concept of a system which sends reminders to a person. We don't want to overwhelm them so this will need careful design.

Let me know what you think.

rishabhKalakoti commented 4 years ago

I agree with the above points. I guess I will start working on a WIP PR and we can handle the issues on the way.

theSage21 commented 4 years ago

Makes sense. Maybe start with an implementation for recording tasks in the database?

On Tue 19 May, 2020, 20:02 Rishabh Kalakoti, notifications@github.com wrote:

I agree with the above points. I guess I will start working on a WIP PR and we can handle the issues on the way.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/PyJaipur/SoA/issues/31#issuecomment-630859193, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB2WHUPHIETK7BOWJT7KE3DRSKKAVANCNFSM4MXUT7YQ .