I find that my productivity is roughly linear in the amount of screen real estate that I have to work with. I had always laughed at people who used multiple monitors-it seemed incredibly wasteful to me, in that you cannot read text from much more than a postage-stamp sized bit of monitor at a given time anyway, and most online media looks terrible at large size. I write this on the 2nd from the left of my current 4-monitor setup, and I am seriously considering upgrading to 5 or 6. Much like a restrictive programming language or other poor tools, small screen real estate diminishes productivity by causing you to work around it unconsciously. It takes only a few seconds to move between, say, Visual studio and a browser, but that few seconds is enough of a hindrance that I find I will try something instead of going back to the documentation. Experimentation in place of documentation works fine in a dynamic language like lisp, or scheme, or python, but in C, it is a killer.
I find that I cannot usefully work with N monitors for N keyboard/mouse combos. I need one set of controls and a lot of screen. The way I do this now is with a dual-head windows box and a dual head linux box, communicating by x2vnc. I have considered getting an X server on the windows box and using x2x, but I have not seen a significant advantage to doing so.
One difficulty I faced in getting this configuration working is that I had to get Gentoo working with a 2-head ATI card. This turned out to be challenging. I found an excellent FAQ at gentoo howto dual monitors. If anyone finds this useful, I'd love to hear about it.