I agree with art about face time. It's really important to keep in touch with your coworkers. Otherwise you find out about changes in the organization too late, or you stop getting consideration for cool projects.. or maybe even promotions.
For what it's worth, I've done a few small programming contract jobs from home (not the only jobs I've had). Did the code, sent it to them, got a check for it. Simple as that.
Unfortunately, such jobs are not easy to come by and usually require a friend or two in the company in question. I wish I could freelance all the time but I can't.