The controller can be programmed in different languages. Most used are Assembler, Basic and C. I used C as it matches my needs the best. I was used to C ten years ago and was able to revive some of the knowledge (well, only some ...).
To write your program, I recommend Eclipse with the CDT plugin. Get eclipse here http://www.eclipse.org/
and the plugin here http://www.eclipse.org/cdt/
For compiling C language to AVR microcontrollers you will need a cross compiler. Lucky as we are, there exists a port of the famous GCC. It is called WinAVR and can be found here http://winavr.sourceforge.net/
A very good tutorial on how to program AVR controllers with WinAVR is here http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
. Sorry, its in german but you may find thousands of tutorial pages on that topic in your language, if you search for them.
After having compiled your source, you have to transfer the hex file to the controller. That can be done by connecting your PC to the circuit using ISP (in system programmer) or using dedicated programmers. I used a dedicated programmer as it makes the circuit slightly easier by saving some wires and a plug. The drawback is, that you have to swap the controller between the circuit and the programmer every time you want to update your software. My programmer comes from http://www.myavr.de/
and uses USB to connect to my notebook. There are many others around and you can even build it yourself.
For the transfer itself I used a program named avrdude which is part of the WinAVR distribution. An example command line may look like this:
avrdude -F -p t13 -c avr910 -P com4 -U flash:w:flickled.hex:i
Attached you may get the source and the compiled hex file.