Retaining Computer Science Knowledge

I've been asked numerous times, "How do you remember all the stuff you've been studying?"

Here's my method that will keep all the good stuff in your brain.

My Mistake in the Beginning

When I first started studying, I was watching videos all day long, taking tons of notes, and trying to remember. I also spent time implementing data structures and their associated algorithms. I would spend 10 hours watching videos on hash tables, for instance.

Over time, I realized I was forgetting things. I wasn't reviewing my notes and felt like all the hours I invested in watching videos was mostly wasted.

Repetition Over Time

What I should have done for each topic:

  • watch a couple of hours of videos on the topic, to get the main idea
  • implement the algorithms and data structures
  • make flash cards for important things I should remember about the topic
  • move on to the next topic
  • review the flash cards when you have time
  • after a few days, watch another video about the topic, perhaps 30 mins or so
  • after another week, watch a video about the topic, maybe same video or shorter one
  • keep reviewing flash cards

The thing to notice here is repetition. Spending one or two days watching videos on a topic just reinforces what you recently learned in the last hours. This is not strong knowledge reinforcement. You will forget.

I go back through all my notes and put them into flash cards. Many, many (too many) flash cards.

You have to leave a time interval between learning something for the first time, and reviewing it later.

The important point is: review a topic over several time intervals. It will continue to reinforce and remind you, and you won't forget it. The time interval can get longer over time. This is called "spaced repetition" (thanks to commenter).

Review Knowledge

I use flash cards to review topics and trivia. Not paper flash cards.

I made a flash cards site. You can use it, too. The setup (especially the Docker setup) is super easy:

I originally made it to make flash cards for both information and also for algorithms and data structures. But now I only use it for CS knowledge.

For code, I use something a bit more primitive: paper.

See the following section.

Review Algorithms and Data Structures

I gathered together all these algorithms and data structures, and simply printed them out (so each one fits on a page, with maybe a couple of exceptions). Then, at my leisure, I can look over some code.

It's probably not necessary to memorize them, just know the concepts and how they work in case you need to recreate them in an interview.

I'll be taking some time to test myself on these. For example, write out Dijkstra's algorithm. I'll write it on the board, without looking, and then look at the paper to see how I did. Do you need to memorize Dijkstra? Probably not, unless you have a Master's degree and many years of experience. Then, for you, it might be expected in an interview.

comments powered by Disqus