Typically, the ways in which people learn are:
- Read about the concepts
- Read the available source code
- 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! :)