Its interesting how Rands and Joel agree on the basic quiet/dark/cave/hoodie/headphones "zone" construct, and yet nearly every startup I've visited or seen office pictures of on their website insists on a faux-egalitarian setup where everyone sits in one giant noisy room.
It's the classic demo vs. reality problem (or hollywood vs. reality problem). What looks cool for short periods of time often doesn't match what is actually useful for 2,000 hours per year.
An IDE that displays code on the sides of rotating icosahedrons looks really cool for about 3 seconds, but is hugely impractical in reality. Similarly, giant noisy rooms seem more interesting in pictures and in planning but in practice are less useful than individual walled offices.
One of the great things about individual offices in terms of facilitating collaboration is that it actually makes it far easier to have impromptu meetings between a small number of people. In cubicles people tend to avoid such things since the noise is disruptive to others and there's not much room for people, with offices you can close the door and have 3 or 4 people in a single office without much problem or much impact on others. There are many other examples.
Is there an eclipse plugin for that? I want it!
I'm pumping up some prodigy and cracking some government databases later tonight it'll be perfect for that.
Well for starters, the alternative of giving everyone a private office is really really expensive. Especially if you're also (like me) a believer in the idea that offices should have windows. I had my own windowless office for a year or so, and it was a really depressing environment in which to work -- I much prefer my current two-person office with a view.
The other point is that while an individual programmer might be more productive when he's alone in a room, a group might be more productive if they're all in the same room together. No point in having everyone write twice as much code per day if the code no longer fits together and nobody has any idea what everybody else is doing.
How much of a programmer's time is actually spent sitting down in full-on focus mode belting out lines of code?
Of course a cheaper option is to allow remote working to those who want it, at least for most days of the week. Use the office for client meetings and the occasional get-together. That way I get to have my private office with a window, coffee machine, private snack bar, XBox console and anything else I want, and it doesn't cost you a penny.
Besides, groups of developers in large open source projects, distributed around the world, seem to manage fine.
On the other hand, being in the same room all day all week can be incredibly depressing. I've done it in the past and prefer any kind of office to working at home for extended periods.
Ensuring the code fits together is an activity that happens before you start coding. If a fellow programmer creates a function and then discusses with me how to integrate this, every single time, I'm not going to get any work done.
People can only work in groups when you divvy the work up between them, or if the group all focusses on one thing (one guy holds the fencepole up, the other whacks it with a hammer. One guy codes, the other guy checks the code. Etc).
The little full-on focus mode I get is spent on working out which code I need to put where. The remainder, simple code-monkey work, can be done in a normally focussed manner. Constant integration with everyone else's work destroys all focus.
I think that there's a tradeoff between software engineers being able to work well on this specific problem, and knowing which problem is a good problem to work on. The first benefits from being isolated; the second from having the rest of the team nearby.
To put into perspective check this fragment of interview (http://www.youtube.com/watch?v=hE7k0_9k0VA#t=18m25s) by Peter Norvig. What he is saying is there is a trade-off between using open space vs. cubicles.
I cannot hear anything when coding. My coworkers learned if they needed a question answered to tap me on the shoulder and wait while my brain loaded Japanese from disk, since coding pages it out.
That actually sounds like a great work environment.
Kinda like coding at a Starbucks, where there's nonstop conversation on all sides, but a near certainty that none of it will be directed at you. White noise + Social Energy = Productivity in my experience.
I like music while coding and depending on the style, it usually doesn't distract me. But I also don't mind or even realize the lack of tunes if I'm deep into a coding session. I often marvel that I went N hours without music and didn't even notice it until I came up for air.
Maybe you need better headphones. I used to have a pair of crappy ones, and I hated them - and then I splurged on a pair of Sennhausers, and it's gravy.
As I sit in my cube, mandated business attire donned, bright fluorescent lights flickering above me, and listening to the constant drone that is the heating system, I read this article and utter a small prayer. That somehow, somewhere, someone who actually manages developers reads this blog, and hires me.
I'm guessing you're not in the SF Bay Area? Come join us for gold rush #37! (Right order of magnitude, anyway.)
I mean, at least you're very unlikely to encounter a place with a dress code. There's still plenty of fluorescent lights and droning HVAC systems, though.
If anyone is in Atlanta or willing to relocate, we're always hiring Ruby engineers or smart hackers who will learn Ruby and Rails. No dress code and we're getting rid of most of the fluorescent lights. We have fun problems and work with a respectable amount of traffic and data. Shoot me an email; the info is in my profile.
I'm often poor with my communication (in terms of: clarity, consideration, and courtesy), but when a new piece from Rands comes out I consistently find myself forwarding it or printing it for a loved one and saying "This is what I try to mean when I say ___________"
My big headphones are my hoodie. I could be completely alone, with no ambient noise, and I still put them on. Sometimes they're not even plugged in. My coworker does the same thing.
I don't know if you've seen Dr Strangelove, but your comment reminds me of Major Kong, taking off his flying helmet and putting on his cowboy hat when it's time to go fight World War 3.
The thing to remember is, he came up through the ranks to became a manager, and seems to be one that decided to put the energy he used to into learning new tech/coding techniques/etc into becoming a good manager.
If you've not read anything from his blog before, it's worth at least skimming back through the archives to see what tickles your fancy. He's got some VERY good articles.