Tools of the Trade
There are times when we all act like software is born out of pure thought,
hurled on to CD-ROMs by the sheer Olympian effort of our finely-tuned minds. In
reality, of course, there's a whole pile of silicon chips and other gizmos
involved in the process. Too often I find developers (or their bosses) who have
paid little attention to that part of the work, and who are struggling along
with inferior hardware. This business is difficult enough without having poor
tools to do battle with as well, so here are my thoughts on hardware circa
First off, if I'm ever in the position of managing a corporate development
group again, I'm going to fight like mad to keep my people from being stuck with
the one-size-fits-all computers that the beancounters want to stick us with. In
an ideal world, I'll be able to get a budget cap and tell each developer to
spend it wisely (perhaps with my benevolent supervision to make sure we don't
end up with a bunch of gaming machines). In a less-than-ideal world, I'd
seriously consider selling the corporate computers on eBay and hiding money in
the morale budget to make up the difference to decent computers. I figure if I
just move the asset tags, accounting will never notice. Because whatever else I
know about computers, I know that different developers have different ideas
about the perfect hardware. Better to encourage this than to fight it, I
Case in point: input devices. I personally prefer trackballs (I'm using a
Microsoft Trackball Explorer right at the moment), but I realize to most of my
peers this is a quaint affectation, as if I wore muttonchop whiskers. Still, the
work for me, and if you try to stick a mouse on my desk, I'll whack it with a
hammer if there's no other way to get rid of the darned thing. But mice and
trackballs (or even trackpads or pointing sticks) are cheap enough that every
developer ought to be able to buy what they prefer. In fact, if I end up in a
corporate setting and they won't shell out for a trackball, I'll just buy my
own. It's worth it.
The same goes for keyboards. Go down to your local PC store, pound on all the
keyboards they have, figure out which one works for you, and buy it. Personally,
I'm a fan of the original IBM PC keyboard, with the springy keys and the
clickity-clack sound; I can type faster on them than on a modern mush-mechanism
keyboard. Fortunately, Unicomp still makes that exact keyboard, though under
their own name, so I'm happily typing on one right now.
Dual monitors are one of those things, like pair programming, that contribute
more to productivity than you might think. I don't think I've seen a convincing
explanation yet, but almost every developer seems to be more productive with two
monitors hooked up to one machine than with one monitor each on two machines -
and if you save the price of the second machine, you can buy decent monitors.
Here again, "decent" is defined by the user; there seems to be a wide gulf
between those of us who prefer CRTs and those who prefer LCDs. CRTs are cheaper
and deal with multiple resolutions better; LCDs are smaller and lighter, use
less power, and look sexier. Which one looks clearer is a metter of personal
preference. But you're going to be staring at the darned thing at least 40 hours
a week, so it's important to get something that you can live with. Of
course, if you get dual monitors, you need a dual-head video card. There are
ways to use two separate video cards but I've always found they require
endles configuration sessions.
RAM: get all that the motherboard will hold, and if the motherboard won't
hold at least 1GB, get a new motherboard. 1.5 or 2GB is better. Even if your
primary tools don't fill that much, most developers will benefit from having a
few virtual machines running from time to time, and those suck down RAM in big
Choice of motherboard and CPU strikes me as less important. For most of us,
anything put out in the last couple of years will be fast enough. If you're
dealing with software where your CPU is a serious bottleneck, you might want to
look at a barebones system from one of the specialty gaming PC builders (like
Falcon); gamers tend to be better at squeezing out the last bit of performance
than those of us in the pocket protector set.
I want my hard drives to be fast and reliable. In my next system, this
probably means SATA drives. Get enough to set up mirroring or RAID to protect
you against drive failures. Drive sizes need not be excessive, but giving how
cheap they are these days, they might as well be.
For a network card, I'll take wired over wireless. Same for mice and
keyboards. Wireless is sexy. Wired is faster and reliable. Your mileage may
There are a few other amenities that are worth thinking about. Front-panel
USB connectors are nice, but if you're stuck with a PC without them, an
extension cable and USB hub are trivial expenses. I like to have a tiny graphics
tablet around for times when I'm brainstorming or sketching on screen; Wacom has
some inexpensive starter models.
Personally, I've always believed that investing in decent hardware is one of
the cheapest ways to increase developer productivity. Why this isn't the case in
more organizations remains an eternal mystery.
Mike Gunderloy has been developing software for a quarter-century now, and writing about it for nearly as long. He walked away from a .NET development career in 2006 and has been a happy Rails user ever since. Mike blogs at A Fresh Cup.