One problem with most inexpensive universal learning remotes is that they don't have enough memory for the learning functions. You learn a few functions and then run out of memory so you can't learn any more even though you have plenty of buttons left over. The only inexpensive remote that has complete learning capabilities without running out of memory is the Sony RM-VL900. You can get this capability on much more expensive remotes but none that are less expensive (at least that's what I've found).
Note that the Sony RM-VL900 also has a configurable version of the "punch-through" feature for volume control. For example, you can set it up so that when controlling your VCR or DVD, using the volume control will control the receiver volume (or TV volume if configured that way) without actually having to select the receiver (or TV) device. This is quite convenient.
To answer your question about programming the remote, you first typically find a code that controls the greatest number of buttons for a given device (in some cases this may not give you any more than power on/off). Then you manually program the aditional buttons for that device that are missing or not the function that you want. Programming involves putting the learning remote face to face with the original remote so that it can learn the IR sequences.
You do have to be a little organized since the labels on the learning remote may not match those of the original exactly. For example, you won't usually find a DVD or CD player "open drawer" button on the learning remote so you will need to decide which one you want to use. And yes, it can take a while to program but most of that is learning how to do it on the remote. The actual programming may only take 5-10 minutes.
Every question that you could ever have about remotes and much much more can be answered at
www.remotecentral.com or its discussion groups. Check it out and before you buy a remote, read the reviews on it first.
Hope this helps.
- Jeff