Hi,
I agree: coding with no hardware is not a good learning environment.
A couple of books I've used are good:
Beginning C for Arduino, Second Edition: Learn C Programming for the Arduino
DISCLAIMER: I am the technical editor of that book; I don't make any future money on it!
Beginning Arduino (Technology in Action)
I think this is the best overall Arduino book and lots of programming examples and projects.