Question: I am teaching myself to program in C and have been for a few months. I recently took a one month break and came back a week ago, and it's all gone. I had to look up some things that I really put effort into understanding (see: pointers) and some others just stuck with me. Now learning about `malloc` and dynamically allocated memory is also getting a bit tough.

What do you suggest for keeping it all retained? Will it just come with time and experience?

Answer: 
Practice, practice, practice. You'll still forget things that you haven't used for a while, but the more you practice, the faster they'll come back to you. Also, (in line with @Telastyn's comment), emphasize understanding things, not memorizing them.
Typically, the ways in which people learn are:

1. Read about the concepts
2. Read the available source code
3. Implement the given source code and exercises

This works very well for short-term memorization and learning. However, there are a few factors which help the transition from "**memorization**" to "**gut-feel**". 

First, have a simple but clear-cut objective, for example, "I want to develop a replacement for Notepad". Everything you learn should be driven by the needs of this app. When you say, "Now how do I show this white area on the screen", look it up, learn it, implement it.

The next time you reach for the same concept, you will remember that context and trigger your memory. You'll think: "I remember that place where I had to use those pesky pointers because of {xyz}." That's how the brain learns and remembers!

Don't stop at one program, try a variety of different ones. You will eventually touch most of the common concepts of your selected language.

You'll slowly gain confidence and try more advanced programs as you go along. Keep it practical and driven by real goals. Keep it simple, and keep it fun.

---

This sermon brought to you by the SE network. Thank you for listening! :)