The most accepted definition of firmware is something like, programming stored in 'memory which cannot be modified during run-time.' This kind of memory is called 'non-volatile' memory. It's the opinion of the author and several other firmware engineers that this definition, although true, is lacking. It only conveys two things.
Firmware is the software that engineers use to control or communicate with electronics. It's typically embedded in a device or 'thing'. Think of it as the bridge from 'soft' software to 'hard' hardware. How did we get here?