tags:

views:

1400

answers:

16

Hey guys,

I'm a Computer Science student and have about a year left to graduate. My current computer is getting a little crummy and I'm looking to build my next system.

My question, is there certain things that I should include to help me with my software engineering needs? Such as a quad-core with slower ghz compared to a faster dual core. So anyways to optimize my compile time etc.. by getting better hardware would be awesome to know. Thanks

+9  A: 

We recently built new developer machines at my workplace and put 10,000 rpm hard disks in them. They absolutely fly through compiling code.

Ty
"Fly" is a great description - the 10k drives I've used tend to sound like jets taking off. Very, very fast though. :-)
Sherm Pendley
SCSI or SAS is even better in my experience. And you can get 15K! The Seagates with fluid bearings are not too loud, but need active cooling so some more fan noise.
Zan Lynx
Yes, a fast SATA drive is a good idea.
Bill the Lizard
We used the Western Digital VelociRaptor II (320GB) in ours and they're almost silent. I was quite surprised.
Ty
+16  A: 

The things that really matter are

  • Multiple monitors
  • Lots of RAM (2-4GB, dependent on your IDE)
  • A really fast network connection (For Googling and StackOverflow help. Also for the connection to your repository.)
  • A fast hard drive (can really reduce your compile times on large projects).

I find that even with a slower (meaning not quite bleeding edge) processor, I don't spend that much time compiling code. (Of course, you will be doing it dozens, if not hundreds, of times a day, so your mileage may vary.)

Bill the Lizard
I would also mention the quad core processors as well. Anything to bring down compile time/ increase multitasking capability
Simucal
Just as a reference, I have a dual-core and it doesn't seem to slow me down. This is purely subjective, of course, as I haven't benchmarked it against a quad.
Bill the Lizard
I'd say it is not the number of monitors, but the available non-disrupted screen estate that is important. I'd rather have a 24" monitor than two 19" ones for example. This is especially important since IDEs take a lot of screen estate and you want to fit it in one screen. Multiple vritual desktops!
willcodejavaforfood
@willcode: Many people would disagree with you. Dual 19" monitors is pushing it, but two 20" monitors would beat a 24-30" monitor any day. Using one monitor for your IDE and another for debugging/testing/referencing increases productivity by leaps and bounds. Virtual desktops just aren't the same.
William Brendel
caveat: if you do C++ development, you REALLY want quad core (or more) as C++ compilation is heavily parellizable, much more so than managed or interpreted languages
Jeff Atwood
@William: Personally, anything smaller than 22" isn't worth it, but once you hit 22", two are better than one larger one.
Dan
Hard drive speed is way overlooked, and in most of my experience, is more of a bottleneck than anything else. Once you've worked on a RAID'd workstation, everything else seems like molasses.
Not Sure
Throw on at least 6 GB RAM -- it's dirt cheap nowadays, and if you're running IDE + a database + a VM or two, its well worth it. Oh, and run a 64 bit OS.
Chris Hynes
+5  A: 

For one thing, don't eat so many sandwiches at your desk - that will keep your next computer from getting so crummy. :-)

Seriously though. Compilers are very disk-intensive, opening, reading, and writing a ton of relatively small files in rapid succession. So you want at least a 7200RPM hard drive, and faster if you can afford it. Seek times are important here.

Compilers are also RAM-hungry. Plan on at least 1-2GB per core.

Sherm Pendley
+2  A: 

If you are buying a laptop (and certainly if it's a desktop), make sure to make your primary monitor as big as possible (with res) and WIDESCREEN. I can't overemphasize the latter point - most development environments like to spread out with a lot of informational displays on the sides. If you can have them and still keep most of your code without horizontal scrolling, you're in a great stage.

Next (if you have a desktop), make sure your computer can drive two monitors and preferably more than that. It's great to be able to devote a screen for the running program and/or for documentation/web searches. An extra monitor can handle unrelated stuff like twitters/email/web/itunes, etc.

As for the actual computer: quad core is very useful if you will work with multiple processes (e.g., IDE, server implementation, client implementation, database). Memory goes without saying.

You can typically skip investing in a 3D accelerator.

You may want to pick the OS that works best for you. That usually means avoiding Vista.

Uri
Actually, if you don't have a /semi/ decent video card, the load will be delegated onto your processor for some draw routines, thus wasting cycles. ( Not to mention cpu context switch increases )
Kent Fredric
My experience is that there is not that much connection between a card's 2D and 3D performance. Cards that can handle multiple monitors (or work nicely with other cards) for multiple monitors tend to be decent in their 2D performance. But that's a good point, of course.
Uri
+7  A: 

If money is no object, and if I were to build or find an ideal system for myself, then I can think of the following off the top of my head:

  • Dual- or quad-core processor - This is a little bit tricky, as there are not too many applications out there that take full advantage of multiple cores. As you said, it may be possible that a lower-clock speed quad-core would be faster than an higher-clocked dual-core, but only if applications you use will take advantage of multiple cores. I'm not too familiar with development tools which utilize multiple cores, but I think I've heard some compilers support multiple core processors.

  • Plenty of RAM - You'll want to have enough so you don't have any disk swapping which will reduce performance. Also, RAM tends to be fairly cheap these days, so having at least 2 GB would be nice. Going over 4 GB really depends on whether you have a 64-bit operating system.

  • A fast hard drive - Faster the hard drive, less time you'll be waiting for your code to compile, especially when you have lots of small files that need to be read and written. I'd think that a high-RPM drive with plenty of cache would be nice. Perhaps RAID for the more ambitious?

  • Dual monitors (or more?) A multiple monitor set up will be very helpful. You can organize one display for looking up documentation while the other is the IDE and yet another for the browser. I wish I had multiple monitor setup!

coobird
If you foresee a need to run Virtual machines on the same PC, then multiple cores/CPU are definitely an advantage.
Greg Domjan
Esp when compiling you can take advantage of multiple cores: make -j XIf you have to compile much code I can only recommend quad core.
flolo
+3  A: 

Depending on what system you're developing for, you may want to max out an iMac. With an iMac, you'd be able to run Parallels, install Windows XP and Vista in virtual machines, and still be able to test your application in Linux and OS X. If you were to go with an iMac, I'd recommend 4 Gigabytes of RAM and at least the 3.06 GHz Quad Core Processor.

George Stocker
+2  A: 

Quad Core may not necessarily be an advantage. Most of the compile phase you'll find to be single threaded, unless you can have a build script which can build some of the components in parallel ( usually need a larger codebase for this to be of benefit though )

As for Quad vs Dual core, going slower really wont help you much if the drop is too substantial.

I was an AMD fanboy drooling over overclocked water cooled phenoms until i smoked one with a stock C2D laptop.

What matters largely in many cases is your cache size. Those Core2 bad-boys with 2-3 MB/core just kick ass.

Also, get loads of ram. And don't do something daft like try getting 4G ram, 2 x 1G video cards and running it all on a 32bit OS, it just doesn't work, that will just slow you down. If you want to utilise lots of ram, you need 64 bit.

On a linux box there is a really handy trick I can recommend for a build environment: massive TMPFS.

You have a full copy of your code base checked out into a file system which is basically stored in ram, and the output files also turn up in memory. This absolutely screams, and will make those people touting their 10k rpm drives cry about how they cost so much :)

( Anybody who's compiled openoffice will know, when you see it build in only 2hours, something is really chomping the data )

Kent Fredric
You can do RAM drives on Windows too, although I forget the details.
Zan Lynx
Quad core is useful when you want to develop database-driven client-server applications locally. Having a separate "processor" (in theory) for each process and the database daemon works wonders.
Uri
VS2010 will do multicore compiles for C++.
Aidan Ryan
+2  A: 

15K SCSI or SAS! Yay for disk speed! Quad cores are pretty nice, but you still have to wait for final link and IPO to finish.

Zan Lynx
+1  A: 

Also, invest in a good keyboard/mouse combo that is better for programming. The performance boost you'd get from that (regardless of computer) may affect your day-to-day use tremendously. See SO questions to find the best ones.

Uri
A: 
  1. Don't get a laptop! The keyboards are too cramped.
  2. Get lots of RAM. It's cheap, and big IDEs like Eclipse and MSVC will love you for it.
  3. If your build environment has any sort of make capabilities, you won't be compiling huge amounts of code that often. A cheap AMD 64x2 is perfectly adequate.
  4. See if the (dual) wide-screen monitors can rotate 90 degrees. You'll be able to fit more code in your editing window.
  5. Spend money on a good-feeling keyboard.
  6. Go for a quiet computer. That means, among other things, lower voltages, lower wattage, a fanless (i.e. trailing-edge NVidia 7300) video card, and Samsung hard drives. It'll cost extra but be easier on your brain. (Too bad there are no laptops with multiple VGA outputs!
I disagree with point #1 (partially). My main work machine is a laptop (Dell Precision M65) with a duel core (2ghz), 2.5gb ram and a 7k2rpm SATA drive. It works great. It helps that when I'm in the office I have an external keyboard, mouse and a second monitor. But its a great setup!
WestDiscGolf
Point #6 is true, but you forgot to mention that one can buy an external video card (Matrox does them) that supports up to 4 monitors. It's costly, though!
Dmitri Nesteruk
+5  A: 

I am halfway joking, but I think the best computer for programmers, from a user perspective, would the most slow, memory-restrained machine possible (and also, tiny screen and slow video card if you are doing GUI work).

Because it seems the developers optimize their programs to what appears fast to them, not what is possible to optimize. Such a computer would change their way of thinking, and most of applications could be much faster and less memory-hungry.

J S
Interesting idea. I'd counter that the dev boxes should be fast as possible for efficiency but some test machines need to barely meet spec.
Aidan Ryan
I can second this - my work computer is about 2-3 times as good as my home PC, so when I take work home with me, I can more easily see how it will run on an 'older' machine.
Charlie Salts
+1  A: 

In addition to the previous posts:

  • buy an Intel processor, because AMD are way weaker at integer throughput, although their over all performance is not that bad. Integer throughput is what counts in this case

  • 5:4 or 4:3 screens not-glossy screens rather than 16:10 glossy stuff. You won't type 200 letters per line anyways, and I find it far more useful to display more text vertically.

  • Consider buying an SSD with 150/100MB/s reading/writing speed or more as an OS-partition. Although the speedup gained won't justify ~200$ extra.

  • Very important to me is the keyboard. To cut it short I prefer the Cherry Stream Keyboard. Not expensive. Excellent pressure point. Very flat, so that my hands can rest on the keys instead of bowing upwards.

  • avoid exotic graphics accelerators, because configuring/driver installation is really no fun (linux hurray)

Ronny
A: 

Since you've got some good answers already (fairly obvious ones, too), I'm going to throw in a few 'strange things' of my own:

RAM Disk

This is useful if you're working with files a lot: something that happens, e.g., if you are working with DSLs that need to regenerate quickly. There are two options here: the easy one (and one I recommend to everyone) is to allocate some RAM as a virtual disk. If you can allocate enough for your solution, you'll find significantly faster Visual Studio operation (file I/O specifically). Just remember to set up a backup program, since RAM is volatile.

The more 'hardcore' option is to use a hardware RAM disk, such as the Gigabyte i-RAM. This baby comes as either a PCI card or a separate box and, together with 4Gb RAM (sorry, that's the maximum for this device) will set you back about $500.

Quiet Components

To be honest, I'm sick and tired of IT shops that buy noisy computers - this is certainly something that I'm not prepared to tolerate at home. So my coding computer uses a Scythe Orochi - a really monstrous heatsink. Also, I do not use graphics cards that use fans, preferring ones with heatsinks instead. 'Hear your thoughts', as they say.

Cheap Monitors

Yes, cheap. I find that expensive monitors are typically optimized for movies and games, and have enormous levels of contrast, in addition to the fact that they are often glossy rather than matte. So instead, I would go for cheaper 20" matte displays - they may not rotate, but they won't set you back that much, and they are easy on the eyes.

Dmitri Nesteruk
+1  A: 

Though URI pointed out it's important to have a Widescreen, I recommend maximizing the vertical screen resolution to have enough room for many lines of code. The ideal way to do this:

Buy a Monitor with 1920x1200 resolution and pivot feature. Turning it 90 degrees will give you 1200x1920 resolution. If your driver supports a keybord shortcut for rotating the screen, you can change between those two modes in 5 seconds.

Brian Schimmel
A: 

This is entirely dependent upon what you are developing for. Take your target system requirements, and double them and use that as your minimum specs for the dev machines. That may seem odd, but it is about the point I've found that I've needed at least of when developing various projects.

The importance of getting good a keyboard and chair is always underrated. If you are going to spend a lot of time at this PC, those are very important.

Monitors tend to be a very personal thing, so definitely attempt to try out any monitor you are considering getting. For programming I think you'd be much happier with a matte finish display; so called 'high contrast' displays often have a gloss coat that causes glare. Dual monitors is highly recommended, the longer you have them the more you'll need them! Keeping them the same can be an improvement, but if you don't have the cash for two high end LCDs, I recommend getting one high end 24" LCD and a cheaper/smaller 20".

RAM is cheap, and you'll likely never have enough. If you are running 32bit Windows, max it out at 4GB of RAM. If you are using another OS that supports more than 4GB of ram (Linux, or 64bit Windows for example), start at 8GB minimum, and if you are working on multimedia projects be ready to upgrade from there.

Best bang for the buck on CPUs seems to be Quad cores right now, so I would say that at least a quad core (2.4Ghz or so) should be the minimum. You may not see much difference going up beyond there, until you get until dual quad core, which is a large price jump.

Find a reliable hard drive or two. Reliability and speed are going to be more important than size. Personally I currently go for a pair of 640GB western digital drives in all machines I build.

Drakonite
A: 

Remember to get lots of disk space. You're going to want to save lots of snapshots and backups of your code, be it in an SCM or just zip files.

I know a few developers that use removable hard drive trays for the second hard drive so they can put different projects on their own drive. I would use external USB hard drives instead though.

dj_segfault