A virtual machine is the emulation of a computer within a computer. This can be done at the process level, like with a Java virtual machine, all the way up to the system level, like with VMware Workstation. Virtual machines work by intercepting instructions meant for one type of architecture and translating them to the architecture of the host machine. Then, when the host architecture processes the result, the virtual machine translates them back to the visualized architecture. While this, by its very nature results in slower operations, it has a lot of benefits like being able to easily create and destroy machines and run machines in a protected area that won't affect the host machine.
I became aware of process-level virtual machines because of the Java programming language, but I didn't know about full-system virtual machines until I saw Virtual PC up and running in the early 2000s. After I played around with it for a while, I realized the strength of virtual machines. I continue to use virtual machines primarily for using old software and playing old video games, but I also use them frequently for work both for running versions of the Linux operating system for Web projects, and because they're so convenient for testing the software I write.
There are a large variety of virtual machine software, but these are the ones that are important to me. I find VMware to be the best, but VirtualBox has the benefit of being totally free.