You want development to match production as closely as possible, otherwise you're setting yourself up for nasty surprises down the line.
I found using a staging environment that is a clone of production to trump developing in a vm. All code goes through staging before production so there is no surprises
No, you want testing to match production as closely as possible.
Much of the time, development can be done in all sorts of ways that needs little connection to the final production environment.