How to program Micro-controllers for beginners
My recommendation is use the ATMega168 (and save that datasheet to your computer, you will need it often). The WinAVR package is open source, Atmel Studio is free from their website, and Sparkfun has an excellent set of tutorials on putting an AVR micro on a breadboard. Instead of building your own in circuit serial programmer, I would buy one. That will allow you to use the GUI programming facilities in Atmel Studio, instead of needing to worry about AVRDude, which is not something beginners should be doing in my opinion. 

Microcontrollers are commonly programmed in C/C++ or assembly. Start off working in C. There is sample code for anything you can imagine, and it's more beginner friendly than working in assembly. What you can do, is look at the disassembly after compilation. If you want to do that, turn the optimization off, or you might get confused by what you see. Once you understand the processor architecture, you can write your really high performance stuff in assembly if you need it. 

I wouldn't normally advocate it, but another option is buy an Arduino board, probably an Uno to get started. It has an ATMega328 on it, which is just a 168 with more memory. I develop my stuff in Atmel Studio, then use my ICSP and Arduino Uno to program a fresh AtMega168 or 328, then drop the programmed chip onto the PCB. It's fast and easy to reprogram.