I have a 40 minute commute to and from work which I use to read the papers or a book. I have an official 'work-from-home' day (Wednesday) and the option to work from home other days if there's nothing at the office that requires my attention.
However, I usually just go in to the office every Wednesday and only sometimes use the work-from-home-any-day option.
I happen to like the work environment we have. I have a nice clean office space with a big desk, two large monitors, good lighting, a comfortable chair, a kitchen with food and drinks, a rec room with couches and a pool table and whiteboards everywhere.
I am frequently interrupted, but half the time it's by fellow coders working on different problems who want to bounce some ideas off of me. There's an unwritten protocol for programmers interrupting programmers where I work. You walk by and say 'hey'. You get a 'hey' back and if the programmer doesn't turn back to the monitor, they're usually open for interruption. Or they might suck you into whatever problem they're working on.. :)
The other half of the interruptions are from the operations, business, sales and management side. These can be very annoying and consume a lot of time, but I encourage them (up to a point). For one, they provide a good finger on the pulse of the wider company operations. They keep a level of transparency between software development and the other areas of the company. They're also good for social cohesion (a 'we' feeling as opposed to 'us and them').
Interaction just works better face-to-face. The pool table we have, for example, is rarely used for actual games. Usually it's used by two or three people that are discussing something and just making a few shots while doing it. Or just goofing off for a bit.
Of course, I also have to get some code done. I can manage my time and do this, but I also have a lot of freedom in this respect. If you're working with a boss who micro-manages you, eh.. well .. that's a different story. (I suggest getting another job. I've been there and it sucked).
(/ (* amount-of-the-task difficulty-of-the-task)