Without software programmers, we wouldn't have gone to the moon. Without software programmers, we wouldn't be nearly as far in medical research (including and especially cancer research) as we are today. Without software healthcare, government, military, and nearly every other aspect of our society wouldn't function, or would function poorly.

So, then, why are programmers thought poorly of by society? I would like to postulate that it is because we continually fail to live up to those lofty successes and, instead, are content to capitulate to business demands in exchange for job security.  We are, simply put, not confident enough to stand up for the nobility of our profession.

Developers (myself included) often capitulate on things that they know, instinctively, are good practices. This is usually due to a manager or a business stakeholder telling them that it will add time and money and 'we can't do that'. We usually end up caving in and doing things the way we're told versus the way we know is right.  The end result is, usually, a disaster of one form of another and most programmers end up leave the project jaded, disgusted, and with a strong sense of "I told you so."  They then proceed to move onto the next project and do the cycle repeats.

Rarely is anything ever elevated, practices questioned, methods critically reviewed in this vicious cycle. The jading sets in deeper until the programmer has emotionally and professionally checked out of development altogether and is an automaton translating commands from the business stakeholder into C#, VB.NET, or some other language.

If I had a nickel for every time I heard another programmer say something to the effect of, "my manager won't allow me to do [best practice] because he thinks [some ridiculous excuse]" I would be rich!  And, sadly, the programmer doesn't know or no longer has the will to argue on behalf of the better practices -- the thing he/she KNOWS to be true. Some of this is due to the stereotype into which many developers fall.  They are not, typically (WARNING: Wide, sweeping generalizations ahead!) not able to communicate as effectively as, say, salespeople or marketing people. We are not ABLE to argue on our behalf effectively and this leads to the downward spiral.

Therefore, it becomes incumbent upon those in the developer community who DO possess both the knowledge and the communication skills (or at least the willingness to TRY communicating) necessary to produce compelling arguments and real, demonstrable results from following these best practices.

As a developer, I feel it is my ethical obligation to attempt to serve my customer the best way I know how. Even when the customer tells me to do something wrong and they're willing to pay me more money to do it, I *MUST* inform them that it is the wrong thing to do and will cost them more money in the long run. If they persist, I must choose whether to refuse service (put it all on the line), or service their whims with strong caveats and huge CYA to ensure that, when things inevitably do go wrong, that they're clear that it was their own fault for not listening to the professional.

I has been my experience, however, that taking the second option almost NEVER works out well. Regardless of how many pieces of paper they sign, or how many "Yes, I understand what you're telling me" statements they give you, it will, ultimately, be your fault for allowing them to go down that road. If we all stand up as professionals and are willing to risk being fired or reprimanded for serving the customer ethically, the risk of being fired or reprimanded will decrease rapidly. No one will ever take you seriously unless you're willing to risk something to prove you're right.

As an aside: Coincidentally, this is why I associate myself with the "ALT.NET movement".  I feel that the ALT.NET movement represents many like-minded individuals who feel the same way about making a sincere attempt at standing up for ethics and nobility of the profession.  We may disagree on how best to accomplish that, but I believe we all agree that it needs to be done. This diverse group includes all ranges of developers (including several within the employ of Microsoft) from all around the world.