In my current job, I have the following personal machines:
- MacBook Pro (15")
- Debian Woody desktop
- Windows 2003 Server on a 1U rack mount box (this one isn't on my desk, obviously!)
I use the macbook as my laptop/business stuff machine. It does email, web, some coding, etc. I use the Linux desktop for the majority of my testing and for a lot of my coding. There's some wiki maintenance and other browsing there as well. I use the Windows machine for Windows testing (CIFS shares, Active Directory, etc).
The development environment here is pretty much entirely Linux. The dev leads all have macs, and there are a few Windows and Solaris test machines, but otherwise it's all Linux all the time. The business side uses Windows exclusively.
Pros and Cons - Mac
The Mac has a lot going for it and has some significant downsides.
- Easy to use. Most of the programs I install just plain work.
- UNIX underpinnings make interacting with the dev environment easy. There's no extra SSH client to install or other utilities to configure, like there is on Windows. I just open a terminal and I have bash on a mac that works as well as bash on my Linux machine.
- Pretty. The mac UI is pretty, right down to the Dashboard.
- Battery life. The mac battery lasts at least twice as long as any battery in any Windows or Linux laptop I've ever had.
- Tendency to hang. This is worse with Leopard than it was with Tiger. I've noticed that in particular when I have stale NFS mounts, Leopard will hang to the point that I have to hard reboot the machine.
- Less than ideal interaction with Windows. This is true in particular of interaction with Exchange. For example, I get meeting notifications as emails with attached .ics files; it works pretty well, but it is an extra step. I also have trouble with line endings.
- Office isn't as good as on Windows. I'm a power user of Word and Excel in particular, and the mac versions of these programs just don't measure up. In Word formatting gets a bit odd and margins in particular don't line up the same way. In Excel some calculations don't come across at all, only the results of the functions. (For the record, Pages and Numbers are even less compatible.)
Pros and Cons - Linux
The Linux machine I use is a good workhorse but takes a lot of fussing.
- Incredibly configurable. If you want to configure it, you can. I can tweak this thing until it's completely and utterly mine.
- Doesn't believe in crashing. This is definitely my most stable computer, even though it's a test machine and I do some pretty weird things to it.
- Time-consuming. All that configuration is great, but I find that I have to do a lot more configuration to get programs to run well, and that takes time.
- Sensitivity to hardware changes. With my Linux box, changing hardware is quite likely to require a new driver or something. It's definitely a lot less plug-and-play than my mac or my Windows machine.
Pros and Cons - Windows
I should note that this is Windows server for testing, not a Windows client OS.
- Some things just can't be done on other environments. I just can't test the behavior of Windows Explorer on Linux or mac. That alone will keep me on Windows.
- Very popular with our clients. A large chunk of the market is Windows client machines, and that has power.
- Good hardware compatibility. I can swap out hardware on this box and rarely have to get my own drivers or other configuration changes.
- Doesn't fit well into our dev environment. Many of our helper scripts, etc. are shell scripts and simply won't run on Windows (without cygwin or the like). There are extra hoops we have to jump through here.
- Logging and errors aren't as clear. It's harder sometimes to dig in and figure out what's going on because Windows logging is a bit lighter than on Linux or mac in many places.
I'm not a platform zealot; I'm not going to start a flame war favoring mac or Windows or Linux. I will say that each OS is very different and each one works better in some environments than in others. There's a lot of talk about context-driven testing these days. Let's try context-driven environments for a while.