I use Eclipse with the AVR plugin to program my Atmega168 and 328s, I've tried AVR studio as well. I kind of wish I had gotten started using AVR studio instead, because using eclipse can be a really... really huge pain. However I really like the way eclipse can zip around to show definitions and macro expansions. Eclipse is free and buggy, but extremely powerful.
The Arduino IDE can also be used to develop ATMega168 code. If you are only interested in developing one specific application this might be a good idea since it bundles a standalone compiler, editor, examples, and drivers for the microcontroller's peripherals in a pretty user-friendly way. Arduino software is free. A physical arduino is not required.
I am a hobbyist so i try to do things on the cheap. It is possible to buy an ATMega from a website like SparkFun with the arduino bootloader on it, which enables serial programming, and then its pretty easy to program that chip as a programmer for additional chips purchased without a bootloader (this is carried out over the SPI port). You then need an FTDI chip to communicate via serial from the PC to the chip. If you have the means, its probably a better idea to just buy an AVR programmer for 30 bucks, be careful about driver installation though, since this is easy to mess up.