This reminds me of an article I read once and probably couldn't google now; about how "being a professional" means different things for different professions (radically different, from the status point of view).
The examples used were lawyers and teachers. Both professions have people who try to present themselves as professionals, but they do it differently. When a lawyer says "I am a professional", they mean they do they work well and they demand appropriate compensation. When a teacher says "I am a professional", they mean they do they work well... but speaking about compensation is somehow taboo. Actually, there is this meme going around that if a teacher cares too much about their salary, they were not meant to be a teacher, because they care more about money than about teaching. No one would try saying the same bullshit to a lawyer, though. The lawyer is allowed to say that their job is the most important thing in their life... and then refuse to work for you if you refuse to pay them enough money, or refuse to follow their advice, etc. The teacher is allowed, even required, to pretend they don't have a life outside of their work; but then they are supposed to shut up, accept whatever conditions were given to them, and do their best, and keep doing this for their whole life.
According to that article, the main difference was that lawyers have made their definition of "being a professional" from inside; they put there what they expect from themselves, and also what they expect for themselves in return. On teachers the definition was pushed from outside; and some of them internalized it, and the remaining ones don't know how to defend verbally against this kind of abuse.
With programmers, I think it is mixed. Some of them have the lawyer-like attitude. Just read this article by Joel Spolsky -- he is not afraid to say openly that if a company doesn't use source control, can't make a build in one step, doesn't have a bug database, doesn't fix bugs before writing new code, doesn't have speficication, doesn't have testers, and programmers don't have quiet working conditions... then he wouldn't work in such a company. Because he is a professional; he can produce high-quality outputs, but he also requires adequate inputs. He refuses to work in substandard conditions, because he knows it would impact his outputs, and then he would look like a less competent person than he is. And there is also this component of status... he is good enough and knows that if his conditions are not met here, they will be met somewhere else. So he doesn't have to compromises here, and the employer wouldn't push them on him.
Then there are also programmers who are an opposite of this. Give them a noisy working environment without source control and without testers, no specification and no bug database... and they will somehow take is as a matter of their pride to produce as good results as possible even in such an environment. Without proper financial compensation, mind you; according to my experience such people are paid less than people working in better conditions. (If the company is too miserly to pay for decent working environment and decent tools, they probably try to cut down costs everywhere.) As if for these people the source of their pride is to withstand all abuse, and pretends it's all okay, because hey, they are grown-ups. If you demand better working conditions, you seem spoiled; if you leave the company because someone else offered you better conditions, you are a person who gives up easily. -- This is what I called a servant mentality. It's not: "I'll do my best, and I expect to be paid handsomely." It's: "I'll do my best, of course, and I deserve nothing; my privilege to serve you is the greatest reward I could ever get." Secretly, they would prefer better conditions; but they don't have any hope left.
While the programmers compete against each other based on craft, the predators look after the status and power of their group.
And the rational (winning) reaction is to a) whine, or b) start looking after your status and power, too? And please, no reversing stupidity; I'm not suggesting the programmers should give up their programming skills completely. Just not to pretend that the programming skills with zero strategic skills is the winning strategy. Because it obviously isn't. We are still humans working in human organizations; we need human-handling skills, too. Even if these skills are difficult, especially for some introverted people etc., the low-hanging fruit is really worth picking.
This is what I called a servant mentality. ...It's: "I'll do my best, of course, and I deserve nothing; my privilege to serve you is the greatest reward I could ever get."
But nobody is really thinking that last phrase.
Secretly, they would prefer better conditions; but they don't have any hope left.
This is nearer the truth. They're too hopeless, too irresponsible, too lazy, or too cowardly, and don't care enough about their own lives to take care of business and take action to improve their lives.
...And the rational (winning) reaction is to
Here is an interesting blog post about a guy who did a resume experiment between two positions which he argues are by experience identical, but occupy different "social status" positions in tech: A software engineer and a data manager.
The author concludes that positions that are labeled as code-monkey-like are low status, while positions that are labeled as managerial are high status. Even if they are "essentially" doing the same sort of work.
Not sure about this methodology, but it's food for thought.