In an earlier posting, I listed the programming tools I use. As part of setting up at the Blueprint Organization (who have kindly given me desk space for the next few months), I've realized that a complete working environment needs more than just software.
Peace and quiet.
Study after study has proved that this has more impact on productivity than a fast network, a fat disk, or caffeine, but most workplaces are still too crowded, too noisy, and filled with too many interrupts. It takes most people ten to fifteen minutes to get back into a state of flow after being distracted, which means that four or five interruptions per hour effectively renders someone zero percent effective. I know people say, "If I can't overhear what other people are talking about, I might miss something important," but that's false economics: the time occasionally saved is greatly outweighed by the time repeatedly lost.
A good chair with a firm back costs one fifth of what a mid-range PC does. A full-sized keyboard (I have large hands---most laptop keyboards force me to bend my wrists uncomfortably) costs fifty dollars, and a lamp with a soft-light bulb is another forty. The combination doesn't just let me program longer each day; it also helps ensure that I'll still be able to program five or ten years from now without chronic back and wrist pain.
(Those of you who are in the Computer Science building at the University of Toronto might want to compare this ideal setup with what's in Bahen 3200. Its lighting gives glare without illumination; the dark wooden counters make the optical mice jerky; and the bar stools are guaranteed to make your lower back ache after an hour. In short, it looks like the kind of places that get full-page spreads in architectural magazines...)
A pad of gridded paper and several ballpoint pens.
I often make notes for myself when programming, or draw box-and-arrow diagrams of my data structures when debugging. I used to keep an editor open in a background window to do the former, but when my wrists started acting up, I discovered that taking my hands away from the keyboard for a few moments to scribble something down provided welcome relief. I also quickly discovered that the odds of me being able to read my own notes the next day rose dramatically if I used gridded paper to line them up.
A heavy mug for coffee or tea.
I don't know why, but a styrofoam cup, or a normal teacup, just isn't as satisfying as a little hand-sized ceramic boulder. Maybe it satisfies my subconscious Neanderthal urge to club my computer to death when it misbehaves...
A rubber duck.
One of computing's many apocryphal stories holds that someone---Brian Kernighan, maybe, or Dennis Ritchie---keeps a rubber duck next to his computer. Whenever a bug takes more than a few minutes to track down, he puts the duck on his desk and explains the problem to it. Why? Because speaking out loud forces you to marshal your thoughts, which in turn highlights any contradictions or missed steps that you hadn't noticed while everything was just swirling around inside your head.
A squirt bottle of glass cleaner and a box of kleenex.
I can't stand smears on my screen. They drive me nuts. Whenever I'm showing something to someone, and they actually touch my screen instead of just pointing, I have another Neanderthal fantasy, except this time it's not subconscious...
A chess set.
I'm a very bad chess player. Luckily, so are most people, so it's usually possible to find someone at my level for a ten-minute game at lunch. Other programmers I know play euchre, or knit---a programmers' "stitch and bitch" session can be jaw-dropping to listen to. Few people can focus for more than a few hours before their productivity drops; it's better to acknowledge this, and take a break in the middle of the day, than to say, "Must... keep... coding..." and produce garbage that just has to be rewritten later.
Three small rubber balls.
As I've hinted above, my hands and wrists hurt if I type for more than an hour or two. I recently discovered that if I roll a couple or three small rubber balls around in one hand while I'm thinking, doodling, or sipping tea, it can stave off the aches and pains. A former colleague swore by his Chinese medicine balls, except those made a tinny twanging sound, which eventually led to a Neanderthal moment.
You can find a lot on-line, but it's hard to google with your feet up on your desk, and even harder to fold down the corners on web pages. When I want API documentation, I use the web; when I want a tutorial, I still prefer the printed page. Right now, for example, I have Tapestry in Action, Hibernate in Action, the Java Cookbook, a hard copy of the Subversion command reference, the latest edition of Andrew Patzer's book on JSPs, and JUnit Recipes within reach.
Back when I was a part-time grad student, I had a settled routine: I brought three sets of gym gear to the office on Monday morning, worked out at lunchtime on Monday, Wednesday, and Friday, and took my stuff home at the end of the week. After about two months, I came in to find that my co-workers had hung a little chandelier made of air fresheners over my desk. Since then, I've tried not to inflict my laundry on others, but I still store my shoes in my bottom drawer.
Everyone wants to feel at home; everyone wants to make wherever they are uniquely theirs. I do it by hanging four postcard-size pictures wherever I work: a Spanish woman spinning thread, St. John Coltrane, a fully-dressed man in a bathtub reading a book, surrounded by phones that are off the hook, and a sketch of Edinburgh. A photograph of five of my nephews goes on my desk beside my scribble pad. They're all laughing, because my brother was mooning them as my sister-in-law took the picture. One day, perhaps, a hippo dressed up like a superhero will join them all...