The scientific theory behind the learning approach in Parley and KWordQuiz and maybe also other applications in KDE Edu is so called "Spaced Repetition Training". This means that when you are learning a new concept, like a word or similar, you are shown it repeatedly with varying time intervals. The better you know the concept the less often you are shown it. But with each repetition you get the concept deeper ingrained into the long-term memory and finally after some number of times it is permanently imprinted and you will never forget it.
When you have lots of similar concepts to learn at the same time it makes sense to concentrate on those that you have difficulties with and not concentrate on those you already know or have an easier time learning. This is handled by making the time until next showing longer (often doubling it) if you remember correctly during training and bringing it down to a minimum if you get it wrong. After some time all the words have been repeated enough to bring the interval up towards the maximum even if some words went there easily and some had to be repeated many times.
One way to handle this in a practical way is the use of so called Leitner boxes. The idea is that you have physical flashcards with words in two languages, one language on either side. You train by looking at one side of the card and try to come up with the correct translation. To find out if you are correct you look at the other side.You sort your flashcards into one of several boxes with numbers on it. The first box contains those cards that you haven't studied yet and/or those you got wrong at some point during the training. When you take a card from one of the boxes and you remember word on the card correctly you move it up to the next box. If you get
it wrong you move it down to box number 1. You repeat this until all of the cards are in the box with the highest number.
This is of course very easy to implement using a computer and many training programs use this exact way of implementing the ideas behind spaced repetition training. In Parley we have 7 different virtual boxes where all the virtual cards are sorted. The interval until the next showing is configurable but the default is that those in the first box are shown again after 1 day, the second after 2 days, then 4 days, 1 week, 2 weeks, 1 month and 2 months. Basically a doubling for each consecutive step.
This works nicely when you already have a learned the words in a very basic way and only needs to repeat them. The first time you see a new word you don't know it of course and should be shown it again in seconds, not one day later. Parley gets around this by showing you the card again during the same training session until you get it right the first time. Then the card goes into box 1 and is shown again after a day. This means that when you try to learn new vocabulary you either have to work around Parley and train again on the new words, bypassing the automatic blocking, or you have to wait for a day and then have to relearn most new words because you a
lready forgot them.
I can see several ways of fixing this problem and I would like to have a short discussion here about which of them to choose.
1. More boxes.
In the theory behind spaced repetition training it is not fully established which intervals are optimal at the beginning of the process. One researcher, Pimsleur, recommended a first interval of 5 seconds. Another implementation I worked with used 3.5 minutes but they repeated the word until I got it right the first time.
It would be very easy to fix the problem by just introducing more boxes. The first box would then have a repetition time of, say, 3 minutes and then have boxes with 6, 12, 30 minutes, 1, 2, 4, 8 hours and finally 1 day and so on. This means that we would use 15 boxes instead of 7, other than that it would be exactly the same. UI wise this could be a challenge but other than that this approach would require no changes.
2. A separate learning stage
We could use the same system as today but add a learning stage where the cards are not regarded as being in any box at all. During this stage, we could implement the pure time-based repetition system which means we would end up with the same solution as in alternative 1 but it wouldn't show all the boxes. Visually it would be the same as before.
3. A pure time based solution.
This alternative would be to skip the boxes altogether and only focus on when it is time to show a particular card again. Learning wise it would be the same as alternative 1 and 2 but visually in the UI it would mean less clutter (no boxes) and a more uniform way of choosing the cards. However, it would also mean the biggest step away from the current working of Parley.
So, there it is. My gut feeling is that approach 3 is the best. If you reread my initial mail about reworking the language applications you will find a description of one of the websites that I have been using that I think worked better than anything else that I tried. That was thaipod101.com. It used times only and it was simply awesome. But as I said, it would also mean the biggest deviation from what we have now.
And to add to that, our current file format kvtml2 does not support a time-based approach. It does store the time of the last time the card was shown and which "grade" the word has - i.e. which leitner box the word currently belongs to. But since the time for each leitner box is configurable in the UI, it is not possible to implement a pure time-based solution using the current format.
Adding a time interval until the next showing is a trivial fix to keduvocdocument but it means that if you load your file into an old parley you will lose your training status. If we add more boxes instead (alternative 1) then it would still be backwards compatible but also much uglier.
So which approach is best? Comments?