IMO, this question actually leads into the difference between people that must be managed vs. people that can manage themselves.
Much like managed code, people that must be managed require a runtime. They must have structure, office hours, scheduled meetings, a certain amount of vacation days so they know how much they've "used up", tasks/tickets handed to them, and a set of rules to play by. Without this structure, they will get lazy, push the boundaries, and require constant correction from you. There's a certain, usually "corporate" style of development that lends itself to these types of developers. If that's you, then you might consider ways to restrict distractions and social networks.
People that can manage themselves are the ones that only need a vision, and they're off with it, delivering stuff at 2pm Tuesday and midnight on Thursday or on the weekend, talking with customers, and moving things forward without your scheduling a status meeting. They will set their own limits with regard to social network time, StackExchange time (ahem), etc. These make good developers for creative and innovative products. Under no circumstances should you restrict their access to social networks or anything else; it's not necessary. A good trust relationship is a must, and web proxies / filters / timeclocks / forms are the enemy of trust.