I started programming PICs with a JDM programmer purchased from ebay. I'm fortunate that it worked, but it was still a pain to use. Program the chip. Pry the chip out and put it in my dev board. Then pry it out and put it back into the programmer. IT leads to a very slow development process. Any change in the code requires a minute or two of screwing around to get it into the chip.
Then I graduated to a USB programmer from Sparkfun. It made life easier ICSP but it had some nasty habits. Its power supply and the dev boards power supply weren't happy playing together, so the ICSP cable had to be disconnected and the board's power supply reconnected for any code change. And the programmer's USB interface was flaky. Any time it hadn't been used for a while, I'd have to reboot the computer a few times before it would be recognized. Usually, deleting the drivers, rebooting and re-installing made it work.
Finally I got the PICkit 2 from Microchip. Plugged in the USB cable and it just worked. Learned about the magic red button. Load the hex file, press the red button, and the PIC is programmed. Change the code, re-compile, press the button. Fast. Simple. Easy. I could do this 5 times in the time it took to program the PIC once with the JDM.
Somewhere before the PICkit 2, I tried bootloading too. That works ok, except you need a different loader file for a different clock speed, and in a few rare cases, the bootloader somehow interfered with my code. But once I got the PICkit, it was easier than even the bootloader, so it's what I always use now.
I agree that getting a programmer to work is a real hurdle to programming. It's not much fun to invest a lot of time and energy with no results! You need to get quickly to the point where you can make a LED flash. control a motor or make some noise. Once you have a foot in the door, you can have some fun seeing how things work or solving the problem you set out to solve. That's why I made the original recommendation. The original poster is not the only guy who's been down this path.
Jon