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.
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.
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...
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.
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!)