I would like to know the difference between the random oracle model and
the non-programmable random oracle model. What is the difference?
When a random oracle is used in proof reductions, it is often programmable. I'm not sure what is your context but perhaps the following articles on different programmability modes can help: ftp://ftp.inf.ethz.ch/pub/crypto/publications/FLRSST10.pdf