Program memory (ROM) is memory where your code/program (firmware) is stored. Data memory is RAM where variables exist and RAM is used during run time as a scratch pad.
Programme memory is where your programme/firmware will be stored and can can be accessed only by the programmer (burner)
Data memory is the EEPROM builtin the microcontroller, for saving some parameters, calibrations etc.., . This memory can be accessed by your programme and also by your programmer.
These two memory have different write/read cycle and also diffrent access time.
Hope this help you.
Now, we also can use Programme memory ( Flash technology ! not ROM) to store or read datas by the application program
(wich is also inside the flash Memory
You also have EEPROM memory (MCU internal or External device, to write or read data
when programming the device or by the application program...
data remains into the EEPROM , even power is off.
RAM data disappers when Power is OFF.
see also FRAM, NVRAM ...etc..