This post is very old. Please bear in mind that information here might be incorrect or obsolete, and links can be broken. If something seems wrong, please feel free to comment or contact me and I'll update the post.
The quest for the perfect developer PC is a long one. So far, I didn’t manage to find a machine at work which is really optimal for development. Let’s take a look at my current one, and the associated problems. It has a dual-dual Xeon at 3.00 GHz, with 8 GiB of RAM – this is no problem, though I would have been more happy with having a dual-quad running at 2.5 GHz. The issue with multithreading is, that either your app is indeed properly multithreaded, and then you can scale to many cores, or it isn’t, in which case you’re better of with a high-clocked dual core.
Ideally, you would have a dual-core running at 3.5 GHz in one socket, and six 2 GHz cores in the other, with some OS support to pin a thread to the “serial” or the “parallel” processor. Actually, it’s my firm believe that we will eventually end up with such architectures, where you have a few large out-of-order cores, and a bunch of simpler in-order-cores, which all support the exactly same instruction set (so from the developer perspective, there is no difference except for speed). Whatever the future architectures will actually look like, for a developer today broad parallelism is a must have.
What’s good is that the machine has 2 GiB of RAM per core, which allows for some heavy-duty computing. The worst you can have is something like 8 cores and 4 GiB of RAM, because for any reasonably parallel application, you’ll be quickly running out of private, that is, per core, memory.
The graphics card is a pretty nice GTX 280. Right now, I’m far away from doing any serious graphics development, and the card is more than sufficient. Just to give you an idea, the scenes I’m drawing consist of 20k triangles or so, and maybe 50 MiB of textures, while the card is able to run Crysis at 1920×1200 with maxed out settings smoothly, pushing something in the order of 1 million polygons per frame. However, for heavy-duty graphics development, I would like to have something in the range of a GTX 295 in it, for two reasons. First of all, you can prototype faster, as you can skip crucial optimizations and get things running quickly. Second, for GPGPU, it’s the same as with the CPU core count for normal multithreading. Having more to see scalability issues early is crucial, especially while developing.
No matter how good the graphics card is, it can be worth nothing without a good screen setup. In my case, I have a 24” and a 20” display on my desktop side-by-side. It’s ok, but I’m not happy with the 24” screen. I have a 22” at home, which is more or less perfect for me, and the pixel density difference between a 22” at 1680×1050 and a 24” at 1920×1200 is pretty small, but I still have problems to put a 24” screen at a distance where I can both read from it without problems, and not getting a headache from it.
The major problem with the screens though is the colour reproduction. The 24” is slightly yellow, while the 20” is more or less neutral. On their own, they would be perfectly fine, but next to each other, it’s simply annoying if you move a window over and the colours change visibly. I may be biased here, having seen Eizo screens. Anyway, a setup with two visibly different screens is nothing I can recommend. If you can, spend the extra money to get screens which reproduce colours truthfully.
What’s the perfect development machine for you? I’m really curious what points are important for you, and what experiences you have made. I haven’t touched topics like fast hard disks, because I’ve yet to see a machine which fast enough drives to make a difference, so I’m really interested in your opinion here. Feel free to comment!
[Update] Just found something on SSDs for compiling, on “Joel on Software” — doesn’t look too promising. Makes me wonder whether a fast disk drive makes any difference at all, if you have plenty of RAM. Anyway, I’m surprised, because compiling seem to be a task which stresses small random reads/writes the most, which looks like a perfect match for SSDs.