USB Programmer: There is probably no better and few cheaper programmers then the one that Microchip sells inside the PICKIT II development toolbox. It is a small (like 1 by 3 inch by 1/3 inch tall) module with a mini USB connector one end and a 6 pin Berg type socket the other. It can either run stand alone given any hex file (great for PB and PBP), or integrated right into MPLAB if that’s your choice. Does ICSP very fast and cleanly, and can also run your app if all it needs is the 5V USB power at a few mills (probably up to 100 mA but check as I don’t have that spec at hand).

Microchip on the USB: I recently had a run-in trying to get a PIC18F4550 device to work on my USB port. I have some demo code it runs (see the USB section here) nicely. On most computers it works fine, though on my home system it comes up with a USB device error and doesn’t run. When I did go and buy an additional USB card it worked just fine thru that USB port on that same computer, so it is a hardware and not a software issue.