I'm a computer science student currently enrolled in a masters program. I've learned all kinds of interesting technical information this semester, and was wondering what is the best way to keep this information in my brain so I don't forget. I could solve any of the problems in my text books right now, and will probably do great on the final exams, but in a few months from now, I'm not so sure if I would be able to solve as many problems, and I'm not confident I would do as well on the final exams if I had to retake them. Seems like a waste to spend all that money on tuition if I'm just going to forget it all. What's the best way to keep it fresh? If it's not possible to keep it all in my brain, then I would at least like to figure out a system to commit it to a knowledge base where it can easily be recalled as needed.


In my experience, you have to use it or lose it. The best programmers I know are the 'total geeks' who love programming. They write code of all sorts every day. That C# client might pay the bills, but when they go home they are writing expert systems or contributing to open source projects.

There is some research that indicates it takes 10 years to master something. Chess, music, whatever. The difference between people who spend 10 years showing up for work and those who spend the same 10 years mastering their craft is in how those 10 years are spent. As it turns out, you just can't spend your days doing the same thing - you have to push yourself. It's through this constant striving that you'll retain what you learned in school (because you'll need it) and you'll be learning much more.

  • 1
    That 10 years figure is, according to Malcolm Gladwell (in Outliers- the story of genius), of total dedication to a field for absolute mastery. He gives examples of The Beatles, Bach, Bill Gates and a basketball player who I don't remember but is apparently a big deal. Is the questioner aiming for this level or for being good "enough"? On the other hand, 10 years of immersion is also the requirement for fluency in a foreign language, which I guess applies to learning in computer world! Nov 25 '09 at 4:30
  • Thanks for the reference - I could not for the life of me remember the name of that book. Re: your question: Well, Joe is pursuing a masters degree & one supposes they plan to make it their profession. I don't know any programmers who tell me they plan to be mediocre. Nov 25 '09 at 5:12

I would not worry so much about forgetting what you've learned. I think Richard Feynman said too many people memorize useless facts that could just as easily be looked up in a book. Concentrate on recognizing problems and knowing where to look up the information on how to solve it.

When you start your programming career, problems aren't going to pose themselves like this:

"Write a program to take a set of vertices and edges and compute the minimal spanning tree for the graph."

Learn how to look at problems and abstract them so they become something you learned how to solve elegantly in school. Then go to your books and refresh your memory on how to implement the algorithms.


Ah, If only there were Git for my brains, I could say I haven't lost my mind, its backed up somewhere.
True life alas is not so yet.

However, while you will not recall the method to solve every problem you can work on today,
feel good with the idea that your mind is not like your computer harddisk.
The way it remembers things is (in some ways) more like the content-addressable-memories in there.

So, while you will forget the techniques, the general concepts will be soaked in your brains.
You may use them later in your life to solve completely different problems (ones you never saw in your schooling life).
When you do see problems to solve later, and you take efforts to solve them -- that is when you will continue to 'remember'.

In that sense, you have something no computer manufacturer can afford --
Lots of CAM and Error Correction
Keep solving them problems...

  • Funny you mention that. Source control & supporting docs is exactly how I keep track of all those old solutions I've worked on in the past. I'm a huge doxygen fanboy & I tend to write a fair bit of supporting documentation in my code (in part) so that it is easier to find later. A happy by product is that all the code I write comes with the software design / API docs built in. Combine that with good source code control and some searching tools & it's usually easy to find a good solution to an old problem. Nov 25 '09 at 15:51

Having finished my CS degree a while ago, I have indeed forgotten much of the details of what I learnt there. I don't really think that's too big a deal though. At uni/college, you're learning core skills in a specific area and you're also learning how to go about learning those skills. The point is not to teach you everything thing you will need to know about various topics important to your career. The career of a (good) programmer is one that involves life-long learning.

As others have said, if you really want to retain as much as possible, the best solution is just to get stuck into practicing the concepts by writing your own software or contributing to open source projects. But don't stress about forgetting details, this is just an inevitable fact of life. When you come across something you've forgotten or never actually learnt, you just look it up and hopefully your foundational skills and competencies that you developed at school and along the way will mean a shorter time in picking it up. It'll probably happen again, and then again, and all of a sudden you find you know this concept backwards.

Of course there's probably a lot of useful tidbits inside all your notes and textbooks that would come in handy. Stuff like little gotchas and useful code snippets that are hard to remember. I keep my own local wiki to try and collect all these sorts of things for quick reference. You might find scouring your notes for these sorts of thing useful.

Also, I like to hold onto my textbooks and course notes for a while. I find that because they happen to be laid out in the way that I learnt these topics for the first time, they reflect better the way the knowledge is structured in my head and I can more readily understand what they're talking about.

  • Thanks! What software do you use for your wiki? It would be nice to have something which could render code nicely, like this website can.
    – Joe
    Nov 25 '09 at 5:27
  • I use Tomboy. It's pretty lightweight, so it may not quite do everything you might want, but it integrates nicely into Gnome (which I use) and lets you just worry about the notes rather than faffing around configuring it. It has a fixed width style which I use for code, but that's it, so no syntax highlighting (unless there's a plugin for it).
    – nedned
    Nov 25 '09 at 6:04

What you should remember isn't the problem solutions, but how you solved them. That's the real trick; the problems are different almost every single time.

Just keep solving difficult problems. (What I find useful is to introduce wickedly difficult problems that lie in wait for me for months, then strike without warning on a three day weekend. Keeps me in shape!)


I recommend a Supermemo type of flashcard software. I use Mnemosyne.