Why specifically the atmega16? The AVR suite of uC's is vast and there are many choices to choose from. For you original question, I would recommend collaboration with the guys at
http://avrfreaks.net for any questions that may stump you. As for material you can start with an instructibles to get going right away.
http://www.instructables.com/id/Beginners-Guide-AVR-Programming/
Most of the AVR microcontrollers have very similar characteristics and you can easily choose say an atmega328 and apply most of the same principles to each. If you are programming in C, there will be almost no difference in your code.
What language have you decided to start learning with?
Chris