Contents Background Spaced Repetition
Total Page:16
File Type:pdf, Size:1020Kb
Contents Background 1 Spaced Repetition 1 Custom Anki Copy 2 Use Cases 2 Foreign Languages . 2 Programming Languages . 3 Background Here begins my earnest effort to learn and retain everything: Spaced Repetition Here’s the algorithm I ended up using for supermemo I(1) = 1 I(2) = 6 I(n) = I(n-1)*EF where easiness factor is a easiness factor that varies between 1.1 and 2.5 the new easiness factor is computed as: EF' := EF - 0.8+ 0.28*q-0.02*q*q where q is a number between 1 and 5, and starts as 2.5, inter-repetition interval is in days Easiness factor is made according to this rubric: • 5: perfect, effortless • 4: perfect, some effort • 3: correct, with some difficulty • 2: incorrect, but got it second try • 1: incorrect, but got it eventually • 0: complete blackout function computeInterval(oldInterval, oldEF, difficulty) { let newEF = oldEF - 0.8 + 0.28*difficulty - 0.02*difficulty*difficulty; return oldInterval * newEF // need to save newEF } 1 Custom Anki Copy I’m going to make my own version of the popular incremental reading software anki. Not because I have a problem with it, I actually haven’t given it an earnest try yet, but because I think this kind of thing is highly personalized and I’d do better to make my own version. I also think rewriting is an important part of the learning process. It forces you to make the things that you actually want to remember more explicit. I already have a way to encode flashcards into my notes. Now all that remains is to create a way to review those flashcards according to the spaced repetition formula that I set. I propose this: The yml format for flashcards remains as it is, since for some things I’ll want to procedurally generate flashcards, or write them out by hand. I’ll then hash the input and save a database of hash -> difficulty map. Then loading the flashcards becomes a proccess like this: • Load all flashcards from all files into memory • Annotate the flashcards with their respective topics • Annotate the flashcards with their hashed difficulties / last practiced dates • figure out which flashcards to review based on the spaced repetition algo- rithm • review those cards • update the hash -> difficulty maps This model eliminates the need to rewrite the flashcards, which obviously is a messy process It requires keeping two pieces of information for each hash: a record of the last time it was reviewed, and the next repetition interval, which is continuously computed. Use Cases When is spaced repetition a good way to accomplish what you’re trying to do? Foreign Languages This use case is pretty well documented, and it’s not what I’m using it for, so I won’t elaborate 2 Programming Languages Often, not knowing the syntax of a language gets in the way of programming effectively. Having to search for fairly uncommon use case synatax adds a lot of mental burden, and causes frustration. Studying syntax, while less fun than actual programming, is far more time-efficient 3.