Here are the specifics.
1. Create a positive environment.
For me, this means child-proofing so my child is free to explore. The easiest way for a child to have a good experience is to simply be able to explore without limits because there’s nothing dangerous around. So, toys should be age-appropriate (that means no toys that they can take apart), books should be board books only, knick knacks should be put away, stereo equipment etc. should be behind doors/guards.
For others, this means helping their child explore the dangerous things until the urge is out. (That's easy to do with one, harder to do with more than one because your attention is divided.) Sometimes if you hold a fragile object or help them hold fragile object, that's all it takes. I also taught my kids a 'one finger' touch. It's easier to keep it controlled and gentle. We spent a lot of time exploring the neighbors' Christmas decorations with one finger.
IMO, every child should have at least one room where they are free to explore. Our kitchen was one of these rooms. All drawers except 2 had strong latches on them. The 2 free drawers had pans in them. One cupboard was all theirs, full of tupperware and plastic baby bowls and cups (and a few pans). The other room was the living room.
2. Make sure you fill up your child's cup of attention daily.
If they get positive attention from you, they're less likely to act out just to get attention. I'm a firm believer in 30 minutes or so of focused attention where the child takes the lead in the play. When things are getting rough, this helps restore our connection. (This is why I love Playful Parenting -- it's got a great explanation of why this is so important, plus good tips for restoring the connection at difficult times.)
3. Tell your child what they can do.
Don't phrase things in the negative ;) . Phrasing things positively teaches your child what is acceptable and gets their mind off what they shouldn't be doing. So, instead of saying "don’t jump on the couch" say "come jump on the pillows". Instead of 'don't stand up on the chair' say 'sit down'
4. Remember where you child is in development.
A young toddler has a short attention span. A toddler has little impulse control. Toddlers have a hard time stopping a behavior once they've started it. A toddler isn't great a using words when they're upset. Thus, actions speak louder than words for many reasons with a toddler. Toddlers are physical and tactile learners. They need to explore things physically and with their hands. Toddlers learn by repetition. They aren't doing this 85 times in a row just to frustrate you. My 6 year old does not see the world in black and white merely because she wants to rule the universe (though she'd really like to be Queen of Everything). My 9 year old isn't refusing to have a snack on the bus because he's being contrary. He's in a stage where you do not break the rules. Period.
5. Decide whether a behavior is really worth stopping.
Do I really care if my child takes ALL the puzzles off the shelf? Is it OK for my kids to slide down the stairs on an old air mattress? (They're pretending racing the luge.) Why shouldn't my kids ride their scooters in the house? (OK, they can't do it while I'm cooking dinner, but other times, why not?)
6. Find a way to honor the impulse if what they're doing isn't safe/acceptable to you.
Find something that the child CAN do that’s not the forbidden activity. So, if she wants to jump on the couch, put pillows on the floor and have her jump on those. If he wants to play in the toilet, set him up at the sink with a step stool, some bubbles and a few utensils.
If there just isn't a way to do this, then redirect to something they can do. For toddlers, sometimes just going to another room helps. For older kids, it's more effort.
7. Gently help them comply.
Under 3s are physical learners and sometimes need to be physically shown what you expect. Handing them the toy you want them to pick up. Gently helping them put their feet on the floor might be more effective than telling them 5 times "feet on the floor".
Also, remember that kids listen better if you go over, get down on their level and gently touch them. That act of connection makes your words stand out.
In other words, it's impossible to discipline a toddler sitting on the couch. You really do have to get up and do it.
8. Warn of consequences
Tell your child what to expect. "Please drive that truck on the floor. Throwing is not safe. If you don't drive it, I’ll have to put it up to keep us safe."
When you're thinking of a consequences, keep them related to what the child is doing. Timeout for throwing spaghetti on the floor doesn't make much sense to me. Better would be to have the child help pick up the spaghetti. (And yes, sometimes that meant me putting a single strand of spaghetti in my child's hand, and walking with them over to the trash. When they were young toddlers, that single strand is 'helping'. At 5, my dd could clean up after her own spills.)
9. Enforce consequences
This must be done consistently and calmly. Enforcing it after telling them three times "if you throw that (again), I’ll take it." only teaches them that you don’t mean what you say, or that they've got 3 chances before they have to listen.
You also need to remain calm. This is the absolute hardest part for me. If I'm reacting from a place of anger, I'm not disciplining (i.e. teaching). I'm more likely to punish than teach.
What are appropriate consequences for a child this age? First, try to 'help them' gently comply. If that doesn't work, then I apply:
1. Removing the toy if they’re not using it correctly.
2. Removing the child from the situation.
For kids under 3, time-outs don’t do any good. (for older kids, it's also highly debatable.) Young children don't understand why they're in 'timeout', and they don't link the punishment (which happens after they've done something) to whatever it was they did.
Just removing them to another location is generally enough. So, sit them on the couch or a chair and say calmly, "keep your hands out of the toilet. it’s dirty." Then walk away (and close the bathroom door!). They’ll get up right away, but that’s OK. If you're really on your game you can add "Let's go play in the sink."
3. Remove yourself from the child. For example, if they're hurting you. So, if they hit, gently take their hand and say calmly "don’t hit. that hurts. You must be gentle (and demonstrate gentle)." If they do it again, then get up and say "Don’t hit, that hurts. I won’t play with you if you hit." and walk away for a very short time.
Dd liked to bite when nursing. The first time she did it, I said "no" and stopped nursing for a bit. The second time in the same session, we were done. It took her about 3 days to learn not to bite while nursing. (And then she went through a period where she'd be tempted to bite, but would shake her head 'no' while nursing. While funny, that was actually much more painful as she'd take all my breast tissue with her as she shook her head firmly side to side.)
4. If you’re losing it, then it’s probably best to separate yourself from your child until you’re calm enough to deal with them reasonably. I had to do this on some long days with our both our kids. I'd plop them in their cribs/rooms, and after 3-5 minutes, I could deal with him again.
After our kids turned 3, we do timeouts in our house on occasion. Almost always it's when things have gotten out of hand we need to separate to keep ourselves sane/safe. If my kids hit, they were levitated to their rooms until they calmed down. When I'm tempted to spank my kids, I immediately leave the room. (I took a walk down to the corner and back during chore time last week because dd had really set me off. My kids now stomp to their rooms and slam their doors when they're mad. Huge progress.)
Sometimes we send a child to their room for interminable whining. If you've been offered a hug, a cuddle and an alternative to whatever is making you whine, and you're STILL whining or screaming, it's time for you to go be by yourself.
My kids often feed off of my negative energy, so a separation (either me putting myself in my room or putting them in their room) was effective in breaking the cycle.
If you can't stop the negative energy, then it may be time for some outside help (counseling) for you. OP, it sounds, in all honesty, like that 1% of the time your mom was abusive. It doesn't matter that she was great 99% of the time, the 1% keep you on edge, stressed you, terrified you, and gave you some real triggers in terms of what you expect from discipline. My parents were not abusive. They did yell sometimes, but I got spanked exactly once in my life. But I still find it hard to resist the urge to haul off and whack my kids when I'm really upset (and usually stressed/hungry). If I, with my non-abusive upbringing, have those urges, how much harder is it to stop when you've not had any good modeling? Learning to deal with your own anger might be a real gift to give to your son.