edit: 5 minutes (and -$10) later, I now have a portable third monitor that I can bring with me anywhere in the house. Plus I can easily test my iPhone app in the simulator using real touch gestures, without building to a device (not every gesture is working, but this is still awesome).
This $15 app remembers window positions and sizes for each application and display setup (and even combos with multi monitors). It'll even restore window positions when you connect/disconnect external monitors.
I have had a few issues where it can't figure out TotalFinder and Terminal (because of the tabs) window positions and sometimes it can't figure out which Chrome window is which, but overall it's made switching between external monitors a whole lot less painful.
I have co-workers who are the exact opposite; 3 or 4 screens, it's never enough, but I just feel like it's not necessary for me any more. You can only look at one thing at a time. Whether switching your view between monitors, or switching between programs, it's basically the same thing - the difference is, I can do the latter anywhere, and be just as productive in a coffee shop or on a plane.
Exceptions would be monitoring a large number of logs, or programs that require large GUIs (Photoshop, music sequencers). There, screen real estate is important. But for programming? Not for me.
Not using a monitor, I also don't use an external keyboard or mouse. I have an unused monitor on my desk at work I do no plug into.