Two years seems to be the developer half-life in most shops. By that point if you're worse than average they've canned you, and if you're better than average your responsibilities have grown to the point that you're spending as much or more time dealing with cross-team organizational bullshit as you are doing what you actually love (writing code) and hence wanting to quit. :) The thing is, I think every gig has problems, and often they're the same tedious set of problems, but people jump in the hopes that maybe, maybe the grass will actually be greener THIS time. (After a decade or two of corporate culture, further, it's all too likely that the truly idiosyncratic individuals will have accumulated enough capital and enough disgust with the system that they give it all the finger and go run a bar just to pick one prominent example.)
The other direct motivator that comes to mind is money. All too many shops hire you at a rate that approximates more-or-less-if-you're-lucky Market Rate for your skills and so forth, then want to give you sub-10% raises for ever and ever thereafter. Ergo it's easier to ramp your salary in tune with your experience by jumping periodically. This is perhaps most prevalent in the first ten years of a programming career as there are big deltas at roughly two and five and seven-ten years of experience as you start to [potentially] hop up the org chart some from junior to regular to senior dev.
So in short I think that getting fed up with a given situation and taking steps to change it for (hopefully, maybe not, probably not... but hopefully) the better is both normal and healthy. Or are you of the opinion that backing the same crappy horse for years is the best way to go through life?