If you really want to learn about microcontrollers, then ditching the arduino and all its layers that hide the details from you is necessary. A PIC 16 is certainly one bare microcontroller.
You definitaly want to use MPLAB, at least for debugging. Using anything else makes no sense, as MPLAB is free and officially supported by the manufacturer. Microchip now also has a full line of compilers that are free, with the only difference from the full versions in that some optimizations are turned off. That should be of no consequence for someone learning and experimenting, and you get to use the same compilers most other people are using and that therefore have the most eyes catching bugs.
However, if your aim is to really learn something, you should do a few projects in assembler. This will force you to learn the lower levels and open your eyes to what really goes on at the hardware and instruction level. That insight is very useful even when writing higher level code, and you won't be reluctant to implement a key module here and there in assembler as it may be appropriate.
No, you don't need to, in fact you can't, use SPI, UART, or I2C to program the PIC. The only way to get a new program into a PIC that doesn't have special code loaded for that purpose (a bootloader) is to use the external hardware programming interface. Electrically, this means connecting to Vss, MCLR, PGC, and PGD. It can be useful to have the programmer also connected to Vdd, but not necessary for this chip as long as the Vdd level is known and the programmer adjusted accordingly.
The low level hardware interface is quite simple. PGD is the data line, which is sampled by the PIC on the falling edge of PGC (the clock line). To get the PIC into programming mode in the first place, a special 32 bit key is clocked in relative to specific edges on MCLR (although see note below regarding high voltage programming).
The higher level protocol gets more complicated. Most things are done with 6 bit commands, some of which are followed by 14 bit data words. You have to read the programming spec carefully. Note that the programming spec is a separate document from the datasheet. Go to the product page for your particular PIC on the Microchip web site, and you will find a link to the programming spec in the documents section.
Added about high voltage programming
These kinds of PICs have two ways to enter programming mode, high voltage (HVP) and low voltage (LVP). The high voltage method requires raising MCLR to between 8 and 9 volts and to keep it there during programming. This method always works, regardless of any possible data programmed into the PIC.
The low voltage method of entering programming mode starts by driving MCLR high, then low, then clocking in a special 32 bit key sequence using PGC and PGD normally. The part will enter programming mode upon the correct key sequence, and will stay in programming mode as long as MCLR is held low.
The low voltage method can be disabled by one of the config bits. However, the erased state of the config bit allows low voltage programming, it is shipped from the factory that way, and this config bit can only be set to disallow LVP if programming was entered with the high voltage method. Therefore, for LVP to not be enabled, all the following have to be true:
- The PIC was last programmed with a HVP-capable programmer, and the HVP program entry mode was used.
- The HEX file programmed into the PIC deliberately sets the LVP bit in config word 2 to the non-erased state.
Since disabling LVP pretty much requires a deliberate action and the right programmer, it is likely still enable. If it was deliberately disabled for some strange reason, then you have to supply 8-9 V on MCLR to get the PIC into programming mode at least long enough to perform a bulk erase (which re-enables LVP).
Best Answer
The processor on the BeagleBone is not a microcontroller, but rather a microprocessor (the Sitara AM3359 from Texas Instruments), which doesn't have non-volatile memory on the processor itself, but rather tries to load programs (such as an OS) into RAM via a communications interface (UART, USB, Ethernet) or from an external memory (FLash or memory card). The initialization/booting process for this processor is described in detail starting at page 4667 of the technical reference manual.
It seems the latter (booting from a memory device) is the case for the BeagleBone, which means you can "program" the BeagleBoard by changing the content of the on-board Flash (eMMC) or by forcing it to boot from the microSD card. It's not very clear from their documentation how easy or hard it is to create your own memory images (for SD card or the eMMC). I suspect it's not trivial.