I have to say, I really like the PICKIT2 from Microchip. The programmer is only 35 bucks, and can program most chips (as far as I know), is powered off USB, and they added some really cool features for such a cheap device.
1) You can load code onto the programmer, then disconnect it from the computer to do in circuit programming wherever your PIC may be (but the device is USB powered, so you will have to feed the 5V into the USB port of the programmer).
2) Allows you to use the programmer as a UART port to send and recieve messages (using the Microchip software)
3) Has a (very basic and limited) 3 channel logic analyzer that can take a 5kHz sample for 200ms, all the way to a 1MHz signal for 1 ms with very basic triggering methods.
Obviously, it is not good at anything but programming, but it is kind of cool that they actually added those features (I got it a few years ago when it first came out, and had to reprogram the programmer to get the new features).
As for the best way to learn assembly, I just went at it the brute force method. Start with the samples that are included (if you get the PICKIT2), read the code/comments, try to modify the code, write your own simple code using the new commands you learned, screw up a bunch, and be glad that these things have FLASH memory! Once you learn the different addressing modes and how to set up the registers, you become less afraid.