Its all in the algorithm, baby.

Last Wednesday, I was discussing learning and spaced repetition with a co-worker. A couple good things came out of this conversation.

Firstly, that I should blog more. This inspired me to finish up an introductory article on spaced repetition that I had been working on for Memoratiā„¢. I also decided to try and make Tuesday be blog-day. Since I spend so much time writing each entry, Tuesday will really just be blog-publish-day, but thats fine, whatever gets me to post more.

We also discussed my experience using Memorati with its algorithms and some things that have been unsatisfying about them. Those things are:

  • The aggressiveness of the algorithm used should vary with the number of cards a user has decided to tackle. Aggressive algorithms work better for lots of cards but less aggressive is better for fewer cards.
  • What happens when you neglect your cards for a period of time? The algorithm should take into account the level of involvement of the user. Current algorithms make it very hard to stop for awhile and jump back in. And it is impossible for a person to always stay on top of their cards because this is life.

All in all, this is has lead me to realize that the "right" algorithm has to be more than just the Leitner System implemented in computers. It needs to be much more sophisticated. And also that it will probably take a ton more experimenting to find the "right" algorithm. Something that should be made a priority is allowing different algorithms to be easily pluggable.

Right now, with the current code base and database structure, it would be impossible to go beyond the Leitner System method of measuring familiarity (levels). One thing I'm thinking is moving to CouchDB for the database, so that the data structures can be expanded without having to worry about relational database schemas. Also, moving the algorithm into the JavaScript instead of living exclusively on the server.

But! Thats all blue sky at this point. There are higher priorities.