Introduction to Reverse Engineering Software
acm.uiuc.edu
acm.uiuc.edu
This was how I learned RCE and I really can't recommend it highly enough. It's a bit steep at first, but you'll quickly get your bearings and be able to do real work.
Just doing a few reversing projects really helped fill gaps in my knowledge of fundamental computing. Debugging, assembly, and low level memory usage are core skills needed for reversing, that for me were not easy to practice doing other types of programming.