Personal Productivity Stack Exchange is a question and answer site for people wanting to improve their personal productivity. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm a CS student and like many future software engineers, I have to learn a lot about data structures and algorithms (knowing them and also knowing how to implement them). I find that after I learn+implement an algorithms I tend to forget it rather quickly. This also goes for more complex data structures.

I find it frustrating having to re-read my notes every couple of weeks trying to fill the holes. I'd like some tips from people who were in my situation on how to better remember the things I learn.

share|improve this question
If you look through the other memory questions, you'll probably find several good answers. – Belisama Jun 10 '12 at 22:16
maybe they meant to but they forgot – Michael Durrant Jun 10 '12 at 23:53
possible duplicate of How do I memorize lists of technical terms? – Belisama Jun 11 '12 at 1:48

One important thing about learning by repetition (which really is your only option, probably) is that it's vastly more helpful if you reinforce the information before you've forgotten it, rather than go back over your notes once it's all gone from your head. And it's much better to try to remember, rather than just go over your notes to read about it again. Remember, you're trying to train your mind to retain the information, not to forget it and look it up in your notes, so try design a system that reinforces the result you want (remembering things) rather than the result you don't want (looking things up).
(I often end up doing this wrong for a while on some new subject, and then realize that all I'm doing by re-reading the information is training my mind to not retain it.)

For a working spaced repetition system, you need two basic components:

1) a method of prompting yourself to remember the information, without reading it. You can use the chapter questions from your textbook if they're good enough, or just write down a list of questions for yourself after each lecture or after reading each book chapter. That way instead of re-reading your notes, you can test yourself against the questions later in order to prompt yourself to recall the information.

2) a schedule. Figure out, by trial and error, about how long you can retain the information. You don't want to do the next repetition when you've forgotten it all already, but you also don't want to go over twenty lists of questions every day when you have the answers memorized already.
Note that this will definitely vary with time - you could try something like doing the first repetition the day after you learned something, then a week, then a month... Adjust as needed, this is highly dependent on both person and subject. And it's not a disaster if it turns out you did forget most of the information once or twice, as long as it doesn't become a regular thing.

In addition, it's good to have different ways of reinforcing each piece of information, rather than just going over the same list of questions and answers by rote at each repetition. So maybe sometimes use the textbook questions, sometimes the questions you came up with, sometimes find a quizz online or browse the SO algorithms tag...
And try to answer the question different ways at different times - sometimes describe the algorithm/structure verbally, sometimes draw it out with diagrams and graphs, sometimes write pseudocode or even go ahead and implement something. Once in a while, not often, just reading up on it would be good too - going over your notes or textbook, SO answers, wikipedia, etc.
The more different activities/ideas your brain has associated with something, the easier it'll be to remember.

share|improve this answer

Other answers have good suggestions for memory in general. For your specific case of data structures and algorithms, I suggest adding exercises in both generalization and specification. What's that mean? Implement those data structures and algorithms in multiple languages. Drive out all the details you can of how a data structure might fail or be misused, as well as the sunny day cases where it is used correctly. Once you've done that in two or three (or more) languages, return to the general description of the data structure or algorithm and rewrite it for yourself reflecting what you have learned.

share|improve this answer
definitely agree. I'd also add it's important NOT to try to learn algorithms & data structure via memorizing. – Nada Aldahleh Jun 12 '12 at 3:21

Repetition. Once can be fleeting. The more times the better!

Multiple senses sometimes I use mnemonics, sometimes I drop a picture with key concepts drawn in distinctive ways. I read, I listen to podcasts, watch video's, etc. The more senses I use the better.

Mnemonics I also use colors and shapes to remember words and themes. Often the more bizarre, the more memorable!

Continued Use This is the 'use it or lose it' effect. All knowledge fades over time.

share|improve this answer

Here's an un-answer, from my very first lecture in computer science (September 1984, CS 100, University of Waterloo). A student asked Prof. Don Cowan to clarify some detail of COBOL's syntax, and the answer was an outburst: I don't even try to remember all that; that's what the manual is for.

If this highly awarded scholar gave up memorizing three decades ago, consider how pointless brute-force memorizing is now, in a field that changes ever more rapidly.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.