If my understanding is correct, the term to "program a key" is very misleading.

I'm primarily talking about transponders for immobilizers. Remote controls might be different, though I don't see a reason why the principles should be different. 

All car key transponders that I have read about are passive and "dumb", and all that one of these can do is transmit the ID that it was given at birth. When you buy a new key with transponder, and you want a car to accept that transponder, you need to tell the car that it should accept the key with this specific ID. 

Even if you imagine a car key with a much more complex transponder that does a digital signature, similar to the chips in credit cards, you will still need to instruct the car to accept that digital signature, and I see no reason to make any change to anything in the key transponder. 

So what you need to change is some settings in the car electronics, not anything in the key. Therefore "programming the key" is very misleading. 

A few ideas for better terms:

 - Pair a key transponder with a car
 - Attach a key transponder to a car
 - Add a key transponder to the cars list of trusted key transponders

The term "cloning a key" refers to making a transponder, that responds with exactly the same ID as an existing transponder. In that case you obviously change something in that key, but in almost every tutorial I have watched, this is *not* what they mean, when they talk about "programming a key". Also cloning of keys seems like a much less used practice than "programming" (ie adding new keys to the car). 

Like I said, I could have misunderstood something essential, and I'm writing here to find out :)