"ROM" stands for "read only memory". This usually means that you can read any location in ROM, but you can't change what is already in ROM. (Data in ROM is written when the ROM chip is constructed, or using special hardware operations in exceptional situations.)
"RAM" stands for "random access memory". In practice, what this means is that you can read any location in RAM, and you can overwrite any location in RAM. So this differs from ROM in that you are allowed to write into locations in RAM. (Originally, "memory" could only be accessed in specific locations at specific times. For example, if all of your storage is on a tape, then you can't read or write locations on the tape that are not under the read/write head; you have to move the tape first. RAM was better because the access was "random", in the sense that you could easily access any location in RAM at any time.)
Both RAM and ROM can contain any information that can be translated into in binary form. This can include (a) machine language or assembler instructions, (b) addresses of locations in RAM or ROM, (c) data. It can include high-level programming language function representations as well. Whether we call that data or instructions depends on the context.