One of the most important things you must have to get into microcontroller programming is a good programmer. AVR microcontrollers are programmed using its SPI port. So the simplest AVR programmers are the direct parallel port or serial port programmers, in which SPI protocol is bitbanged using the serial port or parallel port. But modern PCs and laptops does not have parallel ports and serial ports. They only have USB ports. So here comes the role of USB based programmers. One of the simplest USB based programmer is USBASP. It uses an Atmega 8 and a few passive components, and is well supported in Linux, Windows ans Mac. More details of the USBASP can be found here.
A USBASP needs an Atmega 8 burned with the USBASP firmware. So now the problem arises, how to program the Atmega8 of the programmer when I am not having any other programmer. We have to look out for a simple Serial port or parallel port programmer to burn the firmware.Also we must set the fuse bytes. A simple AVR parallel port programmer is the dapa (Direct AVR Parallel Access). The power supply is not shown.
The firmware can be burnt using the program uisp. Once the firmware is burnt and fuse bits set, we can use it to make USBASP. The open source program avrdude can be then used to program other AVR microcontrollers using the usbasp. I did USBASP on a piece of perf board