Memorization is a tricky beast. It comes in handy when learning a new programming language, a new computer program, a new set of papers with authors and dates, and lots of other places. When learning something you'll use every day, memorization comes naturally. I can pretty quickly learn the basic syntax to a new programming language and be able to crank out "Hello, World!" Because I program somewhat infrequently, though, there are a lot of things, and very useful things, that I only once a month or so.

Enter Anki. Anki is a cross-platform application for creating and reviewing flashcards. But above and beyond your average flash card, Anki creates a schedule for reviewing the cards based on your own needs. If you see a card and immediately know the answer, Anki can stash it away for a week, or even a month once you have reviewed it a few times. For things you are just beginning to learn, Anki can show them every day or every couple days until you've got them down.

The schedule is driven by your own responses as you review the cards. After each card you have the option to mark it as Hard, Good, or Easy. When you see the card next depends on your response. Hard questions are shown again relatively soon, while saying a certain card was Easy will push its next viewing far into the future. You also have the option to view the card again during the same review session. I use this for any card I get wrong, or that takes me too long to remember.

Using the Ankiweb service, cards and progress are kept synchronized between the desktop and mobile applications. This service makes it easy to create a bunch of cards as you're learning new things at the computer, then review them in the waiting room, over breakfast, or (ahem) in the bathroom.

Anki is available for Android, iOS, Windows, Mac, and Linux.