Just to program a PIC, many devices can be used. The official Microchip Programmers section of their website lists quite a few devices, most aimed at the professional market. The PICKit3 can program and also do hardware debugging for many PIC IC's, which will save you countless hours of frustration. For more serious work, an ICD3 in-circuit debugger does all of the previous, is faster, supports more devices, and is considered a "production-level" programmer. For really serious work, a RealICE in-circuit emulator does all of the previous plus emulation of most PICs, allowing you ultimate freedom. Of course, that comes with a steep price tag.
As for non-Microchip offerings, there are many. My first programmer was a PICAll parallel-port kit. @Wouter Van Oijen next tempted me with his Wisp programmer, but time was limited and computer failures halted it. Then I used a usbpicprog from @Frans Schreuder for awhile after a new computer build excluded the parallel port. I finally was "forced" to get an ICD3 for fast debugging and that has remained the tool of choice.
There are likely many more, and simply googling "PIC Programmer" returned 1.9 million hits.
As others have said, one of these programmers are needed for programming a blank PIC. Many PICs can be initially programmed with bootloader code however, which makes them no longer require the initial programmer. Instead, once initially programmed with the bootloader, they are connected to either a serial or USB port, and software sends the .hex code to the PIC over that connection. The bootloader's job is to receive that data, and program it into the remaining code space.
There are many links to PIC bootloader info and tools at the Microchip Forum, including AN851 which discusses the nitty-gritty details of how the bootloader works and the serial method for communication.