Programming AVR micro-controllers
This document is intended to collect tips on programming AVR micro-controllers, such as Atmel's ATMEGA328P.
Lady Ada provides a tutorial for learning to program AVR micro-controllers, including setting up a CLI-based environment with gcc. 
Instructables includes an instructable on programming ATtiny with the Arduino IDE. It involves adding core files to a 'hardware' folder inside the Arduino>Sketchbook folder. 
Before uploading a program or concurrently, you might need to set 'fuses' on the micro-controller that control whether the chip uses its internal or external clock and other parameters. For example, the Atmel 328P micro-controller comes from the factory set to use its internal clock, so if you load a program expecting to use an external 16MHz crystal and then it seems to run slow, perhaps you didn't burn the fuses yet.
There are many ways to upload programs onto chips. The key is getting the bytes of the compiled program onto the target chip, usually done by an intermediating micro-controller known as a programmer.
Parallel port ISP
One can connect in-circuit-serial-programming pins to a parallel port on the host computer, if available. 
Arduino as ISP
The Arduino community provides a simple way to use an existing Arduino to program a new AVR chip, including burning an Arduino bootloader onto it. An AVR on a breadboard, optionally with a crystal oscillator, is connected by four wires to an Arduino, which takes the program from the computer and programs it onto the AVR.
Arduino forums user Lauszus wrote a lengthy tutorial on using ArduinoISP to program AVRs in general.
Dedicated AVR programmers
- Tiny AVR Programmer
- Meant to program ATtiny45 and ATtiny85, 8-pin DIP controllers from Atmel, but can program any AVR micro-controller since it has female headers to accept wires to any AVR. One of the cheapest programming platforms.
- In the Arduino IDE, choose USBTinyISP from the Tools>Programmer menu.
- Also see Sparkfun's tutorial: https://learn.sparkfun.com/tutorials/tiny-avr-programmer-hookup-guide/
- Atmel branded ISP