What would you consider the ideal computer configuration for software development? Also, what upgrades would you look at for a development computer?
Dual or quad core machine, 10k RPM HDD (preferably two in RAID 1), 3-4 GB RAM, support for 2 or 3 19+ inch monitors. Anything over that is probably overkill (unless you do 3D game development).
Key Performance Components:
- Processor Cores / Speed - Necessary for fast compile times. I have an Intel Core 2 Quad and it has been performing outstandingly.
- Memory - Obviously necessary for overall system performance. I do VS2008 development on XP Pro and 3 GB has been sufficient. You might need more for Vista.
- Hard Disk Speed - Often overlooked, I have found that this improves my productivity a lot by speeding up OS / application launch times. I currently have a WD 10K RPM VelociRaptor, which is incredibly fast. Two in a RAID 1 would be even better and would also improve availability.
- Monitors - Perhaps the most important. Having multiple monitors will tremendously increase your productivity. I currently have three identical 19" monitors and would not recommend any fewer. Obviously, you will need enough video cards to support said monitors at decent resolutions (DVI is a plus).
Scott Guthrie posted a blog entry about this awhile back, citing hard drive speed as the bottleneck for sluggishness in software development computers. I tend to agree. RAM is so cheap that getting 2-4 gigs is pretty much standard. You'll probably want a dual core processor as well, but again, those are standard as well. None of this matters though if your hard drive can't keep up.
Also, make sure to have at least two monitors. This is a no-brainer.
Edit: Make sure you have a good backup system for when (not if) your hard drive breaks down. Whether it's ghosting your drive or syncing important files to a backup drive, make sure that you can get your system back up and running ASAP in the event of a hardware malfunction.
Multiple, large-resoloution monitors are my best recommendation - they help so much once you get used to using them and seeing everything with onyl a turn of your head can be a huge benefit.
Performance is your next need: you want things to happen quickly else your concentration flow is broken (well, mine is anyway). Dual core processors are the norm and should be taken advantage of.
But as Joseph said - you shouldn't be looking for anything excessively huge unless you're constructing Half Life 3.
Depends what type of Productivity. But i'd say: 4 GB RAM at least. The Question Dual vs. Quad Core CPU really depends on your type of development (i.e. some C++ compilers scale with multiple CPUs, while as a .net guy a faster Dual Core is possibly faster), but I prefer Quadcore to run Virtual Machines, especially since both Microsoft and VMWare have free Software for virtualization.
For the rest... I'm happy with my 10k rpm Hard drive, but to be fair, I/O performance is really not that important for development, unless you actually run a huge database on your dev machine or process millions of files. Of course, separate drives for System and Apps is mandatory, but pretty much every current S-ATA or SAS drive will be fast enough. (Note: Laptops are a special case as there are a lot of really slow crappy drives. Also Note: Usually, Random Access Time is the most important indicator for performance, because normally you work with many small rather than few large files - but that also depends on what you develop on)
Also, if you do Game Development, you possibly want a proper Graphics Card. I use a GeForce 7900GTX in my machine which serves me well, but if you "only" do applications, any card with DVI output will do. Yes, DVI, because where else do you want to hook up your 1920x1200 24" screen to? :-)
What would you consider the ideal computer configuration for software development? Also, what upgrades would you look at for a development computer?
The computer configuration I would consider ideal for software development:
- Form factor: Laptop/Notebook
- OS: Windows XP (I currently develop for Windows; I've used Vista and hate it)
- RAM: As much as possible
- CPU: Dual-core
- Drive: 250GB 7200RPM
- Tweaks: Remove all theming from the UI, unused services (I have batch files that start and stop IIS, SQL Server, etc.).
- Utilities: 7-zip, Notepad2, SlickRun, KDiff3, AutoRuns, xp-AntiSpy, AVGFree, TortoiseSVN...
I also consider an external USB drive invaluable for the virtual machines I do the actual development on; I keep my actual OS very clean and use VMs for everything possible.
As for RAM, make sure your OS and chipset will recognize all 4GB of RAM if you get it. I own a ThinkPad T60 and the chipset, while it "supports" 4GB, will not recognize more than 3GB, so it would be pointless to get that much. Just check your specific machine to be sure.
I'm a huge fan of Mac Pros and MacBook Pros with VMWare Fusion. I like being able to emulate all the OSs I develop for.
For developing I would actually recommend a 19/20" monitor that you can turn vertically. you can fit much more code on the monitor at once this way.
Other than that i would recommend
- >2.0 Ghz dual/quad core cpu
- Atleast 3 Gb RAM
- 2x250Gb HDD (1 for backup)
For developing I would actually recommend a 19/20" monitor that you can turn vertically. you can fit much more code on the monitor at once this way.
The problem with that is it looks ugly. ClearType on windows, and whatever name OSX has for it, work around the order of the sub-pixels in your monitor being horizontally in R, G, B order.
link if you don't understand what I'm talking about
When you rotate 90 degrees your pixels are not in that order any more, so it will either go wrong, or be disabled. I've seen some 90 degree rotated LCD's on NVidia graphics cards, and it kind of looks like it disables cleartype and uses grayscale font-smoothing instead.
This is all personal preference so your mileage may vary, but I can't stand it :-(
8-core Mac Pro for office. A MacBook to take on the road. VMWare Fusion to run Windows, Linux, and whatever else I need.
My ideal hardware is some sort of server farmer managed by Sun's GRID or Platform's LSF.
Then you can run parallel builds without slowing yourself down.
I prefer my desktop/laptop system be a dumb terminal to get me into a more capable server for the actual development/build/debugging.
That development/build/debugging server would be a two socket, quad core, 4GB/core RAM system that is connected to fast discs, backed up, on all the private networks that I care about, and hosting all the current compilers and tools that I need for the development at hand. I need at least sudo/Adminstrative privileges for my user account. In general, a system like this can easily host 15 or so developers without breaking a sweat.
For my personal system, I prefer a laptop. The basics have been covered:
- Laptop dock. Lets you keep a common environment as you move from office to conference room to home to b'ness trips to local wifi hotspot. The dock provides additional USB ports for external hard drives (gotta have the music collection somewhere), etc.
- Extra installed battery for the laptop. You want at least 6 hours of hard use on battery.
- All the RAM the OS/motherboard will address. At least 2GB, 4GB is better.
- Dual core or quad core. (This lets n-1 cores run the corporate virus scanner, while leaving you a single core that can still do work... ;) )
- Dual monitors.
There are some other environmental requirements that need to be met for a software development space:
- Ergonomic keyboard. (I like the Goldtouch split keyboard.)
- Mouse of my choice. (I like the Logitech Marble Mouse.)
- A really good chair.
- An adjustable footrest.
- A headset for the phone...for hands free talking, or typing while in a meeting.
- Lots of easily accessible bookshelf space. (If you are into books as a way to store and retrieve information.)
- And I want the exact same setup at my house.
That dumb terminal will need some basic software installed:
- VNC is a must for getting into the server.
- TeraTerm (with SSH) is another must...in case you ever need to hook a serial line to a server and get at it's console the hard way. TT is just a darn handy quick window for basic sysadmin style tasks on servers.
- A decent ftp program. Filezilla comes to mind.
- Some kind of *nix command line tools. Running linux on the laptop works. cygwin also works. So do the various unix tool ports to windows. When you have code local to your box having basic unix tools is very handy. I am thinking of tools like cscope, rsync, grep, awk, sed, diff/kdiff, find, and some kind of posix shell (e.g. bash, ksh) for writing basic tools.
- Scripting language of your choice. (e.g. python, perl, etc).
- Revision control system client. You need to be able to get at your source code local to your laptop. (e.g. TortisSVN is a good windows SVN client.) Get a client for your box that will let you keep working on the code when you are away from the server.