To me you can divide kids into before they have impulse control (under 4) to when they begin to have it (4-8) to when they have it (9+). Before they have it it's my job to prevent disasters.
I dunno... my 2yo definitely knows when he's doing something naughty. I can ask him if he should be drawing on the wall, and he'll say "no, on paper". He's definitely learning responsibility already for his actions.. I'm not going to take responsibility for things he knows full well are naughty. In fact he looks at me waiting to get in trouble when he knows he's doing something he's not allowed to do LOL. I can ask him what the consequence of doing something is.. eg. he has a tin whistle/recorder type thing that he plays.. but he often hits things with it.. I ask him what happens if he hits things with the whistle, and he says 'go room'. Going to his room is the latest punishment that works LOL.

We have smacked. I agree with (can't remember who said it) that we smack when he already knows he shouldn't be doing something, but not for things he wouldn't have known were dangerous or naughty. But punishments have changed as he's gotten older, and no doubt his 'currency' will change many times yet.

Each child is different. We haven't entirely ruled out smacking as an option that's for sure, but we do try other things. We always have a chat & a hug after whatever punishment is administered, and he's very good at saying sorry, which is lovely. He spontaneously says sorry now when he's hit or hurt someone, even by accident, (not all the time, but still!) so I figure how we're handling him can't be all wrong

Oh - one thing I wish I'd never started is counting to 3. LOL. Now he doesn't do anything until I'm up to 2 1/2!! If only I could shift that to doing it when I ask in the first place! LOL. I guess I should be grateful it works.. I get cranky with DH when he gets to 3 and then doesn't do anything about it.. I said you have to follow through if you get to 3 or it undoes the whole thing! heheheh.