The biggest key to realistic drum programming is understanding the basics of drumming. Start with learning some basics:
Ghost strokes - http://www.youtube.com/watch?v=n41IaVgtryI
Single Paradiddles - http://www.youtube.com/watch?v=oQIf5gObYLE
Poly-rhythm grooves - http://www.youtube.com/watch?v=mn4spSM5RF4
Using bass drums in Fills - http://www.youtube.com/watch?v=nQ6QzYKn6Yg
Next, choose a sequencer editor that is conducive to detailed work (I prefer Fruityloops, but garageband works too). For very detailed work, I prefer using the Protools midi editor, as you can edit beyond bar sub divisions and go straight to the sample level to move notes around (useful for flams and humanizing).
Never re-use the same pattern exactly, unless the song specifically calls for it. Always change something, even if you cut/paste patterns. - Add in a ghost stroke, change a hi-hat velocity, or some other velocity on the snares, etc.
Never use max velocity for individual instruments all the time. Save the max velocity hits for when you actually need max velocity dynamics. Sure, that heavy part might sound heavier with the snare velocities cranked the whole time, but it'll sound a lot more realistic if you save those hardest hits for special areas (end of drum fills, or accenting specific hits). Use small velocity changes.
For fills, remember that one hand is generally not going to be as loud as the other (16th note fills, make the "left hand" slightly lower in velocity than the "right hand") - same holds true for flams or 16th note hi-hat patterns
Crash cymbals - don't follow a full fill (left to right toms) with a crash on the left side of the kit....place the crash to the right, where a real drummer would. Also, don't continue programming hi-hat , or ride cymbal work right up until when the crash is needed. Give your virtual drummer a chance to reach the cymbal
Build your patterns the way the best drummers do - save the craziest material for later in the song - always lift the next part a little bit. So, 1st verse may be a bit simpler, second verse might be a little more intricate, etc. This can be something as simple as changing the hit hat pattern a little, or being a little more creative on the ride cymbal, or maybe using more ghost strokes.
When importing your midi into a DAW, use your DAW's quantize/randmize tools. Randomize the quantize settings to a 64th note and let it pull some notes ahead, or behind the beat a little. Velocity randomization can also help here.
Use good samples! A great drum programmer can make most anything sound realistic, but a good sample set helps a LOT. Something with at least 4 distinct velocity samples per instrument. If the samples have a round robin sample change (Such as Easydrummer from toontrack) then that also helps a lot.
COMMENT YOUR THOUGHTS BELOW!