In one of his latest posts, Joel mentions "intrinsic motivation" vs. "extrinsic motivation". To quote,
Intrinsic motivation is your own, natural desire to do things well. People usually start out with a lot of intrinsic motivation. They want to do a good job. They want to help people understand that it’s in their best interest [...]. They want to write less-buggy code.Extrinsic motivation is a motivation that comes from outside, like when you’re paid to achieve something specific.Intrinsic motivation is much stronger than extrinsic motivation. People work much harder at things that they actually want to do. That’s not very controversial.
It makes me think of something I read elsewhere. To paraphrase, the "manager type" person is motivated by awards and stuff-on-the-wall because they tend to be more social. They want to show their achievements. Programmers, on the other hand, tend to be practical. They want faster machines, two monitors, a cool wireless desktop or bluetooth headphones.
I have to add that when management tries to add "fun" to a developer's work life it becomes "extrinsic motivation", and it can even become insulting. Not only can it be something that the developer will deem downright stupid, but most importantly it blatantly ignores what the developer is asking for.
My advice to management: listen. People complain all the time in different ways and degrees. Don't just shrug it off and say "don't come to me with a problem and no suggestions" because a manager's job is not just to "pick and choose". Granted, many people whine all the time but the point here is that people do say what they want. Don't insult their intelligence by giving them a smiley face sticker or overtly saying "let's have fun".