I have Win7 32-bit Professional and I want to start learning to program and skin WordPress. My hosts will likely be LAMP, so I was going to run Win versions of those tools locally. Should I just get a linux VM, or will I be able to transfer what I do from the Win environment to the *nix hosting?
I'd recommend setting up XAMPP. It will allow you to run an Apache/PHP/MySQL environment on Windows. You shouldn't have any problem moving things over from your local XAMPP setup to a LAMP setup with your host.
Windows stack of Apache / MySQL / PHP works just fine. The one scenario you might need Linux VM is to test Linux-specific tools (I did it when tinkering with XHProf which sadly doesn't have Windows build).
I recommend to go over this question (a lot of good stuff covered):
When I was using Windows, I thought XAMPP was the best and easiest way to get a *AMP environment.
In addition, you could use VirtualBox to create a Linux VM that more closely replicates your target production platform, which could be used for staging, or as a way of testing any changes (not necessarily limited to WordPress changes) without messing up your actual VM
I recommend you follow the Ricocheting tutorial - I found it years ago and keep referring back to it whenever I set up a new dev system. It is current, and kept updated.
Doing it this takes more work, but you will learn more about server set up and configuration.
For my Windows 7 Partition, I use EasyPHP, the main reason I use easyphp is that it is a WAMP server, but it's also portable (I keep a copy on my main flash drive so I can develop on any windows computer (and some Linux computers, it works with Wine too).
One of the nicest features EasyPHP has is that you can download module versions which have EasyPHP plus the module installed (the modules range from wordpress to drupal and more). The module version have everything already setup, so all you have to do is run it and go.
What I like best about EasyPHP is that you can place it in any directory (so I've got it installed in c:/users/don/localhost), instead of having a predetermined location for it.
There is one little problem with the current version (at least for the main one, don't know about the modules), which is that by default it uses port 8888, so you need to open httpd.conf and change all copies of 127.0.0.1:8888 with 127.0.0.1:80 so that you don't need to type the port to get to the site. (speaking of the conf file, Easy also keeps all the conf files in one folder so you don't need to hunt them down when you're looking for them).
Another potential downside to EasyPHP is that it doesn't start on login. This is an easily fixable thing though, because you can just add it to your startup list.
There is generally no difference between a lamp server and a wamp server besides the operating system, they've both got apache mysql and php. I've found no differences between using EasyPHP and using self setup server on my linux installs.
I have noticed with other simple WAMP servers (like WAMP and XAMPP) that they quit frequently, and unexpectedly, and occasionally just stop working completely and need to be reinstalled (at least they did for me, when I was running vista). I don't mean to knock on other answers, but I haven't had good experiences with other wamp servers.
I've written up a little article on setting up a local *amp server for my school's technology club if you're interested. It uses EasyPHP for the windows version.
The best platform I found is to use Uniform Server, as it doesn't use any registry entries and is maintained fairly well. It also had a virtual host option script that will add the subdomain vhost entry AND append your subdomain to the windows HOSTS file for you.
You get the latest apache, php, mysql and a bit more with it. (It's got a mail server that allows php (and therefore wordpress) to use your hotmail or gmail and the like to send mail.) It also seems to be the best maintained, with the most current versions of the included softwares. (Also it's httpd.conf file is configured more cpu-friendly than others I tried.)
I also put the path to mysql in my windows system path, so I can use mysql from the command line. That way I can put my live database onto my testing server with backing up from the shell:
mysqldump -u dbusername -ppassnospace db_name > dbsavefilename.sql
Then I download the db file. After I create a local db and user on my local phpmyadmin, I restore it via the windows command line:
mysql -u dbusername -ppassnospace db_name < dbsavefilename.sql
Then it's a matter of adjusting wpconfig.php to use the local data, and then going in on the local phpmyadmin and changing the siteurl and home fields to point to the new local working domain. I will always set things up so that clientdomain.com is clientdomain.local so I don't forget which I'm looking at. If you hunt around the Codex, you'll see you don't always need to change these in the database:
define('WP_SITEURL', 'http://example.local'); define('WP_HOME', 'http://example.local');
Oh, and lastly, do yourself a favor -- when you set it up on your local machine, take a moment to make a copy of your live wp-config.php and name it wp-config-live.php so you don't lose the settings. You will most likely forget sooner or later, and upload it over your live one.