You can program an AVR microcontroller easily with an existing Arduino as the programmer. AFAIK there's no easy way around SMD packages. The last time I've gotten them, I have to solder programming wires on them before placing it on the board. If you have space, you can also wire the ISP pins to a connector on the board.
In any case, here are the steps to program your chip, whether DIP or SMD.
- Upload the Arduino ISP Sketch to your Arduino board's MCU.
- Wire up the Vcc and GND, and the SPI pins (MOSI,MISO,SCL). (The wiring is actually described in the comment section of the sketch. As for the pin out on the ATmega328, go to page 3. You can find similar datasheets if you're using other MCUs.)
- Write your code
- Click "File>Upload using programmer" or just press Ctrl + Shift + U.
I think most AVR MCUs come with an internal calibrated resonator, but if you want to drive it at a higher speed (16MHz/20MHz...) you will need to connect the MCU to a crystal oscillator. As always, refer to the datasheet. ;-)
Here's another link you can refer to: link
Hope this helps.