If they're underperforming and not living up to what you want from them, fire them and find someone else who will.
I don't understand why employees are expected to just act helpless and be held hostage because someone gave them a job. If you're good in your field (especially in an area like tech), you should have no trouble finding other jobs at your fair market value and keeping your employer honest.
This is how I view just about any business relationship. They are not hiring me, I am giving them something in exchange for them giving me something. If the arrangement is not beneficial to either of us, it should be renegotiated. I have no problem finding someone else to enter an arrangement with (including contract work).
If I need something I don't go on my knees with my hand out. I understand that in the current economy, the balance of power has shifted towards employers, but it's times like these that the above attitude can make all the difference (for the better).
I also take every job I do very seriously and never abuse the responsibility I'm given. People appreciate those who can get the job done, a lot of which I can attribute to my success. If you do have a cocky attitude, it helps to be able to back it up ;).
If you're timid like me (and a LOT of other programmers!) then yes, quitting and getting another job is how you fix the situation. It's currently the norm in the industry.
I disagree that you've got a 'week bargaining position', though. If they're underpaying you and you ask for a raise, they can stiff you on the raise and hope you don't quit... Or they can give you the raise.
If they don't give you the raise, they know that you know you're being underpaid. At that point, you're virtually guaranteed to start looking at other jobs. You'd be a fool not to at least look.
So even if they're greedy bastards, a little common sense will show them that they need to take care of the problem properly.
Sadly, not all of them have that sense.
But most who quit and get a different job don't ask for a raise. They've already been told flat-out that they aren't getting one, and asking would be silly at that point. That's the position I was in, and it was silly. It didn't do any good except to make me mad enough that I wasn't comfortable in that company any more. (It was a nice, cushy job where I chose what I worked on, so long as it was productive.) See, they had told me that they were capping all raises at 5% because of the economy. The thing is, they had previously shown me how they do better in a bad economy, because they save companies money and new customers come flocking in. I accepted that answer 1 year because the job was really comfy. The second year, I just couldn't accept it. I was too far below what I felt I was worth.
tl;dr - Yes. Quit and find another job if they won't give you the raise you deserve.
Treat your employer like a relationship. As long as it works, be invested in your job and do your best. If something isn't working (like your comp), man up and have the hard discussion with your employer. If they don't fix it, find another job, but also leave properly - give proper notice, put your work in order, etc.
Don't be paranoid. Don't get into this thing that you're "putting it to the man." Yes, some bosses suck, and some are cheap. Most are just trying to do their job, and most would rather keep you around than lose you.
Dear god no. As an employee, learn how to negotiate and get raises. Ramit Sethi's book I Will Teach You To Be Rich contains an excellent guide to asking for a raise, which I personally used to secure an 80% raise at a previous job.
-If you ask for a raise without an offer in hand, you have a weak bargaining position
-If you ask for a raise with an offer in hand, you are “holding them hostage”
What is an employee to do then? Simply expect fair raises to come periodically, initiated by the employer, and quit if they don't?