Veteran Les Ferdinand headed his first goal for Reading from Nicky Shorey's corner to put the home side in front.
But the impressive McSheffrey cut inside to rifle in the equaliser before Trevor Benjamin set up John to find the target with an acrobatic volley.
Ian Bennett parried an Andy Hughes shot but Coventry held on, leaving Reading without a league win since Boxing Day.
Coventry boss Mickey Adams:
"We have worked hard all week and played for the full 90 minutes for a change.
"I was pleased with the two new loan signings. I thought Ian Bennett was calm and safe although in truth he didn't have that much to do.
"With Trevor Benjamin you know that what you see is what you get. Now we have two tough home games and that will be a test of our character."
Reading: Hahnemann, Murty, Sonko, Ingimarsson, Shorey, Little (Morgan 74), Sidwell, Harper, Hughes, Kitson, Ferdinand (Forster 63).
Subs Not Used: Owusu, Newman, Young.
Booked: Murty, Ferdinand.
Goals: Ferdinand 8.
Coventry: Bennett, Duffy, Shaw, Williams, Giddings, Jorgensen (Barrett 82), Osbourne (Wood 85), Doyle, McSheffrey, Benjamin (Adebola 90), John.
Subs Not Used: Whing, Staunton.
Goals: McSheffrey 63, John 72.
Ref: G Salisbury (Lancashire).