The reason we program the Flash memory is so that the microcontroller can receive and store the program. Only then can the program be executed by the microcontroller.
Programming it into flash has the advantage that once the microcontroller has been successfully programmed, even if power is then shut off from the microcontroller, either intentionally or accidentally, the program will still be saved by the microcontroller. There are various types of flash programmers that you can buy from elprotronic.com/collections/8-32-bit-custom-mcus.
So if we restarted the power to it again, it would still have the program and could execute it. This is how a computer works. Even if we turn it off and restart it again, the operating system will boot up each time. The OS is installed on a nonvolatile memory, so it's permanently etched into the memory of the computer's CPU.
So now you should know why in order to program a microcontroller, we need a flash programmer. We need a way to program the flash memory of the microcontroller so that it can store the program that we want the microcontroller to execute.
A flash programmer is a pretty specialized type of hardware. It normally is specific to a family of microcontrollers, because microcontrollers have different hardware architectures. Thus, if we're dealing with AVR microcontrollers, we must have a specialized flash programmer that deals with AVRs.
If we're dealing with PICs, we need a flash programmer that deals with PICs. And depending on how much the architectures of microcontrollers differ within a brand of microcontrollers such as PICs, we may need different flash programmers for each type of PIC chip.
You can always do some research into what type of flash programmer is needed for your particular microcontroller in hand.