A few life lessons that may help...
- No matter how smart you may think you are, there are others who are smarter
- In almost all cases, software provides a service to those who need to use the software for their job. So when the customer/user asks or suggests a change, resist the urge to say "Why would you need to do that?" Listen to their needs, take the advice in stride.
- Managers have their own goals and methods that often work against engineering quality (specifically cost, schedule and award fee). No matter how "right" you think you are, you will probably not change their motives or methods.
- Your career and time are valuable. Choose who you work for carefully and don't misplace your loyalty. (See previous point).